ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWE4YzMzLi4wMDAwMDAwCi0tLSBhLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0uKi5zdz8KLSoub3JpZwotKi5yZWoKLSoubwotKn4KLS8uY2NhY2hlLwotL2FtaW5jbHVkZV9zdGF0aWMuYW0KLS9idWlsZC1hdXgvCi1jb21waWxlCi1jb25maWcuY2FjaGUKLWNvbmZpZy5sb2cKLWNvbmZpZy5zdGF0dXMKLWNvbmZpZy5zdWIKLWNvbmZpZ3VyZQotY3Njb3BlLm91dAotZGVwY29tcAotKi5wYwotaW5zdGFsbC1zaAotbGlidG9vbAotbHRtYWluLnNoCi1taXNzaW5nCi0vbTQvbHQqLm00Ci0vbTQvbGlidG9vbC5tNAotc3RhbXAtaDEKLXN0YW1wLWgKLXN0YW1wLWguaW4KLURveHlmaWxlCi1NYWtlZmlsZQotTWFrZWZpbGUuaW4KLWFjbG9jYWwubTQKLWF1dG9tNHRlLmNhY2hlCi1jb25maWcuZ3Vlc3MKLWNvbmZpZy5oCi1jb25maWcuaC5pbgotKi5iYgotKi5iYmcKLSouZGEKLSouZ2NvdgotKi5nY2RhCi0qLmdjbm8KLXRhZ3MKLS9idXMvdG1wZmlsZXMuZC9kYnVzLmNvbmYKLS9kYnVzLTEuKi1jb3ZlcmFnZS5pbmZvCi0vZGJ1cy0xLiotY292ZXJhZ2UuaW5mby50bXAKLS9kYnVzLTEuKi1jb3ZlcmFnZS8KLS9kYnVzLTEuKi8KLS9kYnVzLTEuKi50YXIuKgotL2xjb3YuaHRtbC8KLS9sY292LmluZm8KLS9sY292LmluZm8udG1wCi0vdGFwLWRyaXZlci5zaAotL3Rlc3QtZHJpdmVyCmRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcubWQgYi9DT05UUklCVVRJTkcubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YzYwMmUuLjAwMDAwMDAKLS0tIGEvQ09OVFJJQlVUSU5HLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMzkyICswLDAgQEAKLSMgQ29udHJpYnV0aW5nIHRvIGRidXMKLQotVGhlIGd1aWRlbGluZXMgaW4gdGhpcyBmaWxlIGFyZSB0aGUgaWRlYWxzOyBpdCdzIGJldHRlciB0byBzZW5kIGEKLW5vdC1mdWxseS1mb2xsb3dpbmctZ3VpZGVsaW5lcyBwYXRjaCB0aGFuIG5vIHBhdGNoIGF0IGFsbCwgdGhvdWdoLiAgV2UKLWNhbiBhbHdheXMgcG9saXNoIGl0IHVwLgotCi0jIyBTb3VyY2UgY29kZSBhbmQgaXNzdWUgdHJhY2tpbmcKLQotU291cmNlIGNvZGUgYW5kIGlzc3VlIHRyYWNraW5nIGZvciB0aGUgRC1CdXMgc3BlY2lmaWNhdGlvbiBhbmQgaXRzCi1yZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gJ2RidXMnIGFyZSBwcm92aWRlZCBieSBmcmVlZGVza3RvcC5vcmcgR2l0bGFiOgotPGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9kYnVzL2RidXM+LgotCi0jIyBSZXBvcnRpbmcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzCi0KLUlmIHlvdSBmaW5kIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0aGF0IGlzIG5vdCBrbm93biB0byB0aGUgcHVibGljLAotcGxlYXNlIHJlcG9ydCBpdCBwcml2YXRlbHkgdG8gZGJ1cy1zZWN1cml0eUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKLW9yIGJ5IHJlcG9ydGluZyBhIEdpdGxhYiBpc3N1ZSBhdAotaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cy9pc3N1ZXMvbmV3IGFuZCBtYXJraW5nIGl0Ci1hcyAiY29uZmlkZW50aWFsIi4KLQotIyMgTWFpbGluZyBsaXN0Ci0KLVRoZSBELUJ1cyBtYWlsaW5nIGxpc3QgaXMgZGJ1c0BsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGRpc2N1c3Npb24gb2YKLXByb3RvY29sIGVuaGFuY2VtZW50cywgbmV3IGltcGxlbWVudGF0aW9ucywgZXRjLiBzaG91bGQgZ28gdGhlcmUuCi0KLSMjIENvZGUgb2YgQ29uZHVjdAotCi1BcyBhIGZyZWVkZXNrdG9wLm9yZyBwcm9qZWN0LCBkYnVzIGZvbGxvd3MgdGhlIENvbnRyaWJ1dG9yIENvdmVuYW50LAotZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL0NvZGVPZkNvbmR1Y3QKLQotUGxlYXNlIGNvbmR1Y3QgeW91cnNlbGYgaW4gYSByZXNwZWN0ZnVsIGFuZCBjaXZpbGlzZWQgbWFubmVyIHdoZW4KLWludGVyYWN0aW5nIHdpdGggY29tbXVuaXR5IG1lbWJlcnMgb24gbWFpbGluZyBsaXN0cywgSVJDLCBvciBidWcKLXRyYWNrZXJzLiBUaGUgY29tbXVuaXR5IHJlcHJlc2VudHMgdGhlIHByb2plY3QgYXMgYSB3aG9sZSwgYW5kIGFidXNpdmUKLW9yIGJ1bGx5aW5nIGJlaGF2aW91ciBpcyBub3QgdG9sZXJhdGVkIGJ5IHRoZSBwcm9qZWN0LgotCi0jIyBEZXZlbG9wbWVudAotCi1ELUJ1cyB1c2VzIEdpdCBhcyBpdHMgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4gVGhlIG1haW4gcmVwb3NpdG9yeSBpcwotaG9zdGVkIG9uIGZyZWVkZXNrdG9wLm9yZyBHaXRsYWIuIFRvIGNsb25lIEQtQnVzLCBleGVjdXRlIG9uZSBvZiB0aGUKLWZvbGxvd2luZyBjb21tYW5kczoKLQotICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZGJ1cy9kYnVzLmdpdAotICAgIGdpdCBjbG9uZSBnaXRAZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZzpkYnVzL2RidXMuZ2l0Ci0KLVRoZSBzZWNvbmQgZm9ybSBpcyB0aGUgb25lIHRoYXQgYWxsb3dzIHB1c2hpbmcsIGJ1dCBpdCBhbHNvIHJlcXVpcmVzCi1hbiBTU0ggYWNjb3VudCBvbiB0aGUgc2VydmVyLiBUaGUgZmlyc3QgZm9ybSBhbGxvd3MgYW5vbnltb3VzCi1jaGVja291dHMuCi0KLSMjIyBCcmFuY2hlcwotCi1ELUJ1cyBkZXZlbG9wbWVudCBoYXBwZW5zIGluIG11bHRpcGxlIGJyYW5jaGVzIGluIHBhcmFsbGVsLiBUaGUgbWFpbgotYnJhbmNoZXMgYXJlIHRoZSBjdXJyZW50IHN0YWJsZSBicmFuY2gsIHdpdGggYW4gZXZlbiBtaW5vciBudW1iZXIgKGxpa2UKLTEuMCwgMS4yIGFuZCAxLjQpLCBhbmQgdGhlIG5leHQgZGV2ZWxvcG1lbnQgYnJhbmNoLCB3aXRoIHRoZSBuZXh0IG9kZAotbnVtYmVyLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgc3RhYmxlIGJyYW5jaCBpcyBkYnVzIDEuMTIueCBhbmQKLXRoZSBkZXZlbG9wbWVudCBicmFuY2ggaXMgZGJ1cyAxLjEzLngsIGxlYWRpbmcgdG8gYSBuZXcgMS4xNC54IHN0YWJsZQotYnJhbmNoIGluIGZ1dHVyZS4KLQotU3RhYmxlIGJyYW5jaGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgdmVyc2lvbiBudW1iZXIgaXRzZWxmIChgZGJ1cy0xLjJgLAotYGRidXMtMS40YCksIHdoZXJlYXMgdGhlIGRldmVsb3BtZW50IGJyYW5jaCBpcyBzaW1wbHkga25vd24gYXMKLWBtYXN0ZXJgLgotCi1OZXcgZmVhdHVyZXMsIGVuaGFuY2VtZW50cywgbWlub3IgYnVnIGZpeGVzLCBhbmQgYnVnIGZpeGVzIHRoYXQgYXJlCi11bnVzdWFsbHkgaW50cnVzaXZlIHNob3VsZCBhbHdheXMgYmUgYmFzZWQgb24gdGhlIGBtYXN0ZXJgIGJyYW5jaC4KLQotRml4ZXMgZm9yIHNpZ25pZmljYW50IGJ1Z3Mgc2hvdWxkIGJlIGRldmVsb3BlZCBvbiB0aGUgYG1hc3RlcmAgYnJhbmNoCi1hbmQgY2hlcnJ5LXBpY2tlZCB0byB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIGJyYW5jaC4KLQotRGVwZW5kaW5nIG9uIHRoZSByZWxlYXNlIGN5Y2xlcyBvZiB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMsIHNvbWUKLW9sZGVyIHN0YWJsZSBicmFuY2hlcyBtaWdodCBjb250aW51ZSB0byByZWNlaXZlIGZpeGVzIGZvciBzZWN1cml0eQotdnVsbmVyYWJpbGl0aWVzIChhbmQgc29tZXRpbWVzIG1ham9yIG5vbi1zZWN1cml0eSBidWdzKSBmb3IgYSB0aW1lLgotVGhlc2UgYXJlIGFubm91bmNlZCBvbiB0aGUgRC1CdXMgbWFpbGluZyBsaXN0LgotCi1PbGQgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLCBhbmQgd2lsbCBub3QgcmVjZWl2ZQotYW55IGJ1ZyBmaXhlcyAtIG5vdCBldmVuIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFBsZWFzZSBkbyBub3QKLXVzZSBhIGRldmVsb3BtZW50IGJyYW5jaCBsaWtlIDEuMTMueCBpbiB5b3VyIE9TIGRpc3RyaWJ1dGlvbiwgdW5sZXNzCi15b3UgY2FuIGd1YXJhbnRlZSB0aGF0IHlvdSB3aWxsIHVwZ3JhZGUgdG8gdGhlIG5leHQgc3RhYmxlIGJyYW5jaCBzdWNoCi1hcyAxLjE0Lnggd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KLQotIyMjIENvbW1pdHMKLQotSWYgeW91IGFyZSBtYWtpbmcgY2hhbmdlcyB0aGF0IHlvdSB3aXNoIHRvIGJlIGluY29ycG9yYXRlZCB1cHN0cmVhbSwKLXBsZWFzZSBkbyBhcyBzbWFsbCBjb21taXRzIHRvIHlvdXIgbG9jYWwgZ2l0IHRyZWUgdGhhdCBhcmUgaW5kaXZpZHVhbGx5Ci1jb3JyZWN0LCBzbyB0aGVyZSBpcyBhIGdvb2QgaGlzdG9yeSBvZiB5b3VyIGNoYW5nZXMuCi0KLVRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUgYSBzaW5nbGUgc2VudGVuY2UgdGhhdAotZGVzY3JpYmVzIHRoZSBjaGFuZ2UsIG9wdGlvbmFsbHkgd2l0aCBhIHByZWZpeCB0aGF0IGlkZW50aWZpZXMgdGhlCi1hcmVhIG9mIHRoZSBjb2RlIHRoYXQgaXMgYWZmZWN0ZWQuCi0KLVRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgZGVzY3JpYmUgd2hhdCB0aGUgcGF0Y2ggY2hhbmdlcwotYW5kIHdoeSwgYW5kIGFsc28gbm90ZSBhbnkgcGFydGljdWxhciBzaWRlIGVmZmVjdHMuIFRoaXMgc2hvdWxkbid0IGJlCi1lbXB0eSBvbiBtb3N0IG9mIHRoZSBjYXNlcy4gSXQgc2hvdWxkbid0IHRha2UgYSBsb3Qgb2YgZWZmb3J0IHRvIHdyaXRlIGEKLWNvbW1pdCBtZXNzYWdlIGZvciBhbiBvYnZpb3VzIGNoYW5nZSwgc28gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UgYm9keSBpcwotb25seSBhY2NlcHRhYmxlIGlmIHRoZSBxdWVzdGlvbnMgIldoYXQ/IiBhbmQgIldoeT8iIGFyZSBhbHJlYWR5IGFuc3dlcmVkCi1vbiB0aGUgb25lLWxpbmUgc3VtbWFyeS4KLQotVGhlIGxpbmVzIG9mIHRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgaGF2ZSBhdCBtb3N0IDc2IGNoYXJhY3RlcnMsCi10byBjb3BlIHdpdGggdGhlIHdheSBnaXQgbG9nIHByZXNlbnRzIHRoZW0uCi0KLVNlZSBbbm90ZXMgb24gY29tbWl0IG1lc3NhZ2VzXShodHRwczovL3doby10LmJsb2dzcG90LmNvbS8yMDA5LzEyL29uLWNvbW1pdC1tZXNzYWdlcy5odG1sKSwKLVtBIE5vdGUgQWJvdXQgR2l0IENvbW1pdCBNZXNzYWdlc10oaHR0cHM6Ly90YmFnZ2VyeS5jb20vMjAwOC8wNC8xOS9hLW5vdGUtYWJvdXQtZ2l0LWNvbW1pdC1tZXNzYWdlcy5odG1sKQotb3IgW0hvdyB0byBXcml0ZSBhIEdpdCBDb21taXQgTWVzc2FnZV0oaHR0cHM6Ly9jaHJpcy5iZWFtcy5pby9wb3N0cy9naXQtY29tbWl0LykKLWZvciByZWNvbW1lbmRlZCByZWFkaW5nIG9uIHdyaXRpbmcgaGlnaC1xdWFsaXR5IGNvbW1pdCBtZXNzYWdlcy4KLQotWW91ciBwYXRjaGVzIHNob3VsZCBhbHNvIGluY2x1ZGUgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgd2l0aCB5b3VyIG5hbWUgYW5kCi1lbWFpbCBhZGRyZXNzLCBpbmRpY2F0aW5nIHRoYXQgeW91ciBjb250cmlidXRpb24gZm9sbG93cyB0aGUgW0RldmVsb3BlcidzCi1DZXJ0aWZpY2F0ZSBvZiBPcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnLykuIElmIHlvdSdyZQotbm90IHRoZSBwYXRjaCdzIG9yaWdpbmFsIGF1dGhvciwgeW91IHNob3VsZCBhbHNvIGdhdGhlciBTLW8tYidzIGJ5Ci10aGVtIChhbmQvb3Igd2hvbWV2ZXIgZ2F2ZSB0aGUgcGF0Y2ggdG8geW91LikgVGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzCi1pcyB0aGF0IGl0IGNlcnRpZmllcyB0aGF0IHlvdSBjcmVhdGVkIHRoZSBwYXRjaCwgdGhhdCBpdCB3YXMgY3JlYXRlZAotdW5kZXIgYW4gYXBwcm9wcmlhdGUgb3BlbiBzb3VyY2UgbGljZW5zZSwgb3IgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRob3NlCi10ZXJtcy4gVGhpcyBsZXRzIHVzIGluZGljYXRlIGEgY2hhaW4gb2YgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBjb3B5cmlnaHQKLXN0YXR1cyBvZiB0aGUgY29kZS4KLQotV2Ugd29uJ3QgcmVqZWN0IHBhdGNoZXMgdGhhdCBsYWNrIFMtby1iLCBidXQgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuCi0KLSMjIyBTZW5kaW5nIGEgbWVyZ2UgcmVxdWVzdAotCi1XaGVuIHlvdSBjb25zaWRlciB5b3VyIGNoYW5nZXMgdG8gYmUgcmVhZHkgZm9yIG1lcmdpbmcgdG8gbWFpbmxpbmU6Ci0KLSogY3JlYXRlIGEgcGVyc29uYWwgZm9yayBvZiA8aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cz4KLSAgb24gZnJlZWRlc2t0b3Aub3JnIEdpdGxhYgotKiBwdXNoIHlvdXIgY2hhbmdlcyB0byB5b3VyIHBlcnNvbmFsIGZvcmsgYXMgYSBicmFuY2gKLSogY3JlYXRlIGEgbWVyZ2UgcmVxdWVzdCBhdAotICA8aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cy9tZXJnZV9yZXF1ZXN0cz4KLQotIyMjIFNlY3VyaXR5IGd1aWRlbGluZXMKLQotTW9zdCBvZiBELUJ1cyBpcyBzZWN1cml0eSBzZW5zaXRpdmUuICBHdWlkZWxpbmVzIHJlbGF0ZWQgdG8gdGhhdDoKLQotIC0gYXZvaWQgYG1lbWNweSgpYCwgYHNwcmludGYoKWAsIGBzdHJsZW4oKWAsIGBzbnByaW50ZigpYCwgYHN0cmxjYXQoKWAsCi0gICBgc3Ryc3RyKClgLCBgc3RydG9rKClgLCBvciBhbnkgb2YgdGhpcyBzdHVmZi4gVXNlIGBEQnVzU3RyaW5nYC4KLSAgIElmIGBEQnVzU3RyaW5nYCBkb2Vzbid0IGhhdmUgdGhlIGZlYXR1cmUgeW91IG5lZWQsIGFkZCBpdAotICAgdG8gYERCdXNTdHJpbmdgLgotCi0gICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zLCBmb3IgZXhhbXBsZQotICAgaWYgeW91ciBzdHJpbmdzIGFyZSBqdXN0IHVzZWQgdG8gaW5kZXggYSBoYXNoIHRhYmxlCi0gICBhbmQgeW91IGRvbid0IGRvIGFueSBwYXJzaW5nL21vZGlmaWNhdGlvbiBvZiB0aGVtLCBwZXJoYXBzCi0gICBgREJ1c1N0cmluZ2AgaXMgd2FzdGVmdWwgYW5kIHdvdWxkbid0IGhlbHAgbXVjaC4gQnV0IGRlZmluaXRlbHkKLSAgIGlmIHlvdSdyZSBkb2luZyBhbnkgcGFyc2luZywgcmVhbGxvY2F0aW9uLCBldGMuIHVzZSBgREJ1c1N0cmluZ2AuCi0KLSAtIGRvIG5vdCBpbmNsdWRlIHN5c3RlbSBoZWFkZXJzIG91dHNpZGUgb2YgYGRidXMtbWVtb3J5LmNgLAotICAgYGRidXMtc3lzZGVwcy5jYCwgYW5kIG90aGVyIHBsYWNlcyB3aGVyZSB0aGV5IGFyZSBhbHJlYWR5Ci0gICBpbmNsdWRlZC4gVGhpcyBnaXZlcyB1cyBvbmUgcGxhY2UgdG8gYXVkaXQgYWxsIGV4dGVybmFsCi0gICBkZXBlbmRlbmNpZXMgb24gZmVhdHVyZXMgaW4gbGliYywgZXRjLgotCi0gLSBkbyBub3QgdXNlIGxpYmMgZmVhdHVyZXMgdGhhdCBhcmUgImNvbXBsaWNhdGVkIgotICAgYW5kIG1heSBjb250YWluIHNlY3VyaXR5IGhvbGVzLiBGb3IgZXhhbXBsZSwgeW91IHByb2JhYmx5IHNob3VsZG4ndAotICAgdHJ5IHRvIHVzZSBgcmVnY29tcCgpYCB0byBjb21waWxlIGFuIHVudHJ1c3RlZCByZWd1bGFyIGV4cHJlc3Npb24uCi0gICBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBqdXN0IHRvbyBjb21wbGljYXRlZCwgYW5kIHRoZXJlIGFyZSBtYW55Ci0gICBkaWZmZXJlbnQgbGliYyBpbXBsZW1lbnRhdGlvbnMgb3V0IHRoZXJlLgotCi0gLSB3ZSBuZWVkIHRvIGRlc2lnbiB0aGUgbWVzc2FnZSBidXMgZGFlbW9uIChhbmQgYW55IHNpbWlsYXIgZmVhdHVyZXMpCi0gICB0byB1c2UgbGltaXRlZCBwcml2aWxlZ2VzLCBydW4gaW4gYSBjaHJvb3QgamFpbCwgYW5kIHNvIG9uLgotCi1odHRwOi8vdnNmdHBkLmJlYXN0cy5vcmcvIGhhcyBvdGhlciBnb29kIHNlY3VyaXR5IHN1Z2dlc3Rpb25zLgotCi0jIyMgQ29kaW5nIFN0eWxlCi0KLSAtIFBsZWFzZSBmb2xsb3cgdGhlIGNvZGluZyBzdHlsZSBhbmQgaW5kZW50YXRpb24gb2YgbmVhcmJ5IGNvZGUuCi0KLSAtIEMgY29kZSB1c2VzIEdOVSBjb2RpbmcgY29udmVudGlvbnMgKGFwcHJveGltYXRlbHkgImdudSIgc3R5bGUgaW4KLSAgIEVtYWNzKSwgd2l0aCBHTGliLWxpa2UgZXh0ZW5zaW9ucyAoZS5nLiBsaW5pbmcgdXAgZnVuY3Rpb24gYXJndW1lbnRzKS4KLQotIC0gV3JpdGUgZG9jcyBmb3IgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIGFuZCBzbyBvbi4gdHJ5Ci0gICBgZG94eWdlbiBEb3h5ZmlsZWAgcHJpb3IgdG8gY29tbWl0IGFuZCB0cnkgbm90IHRvIGNhdXNlIGFueSBuZXcKLSAgIHdhcm5pbmdzLgotCi0gLSBBbGwgZXh0ZXJuYWwgaW50ZXJmYWNlcyAobmV0d29yayBwcm90b2NvbHMsIGZpbGUgZm9ybWF0cywgZXRjLikKLSAgIHNob3VsZCBoYXZlIGRvY3VtZW50ZWQgc3BlY2lmaWNhdGlvbnMgc3VmZmljaWVudCB0byBhbGxvdyBhbgotICAgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gdG8gYmUgd3JpdHRlbi4gT3VyIGltcGxlbWVudGF0aW9uIHNob3VsZAotICAgYmUgc3RyaWN0IGFib3V0IHNwZWNpZmljYXRpb24gY29tcGxpYW5jZSAoc2hvdWxkIG5vdCBmb3IgZXhhbXBsZQotICAgaGV1cmlzdGljYWxseSBwYXJzZSBhIGZpbGUgYW5kIGFjY2VwdCBub3Qtd2VsbC1mb3JtZWQKLSAgIGRhdGEpLiBBdm9pZGluZyBoZXVyaXN0aWNzIGlzIGFsc28gaW1wb3J0YW50IGZvciBzZWN1cml0eSByZWFzb25zOwotICAgaWYgaXQgbG9va3MgZnVubnksIGlnbm9yZSBpdCAob3IgZXhpdCwgb3IgZGlzY29ubmVjdCkuCi0KLSMjIyBMaWNlbnNpbmcKLQotUGxlYXNlIG1hdGNoIHRoZSBleGlzdGluZyBsaWNlbnNpbmcgKGEgZHVhbC1saWNlbnNlOiBBRkwtMi4xIG9yIEdQTC0yKywKLXJlY2lwaWVudCdzIGNob2ljZSkuIEVudGlyZWx5IG5ldyBtb2R1bGVzIGNhbiBiZSBwbGFjZWQgdW5kZXIgYSBtb3JlCi1wZXJtaXNzaXZlIGxpY2Vuc2U6IHRvIGF2b2lkIGxpY2Vuc2UgcHJvbGlmZXJhdGlvbiwgb3VyIHByZWZlcnJlZAotcGVybWlzc2l2ZSBsaWNlbnNlIGlzIHRoZSB2YXJpYW50IG9mIHRoZSBNSVQvWDExIGxpY2Vuc2UgdXNlZCBieSB0aGUKLUV4cGF0IFhNTCBsaWJyYXJ5IChmb3IgZXhhbXBsZSBzZWUgdGhlIHRvcCBvZiB0b29scy9jaS1idWlsZC5zaCkuCi0KLSMjIyBCdWlsZCBzeXN0ZW1zCi0KLVRoZSBwcmltYXJ5IGJ1aWxkIHN5c3RlbSBmb3IgZGJ1cyB1c2VzIHRoZSBHTlUgQXV0b3Rvb2xzIHN1aXRlIChBdXRvY29uZiwKLUF1dG9tYWtlIGFuZCBMaWJ0b29sKS4gVGhpcyBidWlsZCBzeXN0ZW0gaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgZm9yCi1Vbml4IE9TIGludGVncmF0b3JzLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbXBpbGUgZGJ1cyBmb3IgV2luZG93cwotdXNpbmcgdGhlIG1pbmd3LXc2NCBjb21waWxlciBzdWl0ZSwgZWl0aGVyIGJ5IGNyb3NzLWNvbXBpbGluZyBvbiBhIFVuaXgKLXN5c3RlbSBvciBieSB1c2luZyBhbiBlbnZpcm9ubWVudCBsaWtlIE1TWVMyIG9uIFdpbmRvd3MuCi0KLVRoZXJlIGlzIGFsc28gYSBDTWFrZSBidWlsZCBzeXN0ZW0uIFRoaXMgaXMgcHJpbWFyaWx5IHRoZXJlIHRvIG1ha2UgaXQKLWVhc2llciB0byBidWlsZCBkYnVzIG9uIFdpbmRvd3MsIHVzaW5nIGVpdGhlciBhIE1TWVMyL21pbmd3IGVudmlyb25tZW50Ci1vciB0aGUgTVNWQyBjb21waWxlciBmcm9tIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBJdCBjYW4gYWxzbyBiZSB1c2VkCi1vbiBhIEdOVS9MaW51eCBzeXN0ZW0sIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgT1MgaW50ZWdyYXRvcnMuCi0KLUNoYW5nZXMgY29udHJpYnV0ZWQgdG8gZGJ1cyBtdXN0IG5vdCBicmVhayB0aGUgYnVpbGQgZm9yIGVpdGhlciBvZiB0aGVzZQotYnVpbGQgc3lzdGVtcy4gSXQgaXMgT0sgZm9yIHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0gdG8gc3VwcG9ydCBmZXdlcgotb3B0aW9ucywgc3VwcG9ydCBmZXdlciBvcGVyYXRpbmcgc3lzdGVtcywgaGF2ZSBsZXNzIHRlc3QgY292ZXJhZ2Ugb3IKLWJ1aWxkIGZld2VyIG5vbi1lc3NlbnRpYWwgcHJvZ3JhbXMsIGJ1dCBpdCBtdXN0IGNvbnRpbnVlIHRvIHdvcmsgb24gYXQKLWxlYXN0IEdOVS9MaW51eCBhbmQgV2luZG93cy4KLQotIyMjIEVudmlyb25tZW50IHZhcmlhYmxlcwotCi1UaGVzZSBhcmUgc29tZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEQtQnVzCi1jbGllbnQgbGlicmFyeS4KLQotKiBgREJVU19WRVJCT1NFPTFgCi0KLSAgVHVybnMgb24gcHJpbnRpbmcgdmVyYm9zZSBtZXNzYWdlcy4gVGhpcyBvbmx5IHdvcmtzIGlmIEQtQnVzIGhhcyBiZWVuCi0gIGNvbXBpbGVkIHdpdGggYC0tZW5hYmxlLXZlcmJvc2UtbW9kZWAuCi0KLSogYERCVVNfTUFMTE9DX0ZBSUxfTlRIPW5gCi0KLSAgQ2FuIGJlIHNldCB0byBhIG51bWJlciwgY2F1c2luZyBldmVyeSAqbip0aCBjYWxsIHRvIGBkYnVzX2FsbG9jYCBvcgotICBgZGJ1c19yZWFsbG9jYCB0byBmYWlsLiBUaGlzIG9ubHkgd29ya3MgaWYgRC1CdXMgaGFzIGJlZW4gY29tcGlsZWQgd2l0aAotICBgLS1lbmFibGUtZW1iZWRkZWQtdGVzdHNgLgotCi0qIGBEQlVTX01BTExPQ19GQUlMX0dSRUFURVJfVEhBTj1uYAotCi0gIENhbiBiZSBzZXQgdG8gYSBudW1iZXIsIGNhdXNpbmcgZXZlcnkgY2FsbCB0byBgZGJ1c19hbGxvY2Agb3IKLSAgYGRidXNfcmVhbGxvY2AgdG8gZmFpbCBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFsbG9jYXRlZCBpcyBncmVhdGVyCi0gIHRoYW4gdGhlIHNwZWNpZmllZCBudW1iZXIuIFRoaXMgb25seSB3b3JrcyBpZiBELUJ1cyBoYXMgYmVlbiBjb21waWxlZCB3aXRoCi0gIGAtLWVuYWJsZS1lbWJlZGRlZC10ZXN0c2AuCi0KLSogYERCVVNfVEVTVF9NQUxMT0NfRkFJTFVSRVM9bmAKLQotICBNYW55IG9mIHRoZSBELUJ1cyB0ZXN0cyB3aWxsIHJ1biBvdmVyIGFuZCBvdmVyLCBvbmNlIGZvciBlYWNoIGBtYWxsb2NgCi0gIGludm9sdmVkIGluIHRoZSB0ZXN0LiBFYWNoIHJ1biB3aWxsIGZhaWwgYSBkaWZmZXJlbnQgYG1hbGxvY2AsIHBsdXMgc29tZQotICBudW1iZXIgb2YgYG1hbGxvY2BzIGZvbGxvd2luZyB0aGF0IG1hbGxvYyAoYmVjYXVzZSBhIGZhaXIgbnVtYmVyIG9mIGJ1Z3MKLSAgb25seSBoYXBwZW4gaWYgdHdvIG9yIG1vcmUgYG1hbGxvY2BzIGZhaWwgaW4gYSByb3csIGUuZy4gZXJyb3IgcmVjb3ZlcnkKLSAgdGhhdCBpdHNlbGYgaW52b2x2ZXMgYG1hbGxvY2ApLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRzIHRoZQotICBudW1iZXIgb2YgY29uc2VjdXRpdmUgYG1hbGxvY2BzIHRvIGZhaWwuCi0KLSAgSGVyZSdzIHdoeSB5b3UgY2FyZTogSWYgc2V0IHRvIDAsIHRoZW4gdGhlIGBtYWxsb2NgIGNoZWNraW5nIGlzIHNraXBwZWQsCi0gIHdoaWNoIG1ha2VzIHRoZSB0ZXN0IHN1aXRlIGEgbG90IGZhc3Rlci4gSnVzdCBydW4gd2l0aCB0aGlzCi0gIGVudmlyb25tZW50IHZhcmlhYmxlIHVuc2V0IGJlZm9yZSB5b3UgY29tbWl0LgotCi0jIyMgVGVzdHMKLQotUGxlYXNlIHRyeSB0byB3cml0ZSB0ZXN0IGNvdmVyYWdlIGZvciBhbGwgbmV3IGZ1bmN0aW9uYWxpdHkuCi1XZSBoYXZlIHR3byBicm9hZCBjYXRlZ29yaWVzIG9mIHRlc3RzLgotCi1UaGUgKm1vZHVsYXIgdGVzdHMqIGFyZSBlbmFibGVkIGJ5IGNvbmZpZ3VyaW5nIHdpdGgKLWAtLWVuYWJsZS1tb2R1bGFyLXRlc3RzYC4gVGhlc2UgbW9zdGx5IHVzZSBHTGliJ3MgR1Rlc3QgZnJhbWV3b3JrLAotYW5kIGFyZSBzdGFuZGFsb25lIHByb2dyYW1zIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29udGVudHMgb2YgdGhlCi1wcm9kdWN0aW9uIGRidXMgbGlicmFyeSBhbmQgcHJvZ3JhbXMuIE1vc3Qgb2YgdGhlbSBjYW4gYmUgaW5zdGFsbGVkCi1hbG9uZ3NpZGUgdGhlIGxpYnJhcnkgYW5kIHByb2dyYW1zIGJ5IGNvbmZpZ3VyaW5nIHdpdGgKLWAtLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHNgLgotCi1UaGUgKmVtYmVkZGVkIHRlc3RzKiBhcmUgZW5hYmxlZCBieSBjb25maWd1cmluZyB3aXRoCi1gLS1lbmFibGUtZW1iZWRkZWQtdGVzdHNgLiBVbmxpa2UgdGhlIG1vZHVsYXIgdGVzdHMsIGVuYWJsaW5nIHRoZQotZW1iZWRkZWQgdGVzdHMgYWRkcyBzcGVjaWFsIGNvZGUgdG8gbGliZGJ1cyBhbmQgZGJ1cy1kYWVtb24sIHNvbWUgb2YKLXdoaWNoIG1heSBoYXJtIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5LiBBIHByb2R1Y3Rpb24gdmVyc2lvbiBvZiBkYnVzCi10aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgbmV2ZXIgaGF2ZSB0aGUKLWVtYmVkZGVkIHRlc3RzIGVuYWJsZWQuCi0KLUlmIHBvc3NpYmxlLCBuZXcgdGVzdCBjb3ZlcmFnZSBzaG91bGQgYmUgcHJvdmlkZWQgdmlhIG1vZHVsYXIgdGVzdHMsCi1wcmVmZXJhYmx5IHVzaW5nIEdMaWIncyBHVGVzdCBmcmFtZXdvcmsuIGB0ZXN0L2RidXMtZGFlbW9uLmNgIGlzIGEgZ29vZAotZXhhbXBsZS4KLQotIyMgSW5mb3JtYXRpb24gZm9yIG1haW50YWluZXJzCi0KLVRoaXMgc2VjdGlvbiBpcyBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gaW5mcmVxdWVudCBjb250cmlidXRvcnMuCi0KLSMjIyBSZWxlYXNpbmcKLQotVG8gbWFrZSBhIHJlbGVhc2Ugb2YgRC1CdXMsIGRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAtIGNoZWNrIG91dCBhIGZyZXNoIGNvcHkgZnJvbSBHaXQKLQotIC0gdmVyaWZ5IHRoYXQgdGhlIGxpYnRvb2wgdmVyc2lvbmluZy9saWJyYXJ5IHNvbmFtZSBpcwotICAgY2hhbmdlZCBpZiBpdCBuZWVkcyB0byBiZSwgb3Igbm90IGNoYW5nZWQgaWYgbm90Ci0KLSAtIHVwZGF0ZSB0aGUgZmlsZSBORVdTIGJhc2VkIG9uIHRoZSBnaXQgaGlzdG9yeQotCi0gLSB2ZXJpZnkgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbCBpcwotICAgY2hhbmdlZCBpZiBpdCBuZWVkcyB0byBiZTsgaWYgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSwgdXBkYXRlIHRoZQotICAgcmVsZWFzZSBkYXRlIGluIHRoYXQgZmlsZQotCi0gLSB1cGRhdGUgdGhlIEFVVEhPUlMgZmlsZSB3aXRoICJtYWtlIHVwZGF0ZS1hdXRob3JzIiBpZiBuZWNlc3NhcnkKLQotIC0gdGhlIHZlcnNpb24gbnVtYmVyIHNob3VsZCBoYXZlIG1ham9yLm1pbm9yLm1pY3JvLCBldmVuCi0gICBpZiBtaWNybyBpcyAwLCBpLmUuICIxLjAuMCIgYW5kICIxLjIuMCIgbm90ICIxLjAiLyIxLjIiOyB0aGUgbWljcm8KLSAgIHZlcnNpb24gc2hvdWxkIGJlIGV2ZW4gZm9yIHJlbGVhc2VzLCBhbmQgb2RkIGZvciBpbnRlcm1lZGlhdGUgc25hcHNob3RzCi0KLSAtICJtYWtlIGRpc3RjaGVjayIgKERPIE5PVCBqdXN0ICJtYWtlIGRpc3QiIC0gcGFzcyB0aGUgY2hlY2shKQotCi0gLSBpZiBtYWtlIGRpc3RjaGVjayBmYWlscywgZml4IGl0LgotCi0gLSBvbmNlIGRpc3RjaGVjayBzdWNjZWVkcywgImdpdCBjb21taXQgLWEiLiAgVGhpcyBpcyB0aGUgdmVyc2lvbgotICAgb2YgdGhlIHRyZWUgdGhhdCBjb3JyZXNwb25kcyBleGFjdGx5IHRvIHRoZSByZWxlYXNlZCB0YXJiYWxsLgotCi0gLSB0YWcgdGhlIHRyZWUgd2l0aCAiZ2l0IHRhZyAtcyAtbSAnUmVsZWFzZWQgWC5ZLlonIGRidXMtWC5ZLloiCi0gICB3aGVyZSBYLlkuWiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgcmVsZWFzZS4gIElmIHlvdSBjYW4ndCBzaWduCi0gICB0aGVuIHNpbXBseSBjcmVhdGVkIGFuIHVuc2lnbmVkIGFubm90YXRlZCB0YWc6Ci0gICAiZ2l0IHRhZyAtYSAtbSAnUmVsZWFzZWQgWC5ZLlonIGRidXMtWC5ZLloiLgotCi0gLSBidW1wIHRoZSB2ZXJzaW9uIG51bWJlciB1cCBpbiBjb25maWd1cmUuYWMgKHNvIHRoZSBtaWNybyB2ZXJzaW9uIGlzIG9kZCksCi0gICBhbmQgY29tbWl0IGl0LiAgTWFrZSBzdXJlIHlvdSBkbyB0aGlzICphZnRlciogdGFnZ2luZyB0aGUgcHJldmlvdXMKLSAgIHJlbGVhc2UhIFRoZSBpZGVhIGlzIHRoYXQgZ2l0IGhhcyBhIG5ld2VyIHZlcnNpb24gbnVtYmVyCi0gICB0aGFuIGFueXRoaW5nIHJlbGVhc2VkLiBTaW1pbGFybHksIGJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIG9mCi0gICBkYnVzLXNwZWNpZmljYXRpb24ueG1sIGFuZCBzZXQgdGhlIHJlbGVhc2UgZGF0ZSB0byAiKG5vdCBmaW5hbGl6ZWQpIi4KLQotIC0gbWVyZ2UgdGhlIGJyYW5jaCB5b3UndmUgcmVsZWFzZWQgdG8gdGhlIGNocm9ub2xvZ2ljYWxseS1sYXRlcgotICAgYnJhbmNoICh1c3VhbGx5ICJtYXN0ZXIiKS4gWW91J2xsIHByb2JhYmx5IGhhdmUgdG8gZml4IGEgbWVyZ2UKLSAgIGNvbmZsaWN0IGluIGNvbmZpZ3VyZS5hYyAodGhlIHZlcnNpb24gbnVtYmVyKS4KLQotIC0gcHVzaCB5b3VyIGNoYW5nZXMgYW5kIHRoZSB0YWcgdG8gdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSB3aXRoCi0gICAgIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIgZGJ1cy1YLlkgZGJ1cy1YLlkuWgotCi0gLSBzY3AgeW91ciB0YXJiYWxsIHRvIGZyZWVkZXNrdG9wLm9yZyBzZXJ2ZXIgYW5kIGNvcHkgaXQgdG8KLSAgIGRidXMuZnJlZWRlc2t0b3Aub3JnOi9zcnYvZGJ1cy5mcmVlZGVza3RvcC5vcmcvd3d3L3JlbGVhc2VzL2RidXMvZGJ1cy1YLlkuWi50YXIuZ3ouCi0gICBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBpZiB5b3UncmUgaW4gZ3JvdXAgImRidXMiCi0KLSAtIFVwZGF0ZSB0aGUgb25saW5lIGRvY3VtZW50YXRpb24gd2l0aCBgbWFrZSAtQyBkb2MgbWFpbnRhaW5lci11cGxvYWQtZG9jc2AuCi0KLSAtIHVwZGF0ZSB0aGUgd2lraSBwYWdlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMgYnkKLSAgIGFkZGluZyB0aGUgbmV3IHJlbGVhc2UgdW5kZXIgdGhlIERvd25sb2FkIGhlYWRpbmcuIFRoZW4sIGN1dCB0aGUKLSAgIGxpbmsgYW5kIGNoYW5nZWxvZyBmb3IgdGhlIHByZXZpb3VzIHRoYXQgd2FzIHRoZXJlLgotCi0gLSBwb3N0IHRvIGRidXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnIGFubm91bmNpbmcgdGhlIHJlbGVhc2UuCi0KLSMjIyBNYWtpbmcgYSAiLjAiIHN0YWJsZSByZWxlYXNlCi0KLVdlIGNyZWF0ZSBhIGJyYW5jaCBmb3IgZWFjaCBzdGFibGUgcmVsZWFzZS4gVGhlIGJyYW5jaCBuYW1lIHNob3VsZCBiZQotZGJ1cy1YLlkgd2hpY2ggaXMgYSBicmFuY2ggdGhhdCBoYXMgcmVsZWFzZXMgdmVyc2lvbmVkIFguWS5aOwotY2hhbmdlcyBvbiBhIHN0YWJsZSBicmFuY2ggc2hvdWxkIGJlIGxpbWl0ZWQgdG8gc2lnbmlmaWNhbnQgYnVnIGZpeGVzLgotCi1CZWNhdXNlIHdlIHdvbid0IG1ha2UgbWlub3IgY2hhbmdlcyBsaWtlIGtlZXBpbmcgdXAgd2l0aCB0aGUgbGF0ZXN0Ci1kZXByZWNhdGlvbnMgb24gYSBzdGFibGUgYnJhbmNoLCBzdGFibGUgYnJhbmNoZXMgc2hvdWxkIHR1cm4gb2ZmIHRoZQotZ2NjIHdhcm5pbmcgZm9yIGRlcHJlY2F0ZWQgZGVjbGFyYXRpb25zIChlLmcuIHNlZSBjb21taXQgNGViYjI3NWFiNykuCi0KLUJlIGV4dHJhLWNhcmVmdWwgbm90IHRvIG1lcmdlIG1hc3RlciAob3IgYW55IGJyYW5jaCBiYXNlZCBvbiBtYXN0ZXIpIGludG8gYQotc3RhYmxlIGJyYW5jaC4KLQotVG8gYnJhbmNoOgotCi0gICAgZ2l0IGJyYW5jaCBkYnVzLVguWQotCi1hbmQgdXBsb2FkIHRoZSBicmFuY2ggdGFnIHRvIHRoZSBzZXJ2ZXI6Ci0KLSAgICBnaXQgcHVzaCBvcmlnaW4gZGJ1cy1YLlkKLQotVG8gZGV2ZWxvcCBpbiB0aGlzIGJyYW5jaDoKLQotICAgIGdpdCBjaGVja291dCBkYnVzLVguWQotCi0jIyMgQ29kZSByZXZpZXdzCi0KLVRoZSBjb21taXQgcnVsZXMgYXJlIGFwcHJveGltYXRlbHkgdGhlc2U6Ci0KLSAtIEZpeGVzIHRoYXQgZG9uJ3QgYWZmZWN0IEFQSSBvciBwcm90b2NvbCBjYW4gYmUgY29tbWl0dGVkCi0gICBpZiBhbnkgb25lIHF1YWxpZmllZCByZXZpZXdlciBvdGhlciB0aGFuIHBhdGNoIGF1dGhvcgotICAgcmV2aWV3cyBhbmQgYXBwcm92ZXMKLQotIC0gRm9yIGZpeGVzIHRoYXQgZG8gYWZmZWN0IEFQSSBvciBwcm90b2NvbCwgdHdvIHBlb3BsZQotICAgaW4gdGhlIHJldmlld2VyIGdyb3VwIGhhdmUgdG8gcmV2aWV3IGFuZCBhcHByb3ZlIHRoZSBjb21taXQuCi0KLSAtIElmIHRoZXJlJ3MgYSBsaXZlIHVucmVzb2x2ZWQgY29udHJvdmVyc3kgYWJvdXQgYSBjaGFuZ2UsCi0gICBkb24ndCBjb21taXQgaXQgd2hpbGUgdGhlIGFyZ3VtZW50IGlzIHN0aWxsIHJhZ2luZy4KLQotIC0gQXQgdGhlaXIgZGlzY3JldGlvbiwgbWVtYmVycyBvZiB0aGUgcmV2aWV3ZXIgZ3JvdXAgbWF5IGFsc28gY29tbWl0Ci0gICBicmFuY2hlcy9wYXRjaGVzIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSAgIC0gdGhlIGJyYW5jaCBkb2VzIG5vdCBhZGQgb3IgY2hhbmdlIEFQSSwgQUJJIG9yIHdpcmUtcHJvdG9jb2wKLQotICAgLSB0aGUgYnJhbmNoIHNvbHZlcyBhIGtub3duIHByb2JsZW0gYW5kIGlzIGNvdmVyZWQgYnkgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKLQotICAgLSB0aGVyZSBhcmUgbm8gb2JqZWN0aW9ucyBmcm9tIHRoZSByZXN0IG9mIHRoZSByZXZpZXcgZ3JvdXAgd2l0aGluCi0gICAgIGEgd2VlayBvZiB0aGUgbWVyZ2UgcmVxdWVzdCBiZWluZyBvcGVuZWQKLQotICAgLSB0aGUgY29tbWl0dGVyIGdldHMgYSBwb3NpdGl2ZSByZXZpZXcgb24gdGhlIG1lcmdlIHJlcXVlc3QgZnJvbSBzb21lb25lCi0gICAgIHRoZXkgY29uc2lkZXIgcXVhbGlmaWVkIHRvIHJldmlldyB0aGUgY2hhbmdlIChlLmcuIGEgY29sbGVhZ3VlIHdpdGggRC1CdXMKLSAgICAgZXhwZXJpZW5jZTsgbm90IG5lY2Vzc2FyaWx5IGEgbWVtYmVyIG9mIHRoZSByZXZpZXdlciBncm91cCkKLQotIC0gUmVnYXJkbGVzcyBvZiByZXZpZXdzLCB0byBjb21taXQgYSBwYXRjaDoKLQotICAgIC0gYG1ha2UgY2hlY2tgIG11c3QgcGFzcwotICAgIC0gdGhlIHRlc3Qgc3VpdGUgbXVzdCBiZSBleHRlbmRlZCB0byBjb3ZlciB0aGUgbmV3IGNvZGUKLSAgICAgIGFzIG11Y2ggYXMgcmVhc29uYWJseSBmZWFzaWJsZSAoc2VlIFRlc3RzIGFib3ZlKQotICAgIC0gdGhlIHBhdGNoIGhhcyB0byBmb2xsb3cgdGhlIHBvcnRhYmlsaXR5LCBzZWN1cml0eSwgYW5kCi0gICAgICBzdHlsZSBndWlkZWxpbmVzCi0gICAgLSB0aGUgcGF0Y2ggc2hvdWxkIGFzIG11Y2ggYXMgcmVhc29uYWJsZSBkbyBvbmUgdGhpbmcsCi0gICAgICBub3QgbWFueSB1bnJlbGF0ZWQgY2hhbmdlcwotCi0gICBObyByZXZpZXdlciBzaG91bGQgYXBwcm92ZSBhIHBhdGNoIHdpdGhvdXQgdGhlc2UgYXR0cmlidXRlcywgYW5kCi0gICBmYWlsdXJlIG9uIHRoZXNlIHBvaW50cyBpcyBncm91bmRzIGZvciByZXZlcnRpbmcgdGhlIHBhdGNoLgotCi1UaGUgcmV2aWV3ZXIgZ3JvdXAgdGhhdCBjYW4gYXBwcm92ZSBwYXRjaGVzIGNvbnNpc3RzIG9mIHRoZSBtZW1iZXJzCi1vZiA8aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cy9wcm9qZWN0X21lbWJlcnM+IHdpdGgKLSJNYWludGFpbmVyIiBvciAiT3duZXIiIHN0YXR1cy4KZGlmZiAtLWdpdCBhL0RveHlmaWxlLmluIGIvRG94eWZpbGUuaW4KaW5kZXggZGJiZGI0Zi4uZjBhMzdlZCAxMDA2NDQKLS0tIGEvRG94eWZpbGUuaW4KKysrIGIvRG94eWZpbGUuaW4KQEAgLTEwMiw3ICsxMDIsNiBAQAogRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDQKIEdFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBOTwogVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAotSFRNTF9USU1FU1RBTVAgICAgICAgICA9IE5PCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0hBQ0tJTkcgYi9IQUNLSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWQ5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9IQUNLSU5HCkBAIC0wLDAgKzEsMzU2IEBACitUaGUgZ3VpZGVsaW5lcyBpbiB0aGlzIGZpbGUgYXJlIHRoZSBpZGVhbHM7IGl0J3MgYmV0dGVyIHRvIHNlbmQgYQorbm90LWZ1bGx5LWZvbGxvd2luZy1ndWlkZWxpbmVzIHBhdGNoIHRoYW4gbm8gcGF0Y2ggYXQgYWxsLCB0aG91Z2guICBXZQorY2FuIGFsd2F5cyBwb2xpc2ggaXQgdXAuCisKK01haWxpbmcgbGlzdAorPT09CisKK1RoZSBELUJ1cyBtYWlsaW5nIGxpc3QgaXMgZGJ1c0BsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGRpc2N1c3Npb24KK29mIHBhdGNoZXMsIGV0Yy4gc2hvdWxkIGdvIHRoZXJlLgorCitTZWN1cml0eQorPT09CisKK0lmIHlvdSBmaW5kIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0aGF0IGlzIG5vdCBrbm93biB0byB0aGUgcHVibGljLAorcGxlYXNlIHJlcG9ydCBpdCBwcml2YXRlbHkgdG8gZGJ1cy1zZWN1cml0eUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKK29yIGJ5IHJlcG9ydGluZyBhIGZyZWVkZXNrdG9wLm9yZyBidWcgdGhhdCBpcyBtYXJrZWQgYXMKK3Jlc3RyaWN0ZWQgdG8gdGhlICJELUJVUyBzZWN1cml0eSBncm91cCIuCisKK01vc3Qgb2YgRC1CdXMgaXMgc2VjdXJpdHkgc2Vuc2l0aXZlLiAgR3VpZGVsaW5lcyByZWxhdGVkIHRvIHRoYXQ6CisKKyAtIGF2b2lkIG1lbWNweSgpLCBzcHJpbnRmKCksIHN0cmxlbigpLCBzbnByaW50Ziwgc3RybGNhdCgpLAorICAgc3Ryc3RyKCksIHN0cnRvaygpLCBvciBhbnkgb2YgdGhpcyBzdHVmZi4gVXNlIERCdXNTdHJpbmcuIAorICAgSWYgREJ1c1N0cmluZyBkb2Vzbid0IGhhdmUgdGhlIGZlYXR1cmUgeW91IG5lZWQsIGFkZCBpdCAKKyAgIHRvIERCdXNTdHJpbmcuIAorCisgICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zLCBmb3IgZXhhbXBsZQorICAgaWYgeW91ciBzdHJpbmdzIGFyZSBqdXN0IHVzZWQgdG8gaW5kZXggYSBoYXNoIHRhYmxlIAorICAgYW5kIHlvdSBkb24ndCBkbyBhbnkgcGFyc2luZy9tb2RpZmljYXRpb24gb2YgdGhlbSwgcGVyaGFwcworICAgREJ1c1N0cmluZyBpcyB3YXN0ZWZ1bCBhbmQgd291bGRuJ3QgaGVscCBtdWNoLiBCdXQgZGVmaW5pdGVseSAKKyAgIGlmIHlvdSdyZSBkb2luZyBhbnkgcGFyc2luZywgcmVhbGxvY2F0aW9uLCBldGMuIHVzZSBEQnVzU3RyaW5nLgorCisgLSBkbyBub3QgaW5jbHVkZSBzeXN0ZW0gaGVhZGVycyBvdXRzaWRlIG9mIGRidXMtbWVtb3J5LmMsIAorICAgZGJ1cy1zeXNkZXBzLmMsIGFuZCBvdGhlciBwbGFjZXMgd2hlcmUgdGhleSBhcmUgYWxyZWFkeSAKKyAgIGluY2x1ZGVkLiBUaGlzIGdpdmVzIHVzIG9uZSBwbGFjZSB0byBhdWRpdCBhbGwgZXh0ZXJuYWwgCisgICBkZXBlbmRlbmNpZXMgb24gZmVhdHVyZXMgaW4gbGliYywgZXRjLgorCisgLSBkbyBub3QgdXNlIGxpYmMgZmVhdHVyZXMgdGhhdCBhcmUgImNvbXBsaWNhdGVkIiAKKyAgIGFuZCBtYXkgY29udGFpbiBzZWN1cml0eSBob2xlcy4gRm9yIGV4YW1wbGUsIHlvdSBwcm9iYWJseSBzaG91bGRuJ3QKKyAgIHRyeSB0byB1c2UgcmVnY29tcCgpIHRvIGNvbXBpbGUgYW4gdW50cnVzdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGp1c3QgdG9vIGNvbXBsaWNhdGVkLCBhbmQgdGhlcmUgYXJlIG1hbnkgCisgICBkaWZmZXJlbnQgbGliYydzIG91dCB0aGVyZS4KKworIC0gd2UgbmVlZCB0byBkZXNpZ24gdGhlIG1lc3NhZ2UgYnVzIGRhZW1vbiAoYW5kIGFueSBzaW1pbGFyIGZlYXR1cmVzKQorICAgdG8gdXNlIGxpbWl0ZWQgcHJpdmlsZWdlcywgcnVuIGluIGEgY2hyb290IGphaWwsIGFuZCBzbyBvbi4KKworaHR0cDovL3ZzZnRwZC5iZWFzdHMub3JnLyBoYXMgb3RoZXIgZ29vZCBzZWN1cml0eSBzdWdnZXN0aW9ucy4KKworQ29kaW5nIFN0eWxlCis9PT0KKworIC0gVGhlIEMgbGlicmFyeSB1c2VzIEdOVSBjb2RpbmcgY29udmVudGlvbnMsIHdpdGggR0xpYi1saWtlCisgICBleHRlbnNpb25zIChlLmcuIGxpbmluZyB1cCBmdW5jdGlvbiBhcmd1bWVudHMpLiBUaGUKKyAgIFF0IHdyYXBwZXIgdXNlcyBLREUgY29kaW5nIGNvbnZlbnRpb25zLgorCisgLSBXcml0ZSBkb2NzIGZvciBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgYW5kIHNvIG9uLiB0cnkKKyAgICJkb3h5Z2VuIERveHlmaWxlIiBwcmlvciB0byBjb21taXQgYW5kIGJlIHN1cmUgdGhlcmUgYXJlIG5vCisgICB3YXJuaW5ncyBwcmludGVkLgorCisgLSBBbGwgZXh0ZXJuYWwgaW50ZXJmYWNlcyAobmV0d29yayBwcm90b2NvbHMsIGZpbGUgZm9ybWF0cywgZXRjLikKKyAgIHNob3VsZCBoYXZlIGRvY3VtZW50ZWQgc3BlY2lmaWNhdGlvbnMgc3VmZmljaWVudCB0byBhbGxvdyBhbgorICAgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gdG8gYmUgd3JpdHRlbi4gT3VyIGltcGxlbWVudGF0aW9uIHNob3VsZAorICAgYmUgc3RyaWN0IGFib3V0IHNwZWNpZmljYXRpb24gY29tcGxpYW5jZSAoc2hvdWxkIG5vdCBmb3IgZXhhbXBsZQorICAgaGV1cmlzdGljYWxseSBwYXJzZSBhIGZpbGUgYW5kIGFjY2VwdCBub3Qtd2VsbC1mb3JtZWQKKyAgIGRhdGEpLiBBdm9pZGluZyBoZXVyaXN0aWNzIGlzIGFsc28gaW1wb3J0YW50IGZvciBzZWN1cml0eSByZWFzb25zOworICAgaWYgaXQgbG9va3MgZnVubnksIGlnbm9yZSBpdCAob3IgZXhpdCwgb3IgZGlzY29ubmVjdCkuCisKK0RldmVsb3BtZW50Cis9PT0KKworRC1CdXMgdXNlcyBHaXQgYXMgaXRzIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uIFRoZSBtYWluIHJlcG9zaXRvcnkgaXMKK2hvc3RlZCBhdCBnaXQuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cy4gVG8gY2xvbmUgRC1CdXMsIGV4ZWN1dGUgdGhlCitmb2xsb3dpbmcgY29tbWFuZDoKKworICAgIGdpdCBjbG9uZSBnaXQ6Ly9naXQuZnJlZWRlc2t0b3Aub3JnL2RidXMvZGJ1cworT1IKKyAgICBnaXQgY2xvbmUgZ2l0LmZyZWVkZXNrdG9wLm9yZzpkYnVzL2RidXMKKworVGhlIGxhdHRlciBmb3JtIGlzIHRoZSBvbmUgdGhhdCBhbGxvd3MgcHVzaGluZywgYnV0IGl0IGFsc28gcmVxdWlyZXMKK2FuIFNTSCBhY2NvdW50IG9uIHRoZSBzZXJ2ZXIuIFRoZSBmb3JtZXIgZm9ybSBhbGxvd3MgYW5vbnltb3VzCitjaGVja291dHMuCisKK0QtQnVzIGRldmVsb3BtZW50IGhhcHBlbnMgaW4gdHdvIGJyYW5jaGVzIGluIHBhcmFsbGVsOiB0aGUgY3VycmVudAorc3RhYmxlIGJyYW5jaCwgd2l0aCBhbiBldmVuIG1pbm9yIG51bWJlciAobGlrZSAxLjAsIDEuMiBhbmQgMS40KSwgYW5kCit0aGUgbmV4dCBkZXZlbG9wbWVudCBicmFuY2gsIHdpdGggdGhlIG5leHQgb2RkIG51bWJlci4KKworVGhlIHN0YWJsZSBicmFuY2ggaXMgbmFtZWQgYWZ0ZXIgdGhlIHZlcnNpb24gbnVtYmVyIGl0c2VsZiAoZGJ1cy0xLjIsCitkYnVzLTEuNCksIHdoZXJlYXMgdGhlIGRldmVsb3BtZW50IGJyYW5jaCBpcyBzaW1wbHkga25vd24gYXMgIm1hc3RlciIuCisKK1doZW4gbWFraW5nIGEgY2hhbmdlIHRvIEQtQnVzLCBkbyB0aGUgZm9sbG93aW5nOgorCisgLSBjaGVjayBvdXQgdGhlIGVhcmxpZXN0IGJyYW5jaCBvZiBELUJ1cyB0aGF0IG1ha2VzIHNlbnNlIHRvIGhhdmUKKyAgIHlvdXIgY2hhbmdlIGluLiBJZiBpdCdzIGEgYnVnZml4LCBpdCdzIG5vcm1hbGx5IHRoZSBjdXJyZW50IHN0YWJsZQorICAgYnJhbmNoOyBpZiBpdCdzIGEgZmVhdHVyZSwgaXQncyBub3JtYWxseSB0aGUgIm1hc3RlciIgYnJhbmNoLiBJZgorICAgeW91IGhhdmUgYW4gaW1wb3J0YW50IHNlY3VyaXR5IGZpeCwgeW91IG1heSB3YW50IHRvIGFwcGx5IHRvIG9sZGVyCisgICBicmFuY2hlcyB0b28uCisKKyAtIGZvciBsYXJnZSBjaGFuZ2VzOgorICAgICBpZiB5b3UncmUgZGV2ZWxvcGluZyBhIG5ldywgbGFyZ2UgZmVhdHVyZSwgaXQncyByZWNvbW1lbmRlZAorICAgICB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGFuZCBkbyB5b3VyIGRldmVsb3BtZW50IHRoZXJlLiBQdWJsaXNoCisgICAgIHlvdXIgYnJhbmNoIGF0IGEgc3VpdGFibGUgcGxhY2UgYW5kIGFzayBvdGhlcnMgdG8gaGVscCB5b3UKKyAgICAgZGV2ZWxvcCBhbmQgdGVzdCBpdC4gT25jZSB5b3VyIGZlYXR1cmUgaXMgY29uc2lkZXJlZCBmaW5hbGlzZWQsCisgICAgIHlvdSBtYXkgbWVyZ2UgaXQgaW50byB0aGUgIm1hc3RlciIgYnJhbmNoLgorCistIGZvciBzbWFsbCBjaGFuZ2VzOgorICAgIC4gbWFrZSB5b3VyIGNoYW5nZSB0byB0aGUgc291cmNlIGNvZGUKKyAgICAuIGV4ZWN1dGUgdGVzdHMgdG8gZ3VhcmFudGVlIHRoYXQgeW91J3JlIG5vdCBpbnRyb2R1Y2luZyBhCisgICAgICByZWdyZXNzaW9uLiBGb3IgdGhhdCwgZXhlY3V0ZTogbWFrZSBjaGVjaworICAgICAgKGlmIHBvc3NpYmxlLCBhZGQgYSBuZXcgdGVzdCB0byBjaGVjayB0aGUgZml4IHlvdSdyZQorICAgICAgaW50cm9kdWNpbmcpCisgICAgLiBjb21taXQgeW91ciBjaGFuZ2UgdXNpbmcgImdpdCBjb21taXQiCisgICAgICBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIHdyaXRlIGEgc2hvcnQgc2VudGVuY2UgZGVzY3JpYmluZyB3aGF0CisgICAgICB5b3UgZGlkIGluIHRoZSBmaXJzdCBsaW5lLiBUaGVuIHdyaXRlIGEgbG9uZ2VyIGRlc2NyaXB0aW9uIGluCisgICAgICB0aGUgbmV4dCBwYXJhZ3JhcGgocykuCisgICAgLiByZXBlYXQgdGhlIHByZXZpb3VzIHN0ZXBzIGlmIG5lY2Vzc2FyeSB0byBoYXZlIG11bHRpcGxlIGNvbW1pdHMKKworIC0gZXh0cmFjdCB5b3VyIHBhdGNoZXMgYW5kIHNlbmQgdG8gdGhlIEQtQnVzIG1haWxpbmcgbGlzdCBmb3IKKyAgIHJldmlldyBvciBwb3N0IHRoZW0gdG8gdGhlIEQtQnVzIEJ1Z3ppbGxhLCBhdHRhY2hpbmcgdGhlbSB0byBhIGJ1ZworICAgcmVwb3J0LiBUbyBleHRyYWN0IHRoZSBwYXRjaGVzLCBleGVjdXRlOgorICAgICBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbi9tYXN0ZXIKKworIC0gb25jZSB5b3VyIGNvZGUgaGFzIGJlZW4gcmV2aWV3ZWQsIHlvdSBtYXkgcHVzaCBpdCB0byB0aGUgR2l0CisgICBzZXJ2ZXI6CisgICAgIGdpdCBwdXNoIG9yaWdpbiBteS1icmFuY2g6cmVtb3RlCisgICBPUgorICAgICBnaXQgcHVzaCBvcmlnaW4gZGJ1cy1YLlkKKyAgIE9SCisgICAgIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKyAgIChjb25zdWx0IHRoZSBHaXQgbWFudWFsIHRvIGtub3cgd2hpY2ggY29tbWFuZCBhcHBsaWVzKQorCisgLSAoT3B0aW9uYWwpIGlmIHlvdSd2ZSBub3Qgd29ya2VkIG9uICJtYXN0ZXIiLCBtZXJnZSB5b3VyIGNoYW5nZXMgdG8KKyAgIHRoYXQgYnJhbmNoLiBJZiB5b3UndmUgd29ya2VkIG9uIGFuIGVhcmxpZXIgYnJhbmNoIHRoYW4gdGhlIGN1cnJlbnQKKyAgIHN0YWJsZSwgbWVyZ2UgeW91ciBjaGFuZ2VzIHVwd2FyZHMgdG93YXJkcyB0aGUgc3RhYmxlIGJyYW5jaCwgdGhlbgorICAgZnJvbSB0aGVyZSBpbnRvICJtYXN0ZXIiLgorCisgICAgLiBleGVjdXRlOiBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgLiBlbnN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbGF0ZXN0ICJtYXN0ZXIiIGZyb20gdGhlIHNlcnZlciwgdXBkYXRlCisgICAgICBpZiB5b3UgZG9uJ3QKKyAgICAuIGV4ZWN1dGU6IGdpdCBtZXJnZSBkYnVzLVguWQorICAgIC4gaWYgeW91IGhhdmUgYW55IGNvbmZsaWN0cywgcmVzb2x2ZSB0aGVtLCBnaXQgYWRkIHRoZSBjb25mbGljdGVkCisgICAgICBmaWxlcyBhbmQgdGhlbiBnaXQgY29tbWl0CisgICAgLiBwdXNoIHRoZSAibWFzdGVyIiBicmFuY2ggdG8gdGhlIHNlcnZlciBhcyB3ZWxsCisKKyAgRXhlY3V0aW5nIHRoaXMgbWVyZ2UgaXMgcmVjb21tZW5kZWQsIGJ1dCBub3QgbmVjZXNzYXJ5IGZvciBhbGwKKyAgY2hhbmdlcy4gWW91IHNob3VsZCBkbyB0aGlzIHN0ZXAgaWYgeW91ciBidWdmaXggaXMgY3JpdGljYWwgZm9yIHRoZQorICBkZXZlbG9wbWVudCBpbiAibWFzdGVyIiwgb3IgaWYgeW91IHN1c3BlY3QgdGhhdCBjb25mbGljdHMgd2lsbCBhcmlzZQorICAoeW91J3JlIHVzdWFsbHkgdGhlIGJlc3QgcGVyc29uIHRvIHJlc29sdmUgY29uZmxpY3RzIGludHJvZHVjZWQgYnkKKyAgeW91ciBvd24gY29kZSksIG9yIGlmIGl0IGhhcyBiZWVuIHRvbyBsb25nIHNpbmNlIHRoZSBsYXN0IG1lcmdlLgorCisKK01ha2luZyBhIHJlbGVhc2UKKz09PQorCitUbyBtYWtlIGEgcmVsZWFzZSBvZiBELUJ1cywgZG8gdGhlIGZvbGxvd2luZzoKKworIC0gY2hlY2sgb3V0IGEgZnJlc2ggY29weSBmcm9tIEdpdAorCisgLSB2ZXJpZnkgdGhhdCB0aGUgbGlidG9vbCB2ZXJzaW9uaW5nL2xpYnJhcnkgc29uYW1lIGlzIAorICAgY2hhbmdlZCBpZiBpdCBuZWVkcyB0byBiZSwgb3Igbm90IGNoYW5nZWQgaWYgbm90CisKKyAtIHVwZGF0ZSB0aGUgZmlsZSBORVdTIGJhc2VkIG9uIHRoZSBnaXQgaGlzdG9yeQorCisgLSB2ZXJpZnkgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbCBpcworICAgY2hhbmdlZCBpZiBpdCBuZWVkcyB0byBiZTsgaWYgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSwgdXBkYXRlIHRoZQorICAgcmVsZWFzZSBkYXRlIGluIHRoYXQgZmlsZQorCisgLSB1cGRhdGUgdGhlIEFVVEhPUlMgZmlsZSB3aXRoICJtYWtlIHVwZGF0ZS1hdXRob3JzIiBpZiBuZWNlc3NhcnkKKworIC0gdGhlIHZlcnNpb24gbnVtYmVyIHNob3VsZCBoYXZlIG1ham9yLm1pbm9yLm1pY3JvLCBldmVuCisgICBpZiBtaWNybyBpcyAwLCBpLmUuICIxLjAuMCIgYW5kICIxLjIuMCIgbm90ICIxLjAiLyIxLjIiOyB0aGUgbWljcm8KKyAgIHZlcnNpb24gc2hvdWxkIGJlIGV2ZW4gZm9yIHJlbGVhc2VzLCBhbmQgb2RkIGZvciBpbnRlcm1lZGlhdGUgc25hcHNob3RzCisKKyAtICJtYWtlIGRpc3RjaGVjayIgKERPIE5PVCBqdXN0ICJtYWtlIGRpc3QiIC0gcGFzcyB0aGUgY2hlY2shKQorCisgLSBpZiBtYWtlIGRpc3RjaGVjayBmYWlscywgZml4IGl0LgorCisgLSBvbmNlIGRpc3RjaGVjayBzdWNjZWVkcywgImdpdCBjb21taXQgLWEiLiAgVGhpcyBpcyB0aGUgdmVyc2lvbgorICAgb2YgdGhlIHRyZWUgdGhhdCBjb3JyZXNwb25kcyBleGFjdGx5IHRvIHRoZSByZWxlYXNlZCB0YXJiYWxsLgorCisgLSB0YWcgdGhlIHRyZWUgd2l0aCAiZ2l0IHRhZyAtcyAtbSAnUmVsZWFzZWQgWC5ZLlonIGRidXMtWC5ZLloiCisgICB3aGVyZSBYLlkuWiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgcmVsZWFzZS4gIElmIHlvdSBjYW4ndCBzaWduCisgICB0aGVuIHNpbXBseSBjcmVhdGVkIGFuIHVuc2lnbmVkIGFubm90YXRlZCB0YWc6CisgICAiZ2l0IHRhZyAtYSAtbSAnUmVsZWFzZWQgWC5ZLlonIGRidXMtWC5ZLloiLgorCisgLSBidW1wIHRoZSB2ZXJzaW9uIG51bWJlciB1cCBpbiBjb25maWd1cmUuYWMgKHNvIHRoZSBtaWNybyB2ZXJzaW9uIGlzIG9kZCksCisgICBhbmQgY29tbWl0IGl0LiAgTWFrZSBzdXJlIHlvdSBkbyB0aGlzICphZnRlciogdGFnZ2luZyB0aGUgcHJldmlvdXMKKyAgIHJlbGVhc2UhIFRoZSBpZGVhIGlzIHRoYXQgZ2l0IGhhcyBhIG5ld2VyIHZlcnNpb24gbnVtYmVyCisgICB0aGFuIGFueXRoaW5nIHJlbGVhc2VkLiBTaW1pbGFybHksIGJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIG9mCisgICBkYnVzLXNwZWNpZmljYXRpb24ueG1sIGFuZCBzZXQgdGhlIHJlbGVhc2UgZGF0ZSB0byAiKG5vdCBmaW5hbGl6ZWQpIi4KKworIC0gbWVyZ2UgdGhlIGJyYW5jaCB5b3UndmUgcmVsZWFzZWQgdG8gdGhlIGNocm9ub2xvZ2ljYWxseS1sYXRlcgorICAgYnJhbmNoICh1c3VhbGx5ICJtYXN0ZXIiKS4gWW91J2xsIHByb2JhYmx5IGhhdmUgdG8gZml4IGEgbWVyZ2UKKyAgIGNvbmZsaWN0IGluIGNvbmZpZ3VyZS5hYyAodGhlIHZlcnNpb24gbnVtYmVyKS4KKworIC0gcHVzaCB5b3VyIGNoYW5nZXMgYW5kIHRoZSB0YWcgdG8gdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSB3aXRoCisgICAgIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIgZGJ1cy1YLlkgZGJ1cy1YLlkuWgorCisgLSBzY3AgeW91ciB0YXJiYWxsIHRvIGZyZWVkZXNrdG9wLm9yZyBzZXJ2ZXIgYW5kIGNvcHkgaXQgdG8KKyAgIGRidXMuZnJlZWRlc2t0b3Aub3JnOi9zcnYvZGJ1cy5mcmVlZGVza3RvcC5vcmcvd3d3L3JlbGVhc2VzL2RidXMvZGJ1cy1YLlkuWi50YXIuZ3ouCisgICBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBpZiB5b3UncmUgaW4gZ3JvdXAgImRidXMiCisKKyAtIFVwZGF0ZSB0aGUgb25saW5lIGRvY3VtZW50YXRpb24gd2l0aCBgbWFrZSAtQyBkb2MgbWFpbnRhaW5lci11cGxvYWQtZG9jc2AuCisKKyAtIHVwZGF0ZSB0aGUgd2lraSBwYWdlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMgYnkKKyAgIGFkZGluZyB0aGUgbmV3IHJlbGVhc2UgdW5kZXIgdGhlIERvd25sb2FkIGhlYWRpbmcuIFRoZW4sIGN1dCB0aGUKKyAgIGxpbmsgYW5kIGNoYW5nZWxvZyBmb3IgdGhlIHByZXZpb3VzIHRoYXQgd2FzIHRoZXJlLgorCisgLSB1cGRhdGUgdGhlIHdpa2kgcGFnZQorICAgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvRGJ1c1JlbGVhc2VBcmNoaXZlIHBhc3RpbmcgdGhlCisgICBwcmV2aW91cyByZWxlYXNlLiBOb3RlIHRoYXQgYnVsbGV0IHBvaW50cyBmb3IgZWFjaCBvZiB0aGUgY2hhbmdlbG9nCisgICBpdGVtcyBtdXN0IGJlIGluZGVudGVkIHRocmVlIG1vcmUgc3BhY2VzIHRvIGNvbmZvcm0gdG8gdGhlCisgICBmb3JtYXR0aW5nIG9mIHRoZSBvdGhlciByZWxlYXNlcyB0aGVyZS4KKyAgCisgLSBwb3N0IHRvIGRidXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnIGFubm91bmNpbmcgdGhlIHJlbGVhc2UuCisgCisKK01ha2luZyBhICIuMCIgc3RhYmxlIHJlbGVhc2UKKz09PQorCitXZSBjcmVhdGUgYSBicmFuY2ggZm9yIGVhY2ggc3RhYmxlIHJlbGVhc2UuIFRoZSBicmFuY2ggbmFtZSBzaG91bGQgYmUKK2RidXMtWC5ZIHdoaWNoIGlzIGEgYnJhbmNoIHRoYXQgaGFzIHJlbGVhc2VzIHZlcnNpb25lZCBYLlkuWjsKK2NoYW5nZXMgb24gYSBzdGFibGUgYnJhbmNoIHNob3VsZCBiZSBsaW1pdGVkIHRvIHNpZ25pZmljYW50IGJ1ZyBmaXhlcy4KKworQmVjYXVzZSB3ZSB3b24ndCBtYWtlIG1pbm9yIGNoYW5nZXMgbGlrZSBrZWVwaW5nIHVwIHdpdGggdGhlIGxhdGVzdAorZGVwcmVjYXRpb25zIG9uIGEgc3RhYmxlIGJyYW5jaCwgc3RhYmxlIGJyYW5jaGVzIHNob3VsZCB0dXJuIG9mZiB0aGUKK2djYyB3YXJuaW5nIGZvciBkZXByZWNhdGVkIGRlY2xhcmF0aW9ucyAoZS5nLiBzZWUgY29tbWl0IDRlYmIyNzVhYjcpLgorCitCZSBleHRyYS1jYXJlZnVsIG5vdCB0byBtZXJnZSBtYXN0ZXIgKG9yIGFueSBicmFuY2ggYmFzZWQgb24gbWFzdGVyKSBpbnRvIGEKK3N0YWJsZSBicmFuY2guCisKK1RvIGJyYW5jaDoKKyAgZ2l0IGJyYW5jaCBkYnVzLVguWQorYW5kIHVwbG9hZCB0aGUgYnJhbmNoIHRhZyB0byB0aGUgc2VydmVyOgorICBnaXQgcHVzaCBvcmlnaW4gZGJ1cy1YLlkKKworVG8gZGV2ZWxvcCBpbiB0aGlzIGJyYW5jaDoKKyAgZ2l0IGNoZWNrb3V0IGRidXMtWC5ZCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcworPT09CisKK1RoZXNlIGFyZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIEQtQnVzIGNsaWVudCBsaWJyYXJ5CisKK0RCVVNfVkVSQk9TRT0xCitUdXJucyBvbiBwcmludGluZyB2ZXJib3NlIG1lc3NhZ2VzLiBUaGlzIG9ubHkgd29ya3MgaWYgRC1CdXMgaGFzIGJlZW4KK2NvbXBpbGVkIHdpdGggLS1lbmFibGUtdmVyYm9zZS1tb2RlCisKK0RCVVNfTUFMTE9DX0ZBSUxfTlRIPW4KK0NhbiBiZSBzZXQgdG8gYSBudW1iZXIsIGNhdXNpbmcgZXZlcnkgbnRoIGNhbGwgdG8gZGJ1c19hbGxvYyBvcgorZGJ1c19yZWFsbG9jIHRvIGZhaWwuIFRoaXMgb25seSB3b3JrcyBpZiBELUJ1cyBoYXMgYmVlbiBjb21waWxlZCB3aXRoCistLWVuYWJsZS10ZXN0cy4KKworREJVU19NQUxMT0NfRkFJTF9HUkVBVEVSX1RIQU49bgorQ2FuIGJlIHNldCB0byBhIG51bWJlciwgY2F1c2luZyBldmVyeSBjYWxsIHRvIGRidXNfYWxsb2Mgb3IKK2RidXNfcmVhbGxvYyB0byBmYWlsIGlmIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgYWxsb2NhdGVkIGlzIGdyZWF0ZXIKK3RoYW4gdGhlIHNwZWNpZmllZCBudW1iZXIuIFRoaXMgb25seSB3b3JrcyBpZiBELUJ1cyBoYXMgYmVlbiBjb21waWxlZCB3aXRoCistLWVuYWJsZS10ZXN0cy4KKworREJVU19URVNUX01BTExPQ19GQUlMVVJFUz1uCitNYW55IG9mIHRoZSBELUJ1cyB0ZXN0cyB3aWxsIHJ1biBvdmVyIGFuZCBvdmVyLCBvbmNlIGZvciBlYWNoIG1hbGxvYworaW52b2x2ZWQgaW4gdGhlIHRlc3QuIEVhY2ggcnVuIHdpbGwgZmFpbCBhIGRpZmZlcmVudCBtYWxsb2MsIHBsdXMgc29tZQorbnVtYmVyIG9mIG1hbGxvY3MgZm9sbG93aW5nIHRoYXQgbWFsbG9jIChiZWNhdXNlIGEgZmFpciBudW1iZXIgb2YgYnVncworb25seSBoYXBwZW4gaWYgdHdvIG9yIG1vcmUgbWFsbG9jcyBmYWlsIGluIGEgcm93LCBlLmcuIGVycm9yIHJlY292ZXJ5Cit0aGF0IGl0c2VsZiBpbnZvbHZlcyBtYWxsb2MpLiAgVGhpcyBlbnYgdmFyaWFibGUgc2V0cyB0aGUgbnVtYmVyIG9mCittYWxsb2NzIHRvIGZhaWwuCitIZXJlJ3Mgd2h5IHlvdSBjYXJlOiBJZiBzZXQgdG8gMCwgdGhlbiB0aGUgbWFsbG9jIGNoZWNraW5nIGlzIHNraXBwZWQsCit3aGljaCBtYWtlcyB0aGUgdGVzdCBzdWl0ZSBhIGhlY2sgb2YgYSBsb3QgZmFzdGVyLiBKdXN0IHJ1biB3aXRoIHRoaXMKK2VudiB2YXJpYWJsZSB1bnNldCBiZWZvcmUgeW91IGNvbW1pdC4KKworVGVzdHMKKz09PQorCitUaGVzZSBhcmUgdGhlIHRlc3QgcHJvZ3JhbXMgdGhhdCBhcmUgYnVpbHQgaWYgZGJ1cyBpcyBjb21waWxlZCB1c2luZworLS1lbmFibGUtdGVzdHMuCisKK2RidXMvdGVzdC1kYnVzCitUaGlzIGlzIHRoZSBtYWluIHVuaXQgdGVzdCBwcm9ncmFtIHRoYXQgdGVzdHMgYWxsIGFzcGVjdHMgb2YgdGhlIEQtQnVzCitjbGllbnQgbGlicmFyeS4KKworZGJ1cy9idXMtdGVzdAorVGhpcyBpdCB0aGUgdW5pdCB0ZXN0IHByb2dyYW0gZm9yIHRoZSBtZXNzYWdlIGJ1cy4KKwordGVzdC9icmVhay1sb2FkZXIKK0EgdGVzdCB0aGF0IHRyaWVzIHRvIGJyZWFrIHRoZSBtZXNzYWdlIGxvYWRlciBieSBwYXNzaW5nIGl0IHJhbmRvbWx5CitjcmVhdGVkIGludmFsaWQgbWVzc2FnZXMuCisKK3Rlc3QvbmFtZS10ZXN0LyoKK1RoaXMgaXMgYSBzdWl0ZSBvZiBwcm9ncmFtcyB3aGljaCBhcmUgcnVuIHdpdGggYSB0ZW1wb3Jhcnkgc2Vzc2lvbiBidXMuCitJZiB5b3VyIHRlc3QgaW52b2x2ZXMgbXVsdGlwbGUgcHJvY2Vzc2VzIGNvbW11bmljYXRpbmcsIHlvdXIgYmVzdCBiZXQKK2lzIHRvIGFkZCBhIHRlc3QgaW4gaGVyZS4KKworIm1ha2UgY2hlY2siIHJ1bnMgYWxsIHRoZSBkZXRlcm1pbmlzdGljIHRlc3QgcHJvZ3JhbXMgKGkuZS4gbm90IGJyZWFrLWxvYWRlcikuCisKKyJtYWtlIGxjb3YtY2hlY2siIGlzIGF2YWlsYWJsZSBpZiB5b3UgY29uZmlndXJlIHdpdGggLS1lbmFibGUtY29tcGlsZXItY292ZXJhZ2UKK2FuZCBnaXZlcyBhIGNvbXBsZXRlIHJlcG9ydCBvbiB0ZXN0IHN1aXRlIGNvdmVyYWdlLgorCitQYXRjaGVzCis9PT0KKworUGxlYXNlIGZpbGUgdGhlbSBhdCBodHRwOi8vYnVnemlsbGEuZnJlZWRlc2t0b3Aub3JnIHVuZGVyIGNvbXBvbmVudAorZGJ1cywgYW5kIGFsc28gcG9zdCB0byB0aGUgbWFpbGluZyBsaXN0IGZvciBkaXNjdXNzaW9uLiAgVGhlIGNvbW1pdAorcnVsZXMgYXJlOgorCisgLSBmb3IgZml4ZXMgdGhhdCBkb24ndCBhZmZlY3QgQVBJIG9yIHByb3RvY29sLCB0aGV5IGNhbiBiZSBjb21taXR0ZWQKKyAgIGlmIGFueSBvbmUgcXVhbGlmaWVkIHJldmlld2VyIG90aGVyIHRoYW4gcGF0Y2ggYXV0aG9yCisgICByZXZpZXdzIGFuZCBhcHByb3ZlcworCisgLSBmb3IgZml4ZXMgdGhhdCBkbyBhZmZlY3QgQVBJIG9yIHByb3RvY29sLCB0d28gcGVvcGxlCisgICBpbiB0aGUgcmV2aWV3ZXIgZ3JvdXAgaGF2ZSB0byByZXZpZXcgYW5kIGFwcHJvdmUgdGhlIGNvbW1pdCwgYW5kIAorICAgcG9zdGluZyB0byB0aGUgbGlzdCBpcyBkZWZpbml0ZWx5IG1hbmRhdG9yeQorCisgLSBpZiB0aGVyZSdzIGEgbGl2ZSB1bnJlc29sdmVkIGNvbnRyb3ZlcnN5IGFib3V0IGEgY2hhbmdlLAorICAgZG9uJ3QgY29tbWl0IGl0IHdoaWxlIHRoZSBhcmd1bWVudCBpcyBzdGlsbCByYWdpbmcuCisKKyAtIGF0IHRoZWlyIGRpc2NyZXRpb24sIG1lbWJlcnMgb2YgdGhlIHJldmlld2VyIGdyb3VwIG1heSBhbHNvIGNvbW1pdAorICAgYnJhbmNoZXMvcGF0Y2hlcyB1bmRlciB0aGVzZSBjb25kaXRpb25zOgorCisgICAtIHRoZSBicmFuY2ggZG9lcyBub3QgYWRkIG9yIGNoYW5nZSBBUEksIEFCSSBvciB3aXJlLXByb3RvY29sCisKKyAgIC0gdGhlIGJyYW5jaCBzb2x2ZXMgYSBrbm93biBwcm9ibGVtIGFuZCBpcyBjb3ZlcmVkIGJ5IHRoZSByZWdyZXNzaW9uIHRlc3RzCisKKyAgIC0gdGhlcmUgYXJlIG5vIG9iamVjdGlvbnMgZnJvbSB0aGUgcmVzdCBvZiB0aGUgcmV2aWV3IGdyb3VwIHdpdGhpbgorICAgICBhIHdlZWsgb2YgdGhlIHBhdGNoZXMgYmVpbmcgYXR0YWNoZWQgdG8gQnVnemlsbGEKKworICAgLSB0aGUgY29tbWl0dGVyIGdldHMgYSBwb3NpdGl2ZSByZXZpZXcgb24gQnVnemlsbGEgZnJvbSBzb21lb25lIHRoZXkKKyAgICAgY29uc2lkZXIgcXVhbGlmaWVkIHRvIHJldmlldyB0aGUgY2hhbmdlIChlLmcuIGEgY29sbGVhZ3VlIHdpdGggRC1CdXMKKyAgICAgZXhwZXJpZW5jZTsgbm90IG5lY2Vzc2FyaWx5IGEgbWVtYmVyIG9mIHRoZSByZXZpZXdlciBncm91cCkKKworIC0gcmVnYXJkbGVzcyBvZiByZXZpZXdzLCB0byBjb21taXQgYSBwYXRjaDoKKyAgICAtIG1ha2UgY2hlY2sgbXVzdCBwYXNzCisgICAgLSB0aGUgdGVzdCBzdWl0ZSBtdXN0IGJlIGV4dGVuZGVkIHRvIGNvdmVyIHRoZSBuZXcgY29kZQorICAgICAgYXMgbXVjaCBhcyByZWFzb25hYmx5IGZlYXNpYmxlIChzZWUgVGVzdHMgYWJvdmUpCisgICAgLSB0aGUgcGF0Y2ggaGFzIHRvIGZvbGxvdyB0aGUgcG9ydGFiaWxpdHksIHNlY3VyaXR5LCBhbmQgCisgICAgICBzdHlsZSBndWlkZWxpbmVzCisgICAgLSB0aGUgcGF0Y2ggc2hvdWxkIGFzIG11Y2ggYXMgcmVhc29uYWJsZSBkbyBvbmUgdGhpbmcsIAorICAgICAgbm90IG1hbnkgdW5yZWxhdGVkIGNoYW5nZXMKKyAgIE5vIHJldmlld2VyIHNob3VsZCBhcHByb3ZlIGEgcGF0Y2ggd2l0aG91dCB0aGVzZSBhdHRyaWJ1dGVzLCBhbmQKKyAgIGZhaWx1cmUgb24gdGhlc2UgcG9pbnRzIGlzIGdyb3VuZHMgZm9yIHJldmVydGluZyB0aGUgcGF0Y2guCisKK1RoZSByZXZpZXdlciBncm91cCB0aGF0IGNhbiBhcHByb3ZlIHBhdGNoZXM6CisKK0hhdm9jIFBlbm5pbmd0b24gPGhwQHBvYm94Lm5ldD4KK01pY2hhZWwgTWVla3MgPG1pY2hhZWwubWVla3NAbm92ZWxsLmNvbT4KK0FsZXhhbmRlciBMYXJzc29uICA8YWxleGxAcmVkaGF0LmNvbT4KK1phY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KK0pvZSBTaGF3IDxqb2VAYXNzYmFybi5jb20+CitNaWthZWwgSGFsbGVuZGFsIDxtaWNrZUBpbWVuZGlvLmNvbT4KK1JpY2hhcmQgSHVsdCA8cmljaGFyZEBpbWVuZGlvLmNvbT4KK093ZW4gRnJhc2VyLUdyZWVuIDxvd2VuQGRpc2NvYmFiZS5uZXQ+CitPbGl2aWVyIEFuZHJpZXUgPG9saXZfX2FAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorQ29saW4gV2FsdGVycyA8d2FsdGVyc0B2ZXJidW0ub3JnPgorVGhpYWdvIE1hY2llaXJhIDx0aGlhZ29Aa2RlLm9yZz4KK0pvaG4gUGFsbWllcmkgPGpvaG5wQHJlZGhhdC5jb20+CitTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+CitXaWxsIFRob21wc29uIDx3aWxsLnRob21wc29uQGNvbGxhYm9yYS5jby51az4KK1NpbW9uIE1jVml0dGllIDxzaW1vbi5tY3ZpdHRpZUBjb2xsYWJvcmEuY28udWs+CitEYXZpZCBaZXV0aGVuIDxkYXZpZHpAcmVkaGF0LmNvbT4KZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXggNDUxODNjYi4uNzU2YWI4YiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0KQEAgLTMsNDEgKzMsMjQgQEAKIHBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKIHBrZ2NvbmZpZ19EQVRBID0gZGJ1cy0xLnBjCiAKLWNtYWtlY29uZmlnZGlyID0gJChsaWJkaXIpL2NtYWtlL0RCdXMxCi1jbWFrZWNvbmZpZ19EQVRBID0gY21ha2UvREJ1czFDb25maWcuY21ha2UgICAgICAgXAotICAgICAgICAgICAgICAgICAgIGNtYWtlL0RCdXMxQ29uZmlnVmVyc2lvbi5jbWFrZQorRElTVENMRUFORklMRVMgPSAJCVwKKwlkYnVzLTEucGMKIAogRVhUUkFfRElTVCA9CQkJXAogCWF1dG9nZW4uc2gJCVwKLQlDT05UUklCVVRJTkcubWQJCVwKKwlIQUNLSU5HCQkJXAogCWRidXMtMS5wYy5pbgkJXAogCWNsZWFudXAtbWFuLXBhZ2VzLnNoICAgIFwKICAgICAgICAgQ2hhbmdlTG9nLnByZS0xLTAgICAgICAgXAogICAgICAgICBORVdTLnByZS0xLTAgICAgICAgICAgICBcCiAJQ2hhbmdlTG9nLnByZS0xLTIgICAgICAgXAogICAgICAgICBORVdTLnByZS0xLTIJCVwKLQlSRUFETUUuY21ha2UJCVwKIAlSRUFETUUudmFsZ3JpbmQJCVwKIAlSRUFETUUud2luCQlcCiAJUkVBRE1FLndpbmNlCQlcCiAJUkVBRE1FLmN5Z3dpbgkJXAogCVJFQURNRS5sYXVuY2hkCQlcCi0JY21ha2UvQ01ha2VMaXN0cy50eHQgXAotCWNtYWtlL0NvbmZpZ3VyZUNoZWNrcy5jbWFrZSBcCi0JY21ha2UvREJ1czFDb25maWcuY21ha2UuaW4gXAotCWNtYWtlL0RCdXMxQ29uZmlnLnBrZ2NvbmZpZy5pbiBcCi0JY21ha2UvREJ1czFDb25maWdWZXJzaW9uLmNtYWtlLmluIFwKLQljbWFrZS9idXMgXAotCWNtYWtlL2J1cy10ZXN0LmJhdC5jbWFrZSBcCi0JY21ha2UvY29uZmlnLmguY21ha2UgXAotCWNtYWtlL2RidXMgXAotCWNtYWtlL2RidXMtZW52LmJhdC5jbWFrZSBcCi0JY21ha2UvZG9jIFwKLQljbWFrZS9pNjg2LXc2NC1taW5ndzMyLmNtYWtlIFwKLQljbWFrZS9tb2R1bGVzIFwKLQljbWFrZS90ZXN0IFwKLQljbWFrZS90b29scyBcCi0JJChOVUxMKQorCWNtYWtlCiAKIGFsbC1sb2NhbDogRG94eWZpbGUKIApAQCAtNTAsNSArMzMsNCBAQAogCiBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CiAKLSMgQWRkIHJ1bGVzIGZvciBjb2RlLWNvdmVyYWdlIHRlc3RpbmcsIGFzIGRlZmluZWQgYnkgQVhfQ09ERV9DT1ZFUkFHRQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2FtaW5jbHVkZV9zdGF0aWMuYW0KK2luY2x1ZGUgdG9vbHMvbGNvdi5hbQpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggMmZjYTE0NS4uNTZiNGNjYyAxMDA2NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC0xLDk3NCArMSw3IEBACi1kYnVzIDEuMTIuMjAgKDIwMjAtMDctMDIpCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSDigJx0ZW1wb3JhcnkgbmVtZXNpc+KAnSByZWxlYXNlLgotCi1NYXliZSBzZWN1cml0eSBmaXhlczoKLQot4oCiIE9uIFVuaXgsIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgdHdvIHVzZXJuYW1lcyBoYXZlIHRoZSBzYW1lCi0gIG51bWVyaWMgdWlkLiBJbiBvbGRlciB2ZXJzaW9ucyB0aGlzIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCAoZGVuaWFsIG9mCi0gIHNlcnZpY2UpIG9yIG90aGVyIHVuZGVmaW5lZCBiZWhhdmlvdXIsIHBvc3NpYmx5IGluY2x1ZGluZyBpbmNvcnJlY3QKLSAgYXV0aG9yaXphdGlvbiBkZWNpc2lvbnMgaWYgPHBvbGljeSBncm91cD0uLi4+IGlzIHVzZWQuCi0gIExpa2UgVW5peCBmaWxlc3lzdGVtcywgRC1CdXMnIG1vZGVsIG9mIGlkZW50aXR5IGNhbm5vdCBkaXN0aW5ndWlzaAotICBiZXR3ZWVuIHVzZXJzIG9mIGRpZmZlcmVudCBuYW1lcyB3aXRoIHRoZSBzYW1lIG51bWVyaWMgdWlkLCBzbyB0aGlzCi0gIGNvbmZpZ3VyYXRpb24gaXMgbm90IGFkdmlzYWJsZSBvbiBzeXN0ZW1zIHdoZXJlIEQtQnVzIHdpbGwgYmUgdXNlZC4KLSAgVGhhbmtzIHRvIERhbmllbCBPbmFjYS4KLSAgKGRidXMjMzA1LCBkYnVzITE2NjsgU2ltb24gTWNWaXR0aWUpCi0KLU90aGVyIGZpeGVzOgotCi3igKIgT24gU29sYXJpcyBhbmQgaXRzIGRlcml2YXRpdmVzLCBpZiBhIGNtc2cgaGVhZGVyIGlzIHRydW5jYXRlZCwgZW5zdXJlCi0gIHRoYXQgd2UgZG8gbm90IG92ZXJydW4gdGhlIGJ1ZmZlciB1c2VkIGZvciBmZC1wYXNzaW5nLCBldmVuIGlmIHRoZQotICBrZXJuZWwgdGVsbHMgdXMgdG8uCi0gIChkYnVzIzMwNCwgZGJ1cyExNjU7IEFuZHkgRmlkZGFtYW4pCi0KLWRidXMgMS4xMi4xOCAoMjAyMC0wNi0wMikKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIOKAnHRlbGVwYXRoaWMgdmluZXPigJ0gcmVsZWFzZS4KLQotRGVuaWFsIG9mIHNlcnZpY2UgZml4ZXM6Ci0KLeKAoiBDVkUtMjAyMC0xMjA0OTogSWYgYSBtZXNzYWdlIGNvbnRhaW5zIG1vcmUgZmlsZSBkZXNjcmlwdG9ycyB0aGFuIGNhbgotICBiZSBzZW50LCBjbG9zZSB0aG9zZSB0aGF0IGRpZCBnZXQgdGhyb3VnaCBiZWZvcmUgcmVwb3J0aW5nIGVycm9yLgotICBQcmV2aW91c2x5LCBhIGxvY2FsIGF0dGFja2VyIGNvdWxkIGNhdXNlIHRoZSBzeXN0ZW0gZGJ1cy1kYWVtb24gKG9yCi0gIGFub3RoZXIgc3lzdGVtIHNlcnZpY2Ugd2l0aCBpdHMgb3duIERCdXNTZXJ2ZXIpIHRvIHJ1biBvdXQgb2YgZmlsZQotICBkZXNjcmlwdG9ycywgYnkgcmVwZWF0ZWRseSBjb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIgYW5kIHNlbmRpbmcgZmRzIHRoYXQKLSAgd291bGQgZ2V0IGxlYWtlZC4KLSAgVGhhbmtzIHRvIEtldmluIEJhY2tob3VzZSBvZiBHaXRIdWIgU2VjdXJpdHkgTGFiLgotICAoZGJ1cyMyOTQsIEdIU0wtMjAyMC0wNTc7IFNpbW9uIE1jVml0dGllKQotCi1PdGhlciBmaXhlczoKLQot4oCiIEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRidXMtZGFlbW9uIGlzIHRlcm1pbmF0ZWQgd2hpbGUgb25lIG9yIG1vcmUKLSAgbW9uaXRvcnMgYXJlIGFjdGl2ZSAoZGJ1cyMyOTEsIGRidXMhMTQwOyBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIFRoZSBkYnVzLXNlbmQoMSkgbWFuIHBhZ2Ugbm93IGRvY3VtZW50cyAtLWJ1cyBhbmQgLS1wZWVyIGluc3RlYWQgb2YKLSAgdGhlIG9sZCAtLWFkZHJlc3Mgc3lub255bSBmb3IgLS1wZWVyLCB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlCi0gIHRoZSBpbnRyb2R1Y3Rpb24gb2YgLS1idXMgYW5kIC0tcGVlciBpbiAxLjcuNgotICAoZmQubyAjNDg4MTYsIGRidXMhMTE1OyBDaHJpcyBNb3JpbikKLQot4oCiIEZpeCBhIHdyb25nIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgaW4gZGJ1cy1kYWVtb24oMSkKLSAgKGRidXMjMjc1LCBkYnVzITEyMjsgTXViaW4sIFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIEZpeCBmb3JtYXR0aW5nIG9mIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyBleGFtcGxlCi0gIChkYnVzITEyNiwgRmVsaXBlIEZyYW5jaW9zaSkKLQot4oCiIEF2b2lkIGEgdGVzdCBmYWlsdXJlIG9uIExpbnV4IHdoZW4gYnVpbHQgaW4gYSBjb250YWluZXIgYXMgdWlkIDAsIGJ1dAotICB3aXRob3V0IHRoZSBuZWNlc3NhcnkgcHJpdmlsZWdlcyB0byBpbmNyZWFzZSByZXNvdXJjZSBsaW1pdHMKLSAgKGRidXMhNTgsIERlYmlhbiAjOTA4MDkyOyBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIFdoZW4gYnVpbGRpbmcgd2l0aCBDTWFrZSwgY29wZSB3aXRoIGxpYlgxMSBpbiBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbgotICAoZGJ1cyExMjksIFR1b21vIFJpbm5lKQotCi1kYnVzIDEuMTIuMTYgKDIwMTktMDYtMTEpCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSDigJx0cmVlIGNhdOKAnSByZWxlYXNlLgotCi1TZWN1cml0eSBmaXhlczoKLQot4oCiIENWRS0yMDE5LTEyNzQ5OiBEbyBub3QgYXR0ZW1wdCB0byBjYXJyeSBvdXQgREJVU19DT09LSUVfU0hBMQotICBhdXRoZW50aWNhdGlvbiBmb3IgaWRlbnRpdGllcyB0aGF0IGRpZmZlciBmcm9tIHRoZSB1c2VyIHJ1bm5pbmcgdGhlCi0gIERCdXNTZXJ2ZXIuIFByZXZpb3VzbHksIGEgbG9jYWwgYXR0YWNrZXIgY291bGQgbWFuaXB1bGF0ZSBzeW1ib2xpYwotICBsaW5rcyBpbiB0aGVpciBvd24gaG9tZSBkaXJlY3RvcnkgdG8gYnlwYXNzIGF1dGhlbnRpY2F0aW9uIGFuZCBjb25uZWN0Ci0gIHRvIGEgREJ1c1NlcnZlciB3aXRoIGVsZXZhdGVkIHByaXZpbGVnZXMuIFRoZSBzdGFuZGFyZCBzeXN0ZW0gYW5kCi0gIHNlc3Npb24gZGJ1cy1kYWVtb25zIGluIHRoZWlyIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3ZXJlIGltbXVuZSB0byB0aGlzCi0gIGF0dGFjayBiZWNhdXNlIHRoZXkgZGlkIG5vdCBhbGxvdyBEQlVTX0NPT0tJRV9TSEExLCBidXQgdGhpcmQtcGFydHkKLSAgdXNlcnMgb2YgREJ1c1NlcnZlciBzdWNoIGFzIFVwc3RhcnQgY291bGQgYmUgdnVsbmVyYWJsZS4KLSAgVGhhbmtzIHRvIEpvZSBWZW5uaXggb2YgQXBwbGUgSW5mb3JtYXRpb24gU2VjdXJpdHkuCi0gIChkYnVzIzI2OSwgU2ltb24gTWNWaXR0aWUpCi0KLWRidXMgMS4xMi4xNCAoMjAxOS0wNS0xNykKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIOKAnHJlY2xhaW1lZCBmbG9vcmJvYXJkc+KAnSByZWxlYXNlLgotCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiBSYWlzZSBzb2Z0IGZkIGxpbWl0IHRvIG1hdGNoIGhhcmQgbGltaXQsIGV2ZW4gaWYgdW5wcml2aWxlZ2VkLgotICBUaGlzIG1ha2VzIHNlc3Npb24gYnVzZXMgd2l0aCBtYW55IGNsaWVudHMsIG9yIHdpdGggY2xpZW50cyB0aGF0IG1ha2UKLSAgaGVhdnkgdXNlIG9mIGZkLXBhc3NpbmcsIGxlc3MgbGlrZWx5IHRvIHN1ZmZlciBmcm9tIGZkIGV4aGF1c3Rpb24uCi0gIChkYnVzITEwMywgU2ltb24gTWNWaXR0aWUpCi0KLUZpeGVzOgotCi3igKIgSWYgYSBwcml2aWxlZ2VkIGRidXMtZGFlbW9uIGhhcyBhIGhhcmQgZmQgbGltaXQgZ3JlYXRlciB0aGFuIDY0SywgZG9uJ3QKLSAgcmVkdWNlIGl0IHRvIDY0SywgZW5zdXJpbmcgdGhhdCB3ZSBjYW4gcHV0IGJhY2sgdGhlIG9yaWdpbmFsIGZkIGxpbWl0cwotICB3aGVuIGNhcnJ5aW5nIG91dCB0cmFkaXRpb25hbCAobm9uLXN5c3RlbWQpIGFjdGl2YXRpb24uIFRoaXMgZml4ZXMgYQotICByZWdyZXNzaW9uIHdpdGggc3lzdGVtZCA+PSAyNDAgaW4gd2hpY2ggc3lzdGVtIHNlcnZpY2VzIGluaGVyaXRlZAotICBkYnVzLWRhZW1vbidzIGhhcmQgYW5kIHNvZnQgbGltaXQgb2YgNjRLIGZkcywgaW5zdGVhZCBvZiB0aGUgaW50ZW5kZWQKLSAgc29mdCBsaW1pdCBvZiAxSyBhbmQgaGFyZCBsaW1pdCBvZiA1MTJLIG9yIDFNLgotICAoZGJ1cyExMDMsIERlYmlhbiM5Mjg4Nzc7IFNpbW9uIE1jVml0dGllKQotCi3igKIgRml4IGJ1aWxkIGZhaWx1cmVzIGNhdXNlZCBieSBhbiBBWF9DT0RFX0NPVkVSQUdFIEFQSSBjaGFuZ2UgaW4gbmV3ZXIKLSAgYXV0b2NvbmYtYXJjaGl2ZSB2ZXJzaW9ucyAoZGJ1cyMyNDksIGRidXMhODg7IFNpbW9uIE1jVml0dGllKQotCi3igKIgRml4IGJ1aWxkIGZhaWx1cmVzIHdpdGggbmV3ZXIgYXV0b2NvbmYtYXJjaGl2ZSB2ZXJzaW9ucyB0aGF0IGluY2x1ZGUKLSAgQVhfLXByZWZpeGVkIHNoZWxsIHZhcmlhYmxlIG5hbWVzIChkYnVzIzI0OSwgZGJ1cyE4NjsgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBQYXJzZSBzZWN0aW9uL2dyb3VwIG5hbWVzIGluIC5zZXJ2aWNlIGZpbGVzIGFjY29yZGluZyB0byB0aGUgc3ludGF4Ci0gIGZyb20gdGhlIERlc2t0b3AgRW50cnkgU3BlY2lmaWNhdGlvbiwgcmVqZWN0aW5nIGNvbnRyb2wgY2hhcmFjdGVycwotICBhbmQgbm9uLUFTQ0lJIGluIHNlY3Rpb24vZ3JvdXAgbmFtZXMgKGRidXMjMjA4LCBEYXZpZCBLaW5nKQotCi3igKIgRml4IHZhcmlvdXMgLVdsb2dpY2FsLW9wIGlzc3VlcyB0aGF0IGNhdXNlIGJ1aWxkIGZhaWx1cmUgd2l0aCBuZXdlcgotICBnY2MgdmVyc2lvbnMgKGRidXMjMjI1LCBkYnVzITEwOTsgRGF2aWQgS2luZykKLQot4oCiIERvbid0IGFzc3VtZSB3ZSBjYW4gc2V0IHBlcm1pc3Npb25zIG9uIGEgZGlyZWN0b3J5LCBmb3IgdGhlIGJlbmVmaXQgb2YKLSAgTVNZUyBhbmQgQ3lnd2luIGJ1aWxkcyAoZGJ1cyMyMTYsIGRidXMhMTEwOyBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIERvbid0IG92ZXJ3cml0ZSBQS0dfQ09ORklHX1BBVEggYW5kIHJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4KLSAgdGhlIHBrZy1jb25maWctYmFzZWQgdmVyc2lvbiBvZiBEQnVzMUNvbmZpZyBpcyB1c2VkIGluIGEgQ01ha2UgcHJvamVjdAotICAoZGJ1cyMyNjcsIGRidXMhOTY7IENsZW1lbnMgTGFuZykKLQotZGJ1cyAxLjEyLjEyICgyMDE4LTEyLTA0KQotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUg4oCcZHJhY29uaWMgZGlzY2lwbGXigJ0gcmVsZWFzZS4KLQotZGJ1cyB2ZXJzaW9uIGNvbnRyb2wgaXMgbm93IGhvc3RlZCBvbiBmcmVlZGVza3RvcC5vcmcncyBHaXRsYWIKLWluc3RhbGxhdGlvbiwgYW5kIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzIGhhdmUgc3dpdGNoZWQgZnJvbQotQnVnemlsbGEgYnVncyAoaW5kaWNhdGVkIGJ5ICJmZC5vICNubm4iKSB0byBHaXRsYWIgaXNzdWVzICgiZGJ1cyNubm4iKQotYW5kIG1lcmdlIHJlcXVlc3RzICgiZGJ1cyFubm4iKS4KLQotRW5oYW5jZW1lbnRzOgotCi3igKIgUmVmZXJlbmNlIHRoZSBmcmVlZGVza3RvcC5vcmcgQ29kZSBvZiBDb25kdWN0IChTaW1vbiBNY1ZpdHRpZSkKLQotRml4ZXM6Ci0KLeKAoiBTdG9wIHRoZSBkYnVzLWRhZW1vbiBsZWFraW5nIG1lbW9yeSAoYW4gZXJyb3IgbWVzc2FnZSkgaWYgZGVsaXZlcmluZwotICB0aGUgbWVzc2FnZSB0aGF0IHRyaWdnZXJlZCBhdXRvLWFjdGl2YXRpb24gaXMgZm9yYmlkZGVuLiBUaGlzIGlzCi0gIHRlY2huaWNhbGx5IGEgZGVuaWFsIG9mIHNlcnZpY2UgYmVjYXVzZSB0aGUgZGJ1cy1kYWVtb24gd2lsbAotICBydW4gb3V0IG9mIG1lbW9yeSBldmVudHVhbGx5LCBidXQgaXQncyBhIHZlcnkgc2xvdyBhbmQgbm9pc3kgb25lLAotICBiZWNhdXNlIGFsbCB0aGUgcmVqZWN0ZWQgbWVzc2FnZXMgYXJlIGFsc28gdmVyeSBsaWtlbHkgdG8gaGF2ZQotICBiZWVuIGxvZ2dlZCB0byB0aGUgc3lzdGVtIGxvZywgYW5kIGl0cyBzY29wZSBpcyB0eXBpY2FsbHkgbGltaXRlZCBieQotICB0aGUgZmluaXRlIG51bWJlciBvZiBhY3RpdmF0YWJsZSBzZXJ2aWNlcyBhdmFpbGFibGUuCi0gIChkYnVzIzIzNCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBSZW1vdmUgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpIGF0dHJpYnV0ZSBvbiBkYnVzX3JlYWxsb2MoKSwKLSAgd2hpY2ggZG9lcyBub3QgbWVldCB0aGUgY3JpdGVyaWEgZm9yIHRoYXQgYXR0cmlidXRlIGluIGdjYyA0LjcrLAotICBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1pc2NvbXBpbGF0aW9uIChmZC5vICMxMDc3NDEsIFNpbW9uIE1jVml0dGllKQotCi3igKIgRml4IHNvbWUgc21hbGwgTygxKSBtZW1vcnkgbGVha3MgKGZkLm8gIzEwNzMyMCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggcHJpbnRmIGZvcm1hdHMgZm9yIHBvaW50ZXItc2l6ZWQgaW50ZWdlcnMgb24gNjQtYml0IFdpbmRvd3MKLSAgKGZkLm8gIzEwNTY2MiwgUmFsZiBIYWJhY2tlcikKLQot4oCiIEFsd2F5cyB1c2Ugc2VsZWN0KCktYmFzZWQgcG9sbCgpIGVtdWxhdGlvbiBvbiBEYXJ3aW4tYmFzZWQgT1NzCi0gIChtYWNPUywgZXRjLikgYW5kIG9uIEludGVyaXgsIHNpbWlsYXIgdG8gd2hhdCBsaWJjdXJsIGRvZXMKLSAgKGRidXMjMjMyLCBkYnVzITE5OyBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEV4dGVuZCBhIHRlc3QgdGltZW91dCB0byBhdm9pZCBzcHVyaW91cyBmYWlsdXJlcyBpbiBDSQotICAoZGJ1cyEyNiwgU2ltb24gTWNWaXR0aWUpCi0KLVRlc3RzIGFuZCBDSToKLQot4oCiIEFkZCBUcmF2aXMtQ0kgYnVpbGRzIGZvciA2NC1iaXQgV2luZG93cyB1c2luZyBtaW5ndy13NjQKLSAgKGZkLm8gIzEwNTY2MiwgUmFsZiBIYWJhY2tlcikKLQot4oCiIEFkZCBHaXRsYWItQ0kgaW50ZWdyYXRpb24gKGZkLm8gIzEwODE3NywgU2ltb24gTWNWaXR0aWUpCi0KLWRidXMgMS4xMi4xMCAoMjAxOC0wOC0wMikKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIOKAnGJlYW0gZGVmbGVjdGlvbuKAnSByZWxlYXNlLgotCi1GaXhlczoKLQot4oCiIFByZXZlbnQgcmVhZGluZyB1cCB0byAzIGJ5dGVzIGJleW9uZCB0aGUgZW5kIG9mIGEgdHJ1bmNhdGVkIG1lc3NhZ2UuCi0gIFRoaXMgY291bGQgaW4gcHJpbmNpcGxlIGJlIGFuIGluZm9ybWF0aW9uIGxlYWsgb3IgZGVuaWFsIG9mIHNlcnZpY2UKLSAgb24gdGhlIHN5c3RlbSBidXMsIGJ1dCBpcyBub3QgYmVsaWV2ZWQgdG8gYmUgZXhwbG9pdGFibGUgdG8gY3Jhc2gKLSAgdGhlIHN5c3RlbSBidXMgb3IgbGVhayBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBpbiBwcmFjdGljZS4KLSAgKGZkLm8gIzEwNzMzMiwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggYnVpbGQgd2l0aCBnY2MgOCAtV2Vycm9yPWNhc3QtZnVuY3Rpb24tdHlwZQotICAoZmQubyAjMTA3MzQ5LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEZpeCB3YXJuaW5nIGZyb20gZ2NjIDggYWJvdXQgc3VzcGljaW91cyB1c2Ugb2Ygc3RybmNweSgpIHdoZW4KLSAgcG9wdWxhdGluZyBzdHJ1Y3Qgc29ja2FkZHJfdW4gKGZkLm8gIzEwNzM1MCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggYSBtaW5vciBtZW1vcnkgbGVhayB3aGVuIGEgREJ1c1NlcnZlciBsaXN0ZW5zIG9uIGEgbmV3IGFkZHJlc3MKLSAgKGZkLm8gIzEwNzE5NCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggYW4gaW52YWxpZCBOVUxMIGFyZ3VtZW50IHRvIHJtZGlyKCkgaWYgYSBub25jZS10Y3AgREJ1c1NlcnZlcgotICBydW5zIG91dCBvZiBtZW1vcnkgKGZkLm8gIzEwNzE5NCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBEb24ndCB1c2UgbWlzbGVhZGluZyBlcnJuby1kZXJpdmVkIGVycm9yIG5hbWVzIGlmIGdldGFkZHJpbmZvKCkgb3IKLSAgZ2V0bmFtZWluZm8oKSBmYWlscyB3aXRoIGEgY29kZSBvdGhlciB0aGFuIEVBSV9TWVNURU0KLSAgKGZkLm8gIzEwNjM5NSwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBTa2lwIHRlc3RzIHRoYXQgcmVxdWlyZSB3b3JraW5nIFRDUCBpZiB3ZSBhcmUgaW4gYSBjb250YWluZXIgZW52aXJvbm1lbnQKLSAgd2hlcmUgMTI3LjAuMC4xIGNhbm5vdCBiZSByZXNvbHZlZCAoZmQubyAjMTA2ODEyLCBTaW1vbiBNY1ZpdHRpZSkKLQotZGJ1cyAxLjEyLjggKDIwMTgtMDQtMzApCi09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIOKAnGdvbGRlbiBzdXBlci12ZWxvY2lyYXB0b3LigJ0gcmVsZWFzZS4KLQotRW5oYW5jZW1lbnRzOgotCi3igKIgVGhlIERldmhlbHAgZG9jdW1lbnRhdGlvbiBpbmRleCBpcyBub3cgaW4gdmVyc2lvbiAyIGZvcm1hdAotICAoZmQubyAjMTA2MTg2LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEdpdmUgdGhlIGRidXMtZGFlbW9uIG1hbiBwYWdlIHNvbWUgc2NhcmllciB3YXJuaW5ncyBhYm91dAotICA8YWxsb3dfYW5vbnltb3VzLz4gYW5kIG5vbi1sb2NhbCBUQ1AsIHdoaWNoIGFyZSBpbnNlY3VyZSBhbmQgc2hvdWxkCi0gIG5vdCBiZSB1c2VkLCBwYXJ0aWN1bGFybHkgZm9yIHRoZSBzdGFuZGFyZCBzeXN0ZW0gYW5kIHNlc3Npb24gYnVzZXMKLSAgKGZkLm8gIzEwNjAwNCwgU2ltb24gTWNWaXR0aWUpCi0KLUZpeGVzOgotCi3igKIgRml4IGluc3RhbGxhdGlvbiBvZiBEdWNrdHlwZSBkb2N1bWVudGF0aW9uIHdpdGggbmV3ZXIgeWVscC1idWlsZAotICB2ZXJzaW9ucyAoZmQubyAjMTA2MTcxLCBTaW1vbiBNY1ZpdHRpZSkKLQotZGJ1cyAxLjEyLjYgKDIwMTgtMDMtMDEpCi09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIOKAnGp1c3QgdGhlIG9uZSBzd2FuLCBhY3R1YWxseeKAnSByZWxlYXNlLgotCi1GaXhlczoKLQot4oCiIEluY3JlYXNlIHN5c3RlbSBkYnVzLWRhZW1vbidzIFJMSU1JVF9OT0ZJTEUgcmxpbWl0IGJlZm9yZSBpdCBkcm9wcwotICBwcml2aWxlZ2VzLCBiZWNhdXNlIGl0IHdvbid0IGhhdmUgcGVybWlzc2lvbiBhZnRlcndhcmRzLiBUaGlzIGZpeGVzIGEKLSAgcmVncmVzc2lvbiBpbiBkYnVzIDEuMTAuMTggYW5kIDEuMTEuMCB3aGljaCBtYWRlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gYnVzCi0gIG1vcmUgc3VzY2VwdGlibGUgdG8gZGVsaWJlcmF0ZSBvciBhY2NpZGVudGFsIGRlbmlhbCBvZiBzZXJ2aWNlLgotICAoZmQubyAjMTA1MTY1LCBEYXZpZCBLaW5nKQotCi1kYnVzIDEuMTIuNCAoMjAxOC0wMi0wOCkKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUg4oCcU3RyaWEgQ2FtcGFuaWEgMTE14oCdIHJlbGVhc2UuCi0KLUZpeGVzOgotCi3igKIgV2hlbiBpdGVyYXRpbmcgdGhlIERCdXNDb25uZWN0aW9uIHdoaWxlIGJsb2NraW5nIG9uIGEgcGVuZGluZyBjYWxsLAotICBkb24ndCB3YWl0IGZvciBJL08gaWYgdGhhdCBwZW5kaW5nIGNhbGwgYWxyZWFkeSBoYXMgYSByZXN1bHQ7IGFuZCBtYWtlCi0gIHN1cmUgdGhhdCB3aGV0aGVyIGl0IGhhcyBhIHJlc3VsdCBpcyBwcm9wYWdhdGVkIGluIGEgdGhyZWFkLXNhZmUgd2F5LgotICBUaGlzIHByZXZlbnRzIGNlcnRhaW4gbXVsdGktdGhyZWFkZWQgY2FsbGluZyBwYXR0ZXJucyBmcm9tIGJsb2NraW5nCi0gIHVudGlsIHRoZWlyIHRpbWVvdXQgZXZlbiB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIHNvb25lci4KLSAgKGZkLm8gIzEwMjgzOTsgTWFuaXNoIE5hcmFuZywgTWljaGFlbCBTZWFybGUpCi0KLeKAoiBSZXBvcnQgdGhlIGNvcnJlY3QgZXJyb3IgaWYgT09NIGlzIHJlYWNoZWQgd2hpbGUgdHJ5aW5nIHRvIGxpc3RlbgotICBvbiBhIFRDUCBzb2NrZXQgKGZkLm8gIzg5MTA0LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEZpeCBhc3NlcnRpb24gZmFpbHVyZXMgaW4gcmVjb3ZlcnkgZnJvbSBPT00gd2hpbGUgc2V0dGluZyB1cCBhCi0gIERCdXNTZXJ2ZXIgKGZkLm8gIzg5MTA0LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEFkZCBhIG1pc3Npbmcgc3BhY2UgdG8gYSB3YXJuaW5nIG1lc3NhZ2UgKGZkLm8gIzEwMzcyOSwgVGhvbWFzIFphamljKQotCi3igKIgRXhwYW5kICR7YmluZGlyfSBjb3JyZWN0bHkgd2hlbiBwa2ctY29uZmlnIGlzIGFza2VkIGZvciBkYnVzX2RhZW1vbmRpcgotICAoZmQubyAjMTA0MjY1LCBCZW5lZGlrdCBIZWluZSkKLQot4oCiIE9uIExpbnV4IHN5c3RlbXMgd2l0aCBzeXN0ZW1kIDwgMjM3LCBpZiAke2xvY2Fsc3RhdGVkaXJ9L2RidXMgZG9lc24ndAotICBleGlzdCwgY3JlYXRlIGl0IGJlZm9yZSB0cnlpbmcgdG8gY3JlYXRlICR7bG9jYWxzdGF0ZWRpcn0vZGJ1cy9tYWNoaW5lLWlkCi0gIChmZC5vICMxMDQ1NzcsIENocmlzIExlc2lhaykKLQot4oCiIEZpeCBlc2NhcGluZyBpbiBkYnVzLWFwaS1kZXNpZ24gZG9jdW1lbnQgKGZkLm8gIzEwNDkyNSwgUGhpbGlwIFdpdGhuYWxsKQotCi1kYnVzIDEuMTIuMiAoMjAxNy0xMS0xMykKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUg4oCcc3BpZGVyIHB1bXBraW7igJ0gcmVsZWFzZS4KLQotRW5oYW5jZW1lbnRzOgotCi3igKIgTG9nIGEgd2FybmluZyBpZiBhIG5ldyBjb25uZWN0aW9uIGNhbm5vdCBiZSBhY2NlcHRlZCBkdWUgdG8gYW4KLSAgb3V0LW9mLW1lbW9yeSBjb25kaXRpb24gb3IgZmFpbHVyZSB0byBpZGVudGlmeSBpdHMgQXBwQXJtb3Igb3IKLSAgU0VMaW51eCBjb250ZXh0IChmZC5vICMxMDM1OTIsIFNpbW9uIE1jVml0dGllKQotCi1GaXhlczoKLQot4oCiIE1ha2UgdXNlIG9mICQoTUtESVJfUCkgY29tcGF0aWJsZSB3aXRoIGluc3RhbGwtc2gsIGZpeGluZyBidWlsZCB3aGVuIGEKLSAgR05VLWNvbXBhdGlibGUgYG1rZGlyIC1wYCBpcyBub3QgYXZhaWxhYmxlIChmZC5vICMxMDM1MjEsIGlsb3ZlemZzKQotCi3igKIgV2hlbiBidWlsZGluZyBmb3IgV2luZG93cyB3aXRoIEF1dG90b29scywgYXZvaWQgYGVjaG8gLWVgLCBmaXhpbmcKLSAgY3Jvc3MtY29tcGlsYXRpb24gb24gbm9uLUdOVSBwbGF0Zm9ybXMgbGlrZSBtYWNPUwotICAoZmQubyAjMTAzNDkzLCBUb255IFRoZW9kb3JlKQotCi3igKIgRml4IGNyYXNoZXMgaW4gdGhlIHNlcnZlciBzaWRlIG9mIHRoZSBub25jZS10Y3A6IHRyYW5zcG9ydCB1bmRlcgotICB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuIFRoaXMgdHJhbnNwb3J0IHNob3VsZCBub3JtYWxseSBvbmx5IGJlIHVzZWQKLSAgb24gV2luZG93cywgd2hlcmUgQUZfVU5JWCBzb2NrZXRzIGFyZSB1bmF2YWlsYWJsZTsgdGhlIHVuaXg6IHRyYW5zcG9ydAotICBpcyB0aGUgb25seSBvbmUgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlIG9uIFVuaXggcGxhdGZvcm1zLgotICAoZmQubyAjMTAzNTk3LCBTaW1vbiBNY1ZpdHRpZSkKLQotSW50ZXJuYWwgY2hhbmdlczoKLQot4oCiIEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvbiBUcmF2aXMtQ0kgKFNpbW9uIE1jVml0dGllKQotCi1kYnVzIDEuMTIuMCAoMjAxNy0xMC0zMCkKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUg4oCcZ2luZ2VyYnJlYWQgc2t1bGzigJ0gcmVsZWFzZS4KLQotMS4xMi54IGlzIGEgbmV3IHN0YWJsZSBicmFuY2gsIHJlY29tbWVuZGVkIGZvciB1c2UgaW4gT1MKLWRpc3RyaWJ1dGlvbnMuCi0KLVN1bW1hcnkgb2YgbWFqb3IgY2hhbmdlcyBiZXR3ZWVuIDEuMTAueCBhbmQgMS4xMi4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1EZXBlbmRlbmNpZXM6Ci0KLeKAoiBFeHBhdCA+PSAyLjEuMCBpcyByZXF1aXJlZC4KLeKAoiBHTGliID49IDIuNDAgaXMgcmVxdWlyZWQgaWYgZnVsbCB0ZXN0IGNvdmVyYWdlIGlzIGVuYWJsZWQuCi3igKIgW0xpbnV4XSBsaWJzZWxpbnV4ID49IDIuMC44NiBpcyByZXF1aXJlZCBpZiBTRUxpbnV4IHN1cHBvcnQgaXMKLSAgZW5hYmxlZC4KLeKAoiBbVW5peF0gZGJ1cyBub3cgcmVxdWlyZXMgYW4gPGludHR5cGVzLmg+IHRoYXQgZGVmaW5lcyBDOTkgY29uc3RhbnRzCi0gIHN1Y2ggYXMgUFJJZDY0IGFuZCBQUkl1NjQsIGV4Y2VwdCB3aGVuIGJ1aWxkaW5nIGZvciBXaW5kb3dzLgot4oCiIFtBdXRvdG9vbHNdIEJ1aWxkaW5nIGZyb20gZ2l0IChidXQgbm90IGZyb20gdGFyYmFsbHMpIHdpdGggQXV0b3Rvb2xzCi0gIG5vdyByZXF1aXJlcyBtYWNyb3MgZnJvbSB0aGUgR05VIEF1dG9jb25mIEFyY2hpdmUuCi3igKIgW0NNYWtlXSBCdWlsZHMgZG9uZSB1c2luZyBDTWFrZSBub3cgcmVxdWlyZSBDTWFrZSAzLjAuMi4KLQotQnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXM6Ci0KLeKAoiBFeHBhdCBpcyBub3cgZm91bmQgdXNpbmcgcGtnLWNvbmZpZy4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvcgotICAxLjExLjE0Lgot4oCiIFRoZSAtLWRpc2FibGUtY29tcGlsZXItb3B0aW1pc2F0aW9ucyBhbmQgLS1lbmFibGUtY29tcGlsZXItY292ZXJhZ2UKLSAgb3B0aW9ucyBubyBsb25nZXIgZXhpc3QuICBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuNCBhbmQgMS4xMS44Lgot4oCiIFtVbml4XSBUaGUgLS1lbmFibGUtYWJzdHJhY3Qtc29ja2V0cyBhbmQgLS1kaXNhYmxlLWFic3RyYWN0LXNvY2tldHMKLSAgb3B0aW9ucyBubyBsb25nZXIgZXhpc3QuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgMS4xMS4yMC4KLeKAoiBbVW5peF0gRmxhZyBmaWxlcyBpbiAvdmFyL3J1bi9jb25zb2xlLyR7dXNlcm5hbWV9IGFyZSBubyBsb25nZXIKLSAgY2hlY2tlZCBmb3IgYXRfY29uc29sZSBieSBkZWZhdWx0LiBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuMTguCi3igKIgW1VuaXgsIEN5Z3dpbl0gSW5pdCBzY3JpcHRzIGFyZSBubyBsb25nZXIgcHJvdmlkZWQgYnkgdXBzdHJlYW0gZGJ1cywKLSAgYW5kIHBhY2thZ2VycyB3aWxsIG5vdyBuZWVkIHRvIGFkZCB0aGVzZSBkb3duc3RyZWFtIChtb3N0IGFscmVhZHkgZG8pLgotICBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuMTguCi3igKIgW1VuaXhdIFRoZSBwcm9jZXNzIElEIGZpbGUgbm8gbG9uZ2VyIGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0IGxvY2F0aW9uCi0gIG9uIFJlZCBIYXQgZGVyaXZhdGl2ZXMuIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgMS4xMS4xOC4KLeKAoiBbVW5peF0gJHtydW5zdGF0ZWRpcn0gaXMgbm93IGluZGVwZW5kZW50IG9mICR7bG9jYWxzdGF0ZWRpcn0gd2l0aAotICByZWNlbnQgQXV0b3Rvb2xzIHZlcnNpb25zLiBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuMTYuCi3igKIgW1dpbmRvd3NdIFRoZSBXSU5EUkVTIHZhcmlhYmxlIGlzIG5vIGxvbmdlciB1c2VkLiBTZWUgdGhlIHJlbGVhc2UKLSAgbm90ZXMgZm9yIDEuMTEuMjIuCi0KLURlcHJlY2F0aW9uczoKLQot4oCiIEVhdmVzZHJvcHBpbmcgaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBCZWNvbWVNb25pdG9yLgotICBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHNwZWMgdmVyc2lvbiAwLjMxIChpbiBkYnVzIDEuMTEuMTQpLgot4oCiIFtVbml4XSBGbGFnIGZpbGVzIGluIC92YXIvcnVuL2NvbnNvbGUvJHt1c2VybmFtZX0gYXJlIGRlcHJlY2F0ZWQuCi0gIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgMS4xMS4xOC4KLQotTmV3IEFQSXM6Ci0KLeKAoiA8YWxsb3c+IGFuZCA8ZGVueT4gcnVsZXMgaW4gZGJ1cy1kYWVtb24gY29uZmlndXJhdGlvbiBjYW4gbm93Ci0gIGluY2x1ZGUgc2VuZF9icm9hZGNhc3Q9InRydWUiLCBzZW5kX2Jyb2FkY2FzdD0iZmFsc2UiLAotICBtYXhfdW5peF9mZHM9Ik4iLCBtaW5fdW5peF9mZHM9Ik4iIChmb3Igc29tZSBpbnRlZ2VyIE4pLgotICBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuMTguCi3igKIgZGJ1c190cnlfZ2V0X2xvY2FsX21hY2hpbmVfaWQoKSBpcyBsaWtlCi0gIGRidXNfZ2V0X2xvY2FsX21hY2hpbmVfaWQoKSwgYnV0IHJldHVybnMgYSBEQnVzRXJyb3IuCi3igKIgTmV3IEFQSXMgYXJvdW5kIERCdXNNZXNzYWdlSXRlciB0byBzaW1wbGlmeSBjbGVhbnVwLgotICBTZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIDEuMTEuMTYuCi3igKIgVGhlIG1lc3NhZ2UgYnVzIGRhZW1vbiBub3cgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgSW50cm9zcGVjdGFibGUsCi0gIFBlZXIgYW5kIFByb3BlcnRpZXMgaW50ZXJmYWNlcy4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvcgotICBkYnVzIDEuMTEuMTQgYW5kIHNwZWMgdmVyc2lvbiAwLjMxLgot4oCiIERURHMgZm9yIGludHJvc3BlY3Rpb24gWE1MIGFuZCBidXMgY29uZmlndXJhdGlvbiBhcmUgaW5zdGFsbGVkLgot4oCiIGRidXMgY2FuIGJlIGNvbXBpbGVkIHRvIGJlIHJlbG9jYXRhYmxlLCBtYWtpbmcgaXQgbW9yZSBzdWl0YWJsZSBmb3IKLSAgYmluYXJ5IGJ1bmRsaW5nIHdpdGggb3RoZXIgc29mdHdhcmUuIE9uIFdpbmRvd3MsIHRoaXMgaXMgb24gYnkKLSAgZGVmYXVsdC4KLeKAoiBbVW5peF0gQSBuZXcgdW5peDpkaXI94oCmIGFkZHJlc3MgZmFtaWx5IHJlc2VtYmxlcyB1bml4OnRtcGRpcj3igKYgYnV0Ci0gIG5ldmVyIHVzZXMgTGludXggYWJzdHJhY3Qgc29ja2V0cywgd2hpY2ggaXMgYWR2YW50YWdlb3VzIGZvcgotICBjb250YWluZXJzLiBPbiBub24tTGludXggaXQgaXMgZXF1aXZhbGVudCB0byB1bml4OnRtcGRpcj3igKYuCi0gIFNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgZGJ1cyAxLjExLjE0IGFuZCBzcGVjIHZlcnNpb24gMC4zMS4KLeKAoiBbVW5peF0gTmV3IG9wdGlvbiAiZGJ1cy1sYXVuY2ggLS1leGl0LXdpdGgteDExIi4KLeKAoiBbVW5peF0gU2Vzc2lvbiBtYW5hZ2VycyBjYW4gY3JlYXRlIHRyYW5zaWVudCAuc2VydmljZSBmaWxlcyBpbgotICAkWERHX1JVTlRJTUVfRElSL2RidXMtMS9zZXJ2aWNlcy4gU2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciAxLjExLjEyLgot4oCiIFtVbml4XSBBIHN5c3VzZXJzLmQgc25pcHBldCBjYW4gY3JlYXRlIHRoZSBtZXNzYWdlYnVzIHVzZXIgb24tZGVtYW5kLgotCi1NaXNjZWxsYW5lb3VzIGJlaGF2aW91ciBjaGFuZ2VzOgotCi3igKIgW1VuaXhdIFRoZSBzZXNzaW9uIGJ1cyBub3cgbG9ncyB0byBzeXNsb2cgaWYgaXQgd2FzIHN0YXJ0ZWQgYnkKLSAgZGJ1cy1sYXVuY2guCi3igKIgW1VuaXhdIEludGVybmFsIHdhcm5pbmdzIGFyZSBsb2dnZWQgdG8gc3lzbG9nIGlmIGNvbmZpZ3VyZWQuCi3igKIgW1VuaXhdIEV4Y2VlZGluZyBhbiBhbnRpLURvUyBsaW1pdCBpcyBsb2dnZWQgdG8gc3lzbG9nIGlmIGNvbmZpZ3VyZWQsCi0gIG9yIHRvIHN0ZGVyci4KLQotQ2hhbmdlcyBzaW5jZSAxLjExLjIyIHJlbGVhc2UgY2FuZGlkYXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU3RhbmRhcmQgc3RhYmxlLWJyYW5jaCBjaGFuZ2VzOgotCi3igKIgRGlzYWJsZSB3YXJuaW5ncyBhYm91dCB1c2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKFNpbW9uIE1jVml0dGllKQotCi1GaXhlczoKLQot4oCiIERvbid0IGRpc3RyaWJ1dGUgZmlsZXMgZ2VuZXJhdGVkIGJ5IC4vY29uZmlndXJlIGluIHRoZSBzb3VyY2UgdGFyYmFsbAotICAoZmQubyAjMTAzNDIwLCBTaW1vbiBNY1ZpdHRpZSkKLQotSW50ZXJuYWwgY2hhbmdlczoKLQot4oCiIFJlbW92ZSBzb21lIHVudXNlZCBmaWxlcyBmcm9tIHRoZSBnaXQgcmVwb3NpdG9yeQotICAoZmQubyAjMTAzNDIwLCBTaW1vbiBNY1ZpdHRpZSkKLQotRC1CdXMgMS4xMS4yMiAoMjAxNy0xMC0yMykKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSDigJxmaXJlIHN1cmZhY2XigJ0gcmVsZWFzZS4KLQotVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZS1jYW5kaWRhdGUgZm9yIHRoZSAxLjEyLjAgc3RhYmxlIHJlbGVhc2UuCi0KLUJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzOgotCi3igKIgV2hlbiBidWlsZGluZyBmb3IgV2luZG93cyB3aXRoIEF1dG90b29scywgc2V0dGluZyB0aGUgV0lORFJFUyB2YXJpYWJsZQotICBubyBsb25nZXIgd29ya3MgdG8gc2VsZWN0IGEgbm9uLXN0YW5kYXJkIHJlc291cmNlIGNvbXBpbGVyLiBVc2UKLSAgbGlidG9vbCdzIHN0YW5kYXJkIFJDIHZhcmlhYmxlIGluc3RlYWQsIGZvciBleGFtcGxlCi0gICIuL2NvbmZpZ3VyZSBSQz1pNjg2LXc2NC1taW5ndzMyLXdpbmRyZXMiCi0KLURlcGVuZGVuY2llczoKLQot4oCiIEJ1aWxkcyBkb25lIHVzaW5nIENNYWtlIG5vdyByZXF1aXJlIENNYWtlIDMuMC4yLgotCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiBXaGVuIGJ1aWxkaW5nIGZvciBXaW5kb3dzLCBpbXByb3ZlIHF1YWxpdHkgb2YgbWV0YWRhdGEgaW4KLSAgbGliZGJ1cy0xLTMuZGxsIChmZC5vICMxMDMwMTUsIFJhbGYgSGFiYWNrZXIpCi0KLUZpeGVzOgotCi3igKIgRml4IGEgdHlwbyAidWludCAxNiIgaW4gZGJ1cy1zZW5kKDEpIG1hbiBwYWdlCi0gIChmZC5vICMxMDMwNzUsIERhdmlkIEtpbmcpCi0KLeKAoiBXaGVuIGJ1aWxkaW5nIGZvciBXaW5kb3dzLCBsaWJkYnVzLTEtMy5kbGwgYWx3YXlzIGluY2x1ZGVzIHZlcnNpb24KLSAgaW5mb3JtYXRpb24uIFByZXZpb3VzbHksIHRoaXMgd2FzIG1pc3NpbmcgaWYgdXNpbmcgQ01ha2UgYW5kIGFueQotICBub24tTVNWQyBjb21waWxlci4gKGZkLm8gIzEwMzAxNSwgUmFsZiBIYWJhY2tlcikKLQot4oCiIEZpeCB0aGUgYnVpbGQgd2l0aCBNU1ZDLCB3aGljaCByZWdyZXNzZWQgd2l0aCB0aGUgIzEwMjU1OCBmaXggaW4KLSAgMS4xMS4yMC4gKGZkLm8gIzEwMjU1OCwgUmFsZiBIYWJhY2tlcikKLQotSW50ZXJuYWwgY2hhbmdlczoKLQot4oCiIFNpbXBsaWZ5IFdpbmRvd3MgcmVzb3VyY2UgZW1iZWRkaW5nCi0gIChmZC5vICMxMDMwMTUsIFNpbW9uIE1jVml0dGllKQotCi1ELUJ1cyAxLjExLjIwICgyMDE3LTEwLTAzKQorRC1CdXMgMS4xMC4xMiAoMjAxNi0xMC0xMCkKID09CiAKLVRoZSDigJx3cmFpdGggc3R1buKAnSByZWxlYXNlLgotCi1CdWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlczoKLQot4oCiIFRoZSAtLWVuYWJsZS1hYnN0cmFjdC1zb2NrZXRzIGFuZCAtLWRpc2FibGUtYWJzdHJhY3Qtc29ja2V0cyBvcHRpb25zCi0gIG5vIGxvbmdlciBleGlzdC4gU3VwcG9ydCBmb3IgTGludXgncyBhYnN0cmFjdCBBRl9VTklYIHNvY2tldHMgaXMgbm93Ci0gIHVuY29uZGl0aW9uYWxseSBlbmFibGVkIG9uIExpbnV4IGFuZCBkaXNhYmxlZCBldmVyeXdoZXJlIGVsc2UuCi0gIChmZC5vICMzNDkwNSwgU2ltb24gTWNWaXR0aWUpCi0KLUVuaGFuY2VtZW50czoKLQot4oCiIE1ha2Ugc2xvd2VyIHRlc3RzIGxlc3MgbGlrZWx5IHRvIHRpbWUgb3V0LCBhbmQgaW1wcm92ZSBkaWFnbm9zdGljcyBpZgotICB0ZXN0cyBkbyB0aW1lIG91dCAoZmQubyAjMTAzMDA5LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIE9uIFdpbmRvd3MsIGRvbid0IGNvbXBpbGUgYW4gdW51c2VkIHN0dWIgaW1wbGVtZW50YXRpb24gb2YKLSAgX2RidXNfc2V0X3NpZ25hbF9oYW5kbGVyKCkgKGZkLm8gIzEwMzAxMCwgU2ltb24gTWNWaXR0aWUpCi0KLUZpeGVzOgotCi3igKIgQmUgbW9yZSBjYXJlZnVsIHRvIHNhdmUgYW5kIHJlc3RvcmUgZXJybm8gaW4gUE9TSVggYXN5bmMgc2lnbmFsCi0gIGhhbmRsZXJzIChmZC5vICMxMDMwMTAsIFNpbW9uIE1jVml0dGllKQotCi3igKIgT24gV2luZG93cywgZW1iZWQgYSBtYW5pZmVzdCBpbiBkYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50LmV4ZQotICBzbyB0aGF0IHRoZSBoZXVyaXN0aWNzIHVzZWQgZm9yIFVBQyBkbyBub3QgYXNzdW1lIGl0IG5lZWRzIGVsZXZhdGVkCi0gIHByaXZpbGVnZXMgZHVlIHRvIGl0cyBuYW1lIGNvbnRhaW5pbmcgInVwZGF0ZSIKLSAgKGZkLm8gIzEwMjU1OCwgUmFsZiBIYWJhY2tlcikKLQot4oCiIE9uIFdpbmRvd3Mgd2l0aCBBdXRvbWFrZSwgZW1iZWQgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiBsaWJkYnVzLTEsCi0gIGFzIHdhcyBtZWFudCB0byBoYXBwZW4gaW4gYWxsIHZlcnNpb25zIHNpbmNlIDIwMDkKLSAgKGZkLm8gIzEwMzAxNSwgU2ltb24gTWNWaXR0aWUpCi0KLUQtQnVzIDEuMTEuMTggKDIwMTctMDktMjUpCi09PQotCi1UaGUg4oCcdmFtcGlyZSBjb25xdWlzdGFkb3LigJ0gcmVsZWFzZS4KLQotQnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGNoYW5nZXM6Ci0KLeKAoiBCeSBkZWZhdWx0LCBkYnVzLWRhZW1vbiBvbiBVbml4IG5vIGxvbmdlciBjaGVja3MgZm9yIGZsYWcgZmlsZXMKLSAgL3Zhci9ydW4vY29uc29sZS8ke3VzZXJuYW1lfSBjcmVhdGVkIGJ5IHRoZSBvYnNvbGV0ZSBwYW1fY29uc29sZSBhbmQKLSAgcGFtX2ZvcmVncm91bmQgUEFNIG1vZHVsZXMgd2hlbiBkZWNpZGluZyB3aGV0aGVyICR7dXNlcm5hbWV9IGlzCi0gIGN1cnJlbnRseSBhdCB0aGUgY29uc29sZS4gVGhlIG9sZCBkZWZhdWx0IGJlaGF2aW91ciBjYW4gYmUgcmVzdG9yZWQKLSAgYnkgc3BlY2lmeWluZyAtLXdpdGgtY29uc29sZS1hdXRoLWRpcj0vdmFyL3J1bi9jb25zb2xlIGluIHRoZQotICByZWNvbW1lbmRlZCBBdXRvdG9vbHMgYnVpbGQgc3lzdGVtLCBvcgotICAtRERCVVNfQ09OU09MRV9BVVRIX0RJUj0vdmFyL3J1bi9jb25zb2xlIGluIENNYWtlLiBUaGlzIGZlYXR1cmUgaXMKLSAgbm93IGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZGJ1cyAxLjEzIHVubGVzcyBmZWVkYmFjayB2aWEKLSAgZmQubyAjMTAxNjI5IGluZGljYXRlcyB0aGF0IHRoaXMgd291bGQgYmUgcHJvYmxlbWF0aWMuCi0gIChmZC5vICMxMDE2MjksIFNpbW9uIE1jVml0dGllKQotCi3igKIgTFNCLXN0eWxlIGluaXQgc2NyaXB0cyBmb3IgUmVkIEhhdCBhbmQgU2xhY2t3YXJlLCBhbmQgYSBub24tTFNCIGluaXQKLSAgc2NyaXB0IGZvciBDeWd3aW4sIGFyZSBubyBsb25nZXIgcHJvdmlkZWQgaW4gdGhlIHVwc3RyZWFtIGRidXMKLSAgc291cmNlLiBXZSByZWNvbW1lbmQgdGhhdCBkaXN0cmlidXRvcnMgd2hvIHN1cHBvcnQgbm9uLXN5c3RlbWQgc2VydmljZQotICBtYW5hZ2VtZW50IHNob3VsZCBtYWludGFpbiB0aGVpciBvd24gaW5pdCBzY3JpcHRzIG9yIG90aGVyIHNlcnZpY2UKLSAgbWFuYWdlciBpbnRlZ3JhdGlvbiBhcyBwYXJ0IG9mIHRoZWlyIGRvd25zdHJlYW0gcGFja2FnaW5nLCBzaW1pbGFyIHRvCi0gIHRoZSB3YXkgRGViaWFuIGRpc3RyaWJ1dGVzIGEgRGViaWFuLXNwZWNpZmljIExTQiBpbml0IHNjcmlwdCBmb3IgZGJ1cy4KLQotICBUaGUgc3lzdGVtZCB1bml0IGNvbnRpbnVlcyB0byBiZSBtYWludGFpbmVkIGFzIHBhcnQgb2YgdGhlIHVwc3RyZWFtCi0gIGRidXMgc291cmNlLCBiZWNhdXNlIGl0IHJlY2VpdmVzIHJlZ3VsYXIgdGVzdGluZyBhbmQgbWFpbnRlbmFuY2UuCi0KLSAgKGZkLm8gIzEwMTcwNiwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBUaGUgcHJvY2VzcyBJRCBmaWxlIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbSBidXMgaXMgbm8gbG9uZ2VyIGluZmx1ZW5jZWQKLSAgYnkgdGhlIC0td2l0aC1pbml0LXNjcmlwdHM9cmVkaGF0IGNvbmZpZ3VyZSBvcHRpb24gb3IgdGhlIHByZXNlbmNlIG9mCi0gIC9ldGMvcmVkaGF0LXJlbGVhc2UgYXQgYnVpbGQgdGltZS4gSWYgeW91ciBPUydzIGluaXQgc2NyaXB0IG9yIG90aGVyCi0gIHNlcnZpY2UgbWFuYWdlbWVudCByZWxpZXMgb24gdGhlIFJlZCBIYXQtc3R5bGUgcGlkIGZpbGUsIGl0IGNhbiBiZQotICByZXN0b3JlZCBieSBzcGVjaWZ5aW5nIC0td2l0aC1zeXN0ZW0tcGlkLWZpbGU9L3J1bi9tZXNzYWdlYnVzLnBpZCBhdAotICBjb25maWd1cmUgdGltZSBvciB1c2luZyB0aGUgPHBpZGZpbGU+IGRpcmVjdGl2ZSBpbiBidXMgY29uZmlndXJhdGlvbi4KLQotICBOb3RlIHRoYXQgdGhlIHVwc3RyZWFtLXN1cHBsaWVkIHN5c3RlbWQgdW5pdCBydW5zIGRidXMtZGFlbW9uIHdpdGgKLSAgdGhlIC0tbm9waWRmaWxlIG9wdGlvbiwgc28gaXQgZG9lcyBub3Qgbm9ybWFsbHkgd3JpdGUgYSBwaWQgZmlsZSwKLSAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBPUyBpcyBSZWQtSGF0LWRlcml2ZWQgb3Igbm90LgotCi0gIChmZC5vICMxMDE3MDYsIFNpbW9uIE1jVml0dGllKQotCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiA8YWxsb3c+IGFuZCA8ZGVueT4gcnVsZXMgaW4gZGJ1cy1kYWVtb24gY29uZmlndXJhdGlvbiBjYW4gbm93Ci0gIGluY2x1ZGUgc2VuZF9icm9hZGNhc3Q9InRydWUiIG9yIHNlbmRfYnJvYWRjYXN0PSJmYWxzZSIsIHdoaWNoIG1ha2UKLSAgdGhlIHJ1bGUgb25seSBtYXRjaCBicm9hZGNhc3Qgc2lnbmFscywgb3Igb25seSBtYXRjaCBtZXNzYWdlcyB0aGF0Ci0gIGFyZSBub3QgYnJvYWRjYXN0IHNpZ25hbHMsIHJlc3BlY3RpdmVseS4KLSAgKGZkLm8gIzI5ODUzLCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIDxhbGxvdz4gYW5kIDxkZW55PiBydWxlcyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgdG8gYXBwbHkgb25seSB0bwotICBtZXNzYWdlcyB3aXRoIG9yIHdpdGhvdXQgVW5peCBmaWxlIGRlc2NyaXB0b3JzIGF0dGFjaGVkLiBUaGlzIHdvdWxkCi0gIHR5cGljYWxseSBiZSB1c2VkIGluIHJ1bGVzIGxpa2UgdGhlc2U6Ci0gIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSIuLi4iIG1heF91bml4X2Zkcz0iMCIvPgotICA8ZGVueSBzZW5kX2Rlc3RpbmF0aW9uPSIuLi4iIG1pbl91bml4X2Zkcz0iMSIvPgotICA8ZGVueSByZWNlaXZlX3NlbmRlcj0iLi4uIiBtaW5fdW5peF9mZHM9IjEiLz4KLSAgYnV0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2V0IGEgbm9uemVybyB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mCi0gIGZpbGUgZGVzY3JpcHRvcnM6Ci0gIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSIuLi4iIG1heF91bml4X2Zkcz0iNCIvPgotICAoZmQubyAjMTAxODQ4LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIE9uIFVuaXggcGxhdGZvcm1zLCB0aGUgREJVU19DT09LSUVfU0hBMSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20KLSAgbm93IHJlc3BlY3RzIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIHRoZSBjbGllbnQgc2lkZSwgYW5kCi0gIG9uIHRoZSBzZXJ2ZXIgc2lkZSB3aGVuIHRoZSB1aWQgYXR0ZW1wdGluZyB0byBjb25uZWN0IGlzIHRoZSBzYW1lCi0gIGFzIHRoZSB1aWQgb2YgdGhlIHNlcnZlci4gVGhpcyBhbGxvd3MgdGhlIGF1dG9tYXRlZCB0ZXN0cyB0byBwYXNzIGluCi0gIGVudmlyb25tZW50cyB3aGVyZSB0aGUgdXNlcidzICJvZmZpY2lhbCIgaG9tZSBkaXJlY3RvcnkgaW4gL2V0Yy9wYXNzd2QKLSAgaXMgbm9uZXhpc3RlbnQsIHN1Y2ggYXMgRGViaWFuIGF1dG9idWlsZGVycy4KLSAgKGZkLm8gIzEwMTk2MCwgU2ltb24gTWNWaXR0aWUpCi0KLUZpeGVzOgotCi3igKIgV2hlbiBwYXJzaW5nIGRidXMtZGFlbW9uIGNvbmZpZ3VyYXRpb24sIHRlbGwgRXhwYXQgbm90IHRvIHVzZQotICBjcnlwdG9ncmFwaGljLXF1YWxpdHkgZW50cm9weSBhcyBhIHNhbHQgZm9yIGl0cyBoYXNoIHRhYmxlczogd2UgdHJ1c3QKLSAgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNvIHdlIGFyZSBub3QgY29uY2VybmVkIGFib3V0IGFsZ29yaXRobWljCi0gIGNvbXBsZXhpdHkgYXR0YWNrcyB2aWEgaGFzaCB0YWJsZSBjb2xsaXNpb25zLiBUaGlzIHByZXZlbnRzCi0gIGRidXMtZGFlbW9uIC0tc3lzdGVtIGZyb20gaG9sZGluZyB1cCB0aGUgYm9vdCBwcm9jZXNzIChhbmQgY2F1c2luZwotICBlYXJseS1ib290IHN5c3RlbSBzZXJ2aWNlcyBsaWtlIHN5c3RlbWQsIGxvZ2luZCwgbmV0d29ya2QgdG8gdGltZQotICBvdXQpIG9uIGVudHJvcHktc3RhcnZlZCBlbWJlZGRlZCBzeXN0ZW1zLgotICAoZmQubyAjMTAxODU4LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEF2b2lkIGEgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgYnVpbGQgZmFpbHVyZSBvbiBTb2xhcmlzCi0gIChmZC5vICMxMDIxNDUsIEFsYW4gQ29vcGVyc21pdGgpCi0KLeKAoiBPbiBVbml4IHBsYXRmb3JtLCBkcm9wIERCVVNfU1lTVEVNX0xPR19JTkZPIG1lc3NhZ2VzIGZyb20gTE9HX05PVElDRQotICB0byBMT0dfSU5GTywgbWF0Y2hpbmcgaG93IHdlIHVzZSB0aGlzIGxvZyBsZXZlbCBpbiBwcmFjdGljZQotICAoZmQubyAjMTAyNjg2LCBTaW1vbiBNY1ZpdHRpZSkKLQotRC1CdXMgMS4xMS4xNiAoMjAxNy0wNy0yNykKLT09Ci0KLVRoZSDigJxzb3V0aCBmYWNpbmcgZ2FyZGVu4oCdIHJlbGVhc2UuCi0KLUJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzOgotCi3igKIgVGhlIEF1dG90b29scyBidWlsZCBzeXN0ZW0gbm93IHN1cHBvcnRzIHZhcnlpbmcgJHtydW5zdGF0ZWRpcn0KLSAgaW5kZXBlbmRlbnRseSBvZiAke2xvY2Fsc3RhdGVkaXJ9LCBpZiB1c2luZyBhbiBBdXRvY29uZiB2ZXJzaW9uCi0gIHRoYXQgaGFzIHRoYXQgZmVhdHVyZTsgdmVyc2lvbiAyLjcwIHdpbGwgZXZlbnR1YWxseSBoYXZlIHRoaXMsIGJ1dAotICBtYW55IExpbnV4IGRpc3RyaWJ1dGlvbnMgYWRkIGl0IHRvIHZlcnNpb24gMi42OSBhcyBhIHBhdGNoLgotICBBIHR5cGljYWwgdXNlIGlzIHRvIHNldCBwcmVmaXg9L3Vzciwgc3lzY29uZmRpcj0vZXRjLCBsb2NhbHN0YXRlZGlyPS92YXIKLSAgYW5kIHJ1bnN0YXRlZGlyPS9ydW4uIChmZC5vICMxMDE1NjksIFNpbW9uIE1jVml0dGllKQotCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiBOZXcgQVBJcyBEQlVTX01FU1NBR0VfSVRFUl9JTklUX0NMT1NFRCwgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9jbG9zZWQoKQotICBhbmQgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbigpIHNpbXBsaWZ5IHRoZQotICBzaW5nbGUtZXhpdC1wb2ludCAoImdvdG8gb3V0Iikgc3R5bGUgb2YgcmVzb3VyY2UgY2xlYW51cC4gVGhlIEFQSQotICBkb2N1bWVudGF0aW9uIGFyb3VuZCBEQnVzTWVzc2FnZUl0ZXIgYW5kIGNvbnRhaW5lcnMgaGFzIGFsc28gYmVlbgotICBjbGFyaWZpZWQuIChmZC5vICMxMDE1NjgsIFNpbW9uIE1jVml0dGllKQotCi1GaXhlczoKLQot4oCiIEZpeCB0aGUgaW1wbGVtZW50YXRpb24gb2YgcmUtZW5hYmxpbmcgYSB0aW1lb3V0IChhZ2Fpbikgc28gdGhhdCBpdHMKLSAgY291bnRkb3duIGlzIGFsd2F5cyByZXN0YXJ0ZWQgYXMgaW50ZW5kZWQuIChmZC5vICM5NTYxOSwKLSAgTWljaGFsIEtvdXRuw70pCi0KLeKAoiBNYWtlIHRoZSBkYnVzLWRhZW1vbidzIFByb3BlcnRpZXMgaW50ZXJmYWNlLCBhcyBpbnRyb2R1Y2VkIGluIDEuMTEuMTQsCi0gIGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgb24gdGhlIHN5c3RlbSBidXMgKGZkLm8gIzEwMTcwMCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IGlmIGl0IGZhaWxzIHRvCi0gIGFwcGVuZCBhIGZpbGUgZGVzY3JpcHRvciB0byBhIG1lc3NhZ2UuIChmZC5vICMxMDE1NjgsIFNpbW9uIE1jVml0dGllKQotCi3igKIgZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IGlmIGl0IHJ1bnMgb3V0Ci0gIG9mIG1lbW9yeS4gKGZkLm8gIzEwMTU2OCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3NfdmFsaXN0KCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSBpZiBnaXZlbiBhbgotICB1bnN1cHBvcnRlZCB0eXBlLiBUaGlzIHNpdHVhdGlvbiBpcyBzdGlsbCBjb25zaWRlcmVkIHRvIGJlIGEgcHJvZ3JhbW1pbmcKLSAgZXJyb3Igd2hpY2ggbmVlZHMgdG8gYmUgY29ycmVjdGVkIGJ5IHRoZSB1c2VyIG9mIGxpYmRidXMuCi0gIChmZC5vICMxMDE1NjgsIFNpbW9uIE1jVml0dGllKQotCi3igKIgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCkgYW5kIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCkKLSAgd2lsbCBubyBsb25nZXIgcmVwb3J0IHRoYXQgdGhlaXIgYXJndW1lbnRzIHdlcmUgaW52YWxpZCBpZiB0aGV5IHJ1biBvdXQKLSAgb2YgbWVtb3J5IGF0IGV4YWN0bHkgdGhlIHdyb25nIHRpbWUuIChmZC5vICMxMDE1NjgsIFNpbW9uIE1jVml0dGllKQotCi3igKIgRW5zdXJlIHRoYXQgdGVzdHMgZmFpbCBpZiB0aGV5IHdvdWxkIG90aGVyd2lzZSBoYXZlIHRyaWVkIHRvIGNvbm5lY3QgdG8KLSAgdGhlIHJlYWwgc2Vzc2lvbiBidXMgKGZkLm8gIzEwMTY5OCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBNYWtlIGJ1aWxkLXRpbWUgdGVzdHMgY29wZSB3aXRoIGZpbmRpbmcgUHl0aG9uIDMsIGJ1dCBub3QgUHl0aG9uIDIKLSAgKGZkLm8gIzEwMTcxNiwgU2ltb24gTWNWaXR0aWUpCi0KLUludGVybmFsIGNoYW5nZXMgcmVsZXZhbnQgdG8gZGJ1cyBkZXZlbG9wZXJzOgotCi3igKIgREJ1c1ZhcmlhbnQgaXMgYSBuZXcgbWVjaGFuaXNtIHRvIGNvcHkgc2luZ2xlIHZhbHVlcyBmcm9tIGEgbWVzc2FnZSBpbnRvCi0gIGEgYnVmZmVyIHdpdGhvdXQgY29weWluZyB0aGUgZW50aXJlIG1lc3NhZ2UgKGZkLm8gIzEwMTU2OCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBEQlVTX1NZU1RFTV9MT0dfRkFUQUwgaGFzIGJlZW4gcmVwbGFjZWQgYnkgREJVU19TWVNURU1fTE9HX0VSUk9SLgotICBMb2dnaW5nIGFuIEVSUk9SIG1lc3NhZ2UgZG9lcyBub3QgbWFrZSB0aGUgcHJvY2VzcyBleGl0OyB0aGUgY2FsbGVyCi0gIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGFib3J0KCkgb3IgZXhpdCgpLCB3aGljaGV2ZXIgaXMgbW9yZSBhcHByb3ByaWF0ZS4KLSAgKGZkLm8gIzEwMTU2OCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBCZXR0ZXIgdGVzdCBjb3ZlcmFnZSAoZmQubyAjMTAxNTY4LCBTaW1vbiBNY1ZpdHRpZSkKLQotRC1CdXMgMS4xMS4xNCAoMjAxNy0wNi0yOSkKLT09Ci0KLVRoZSDigJxpcnJhdGlvbmFsIGZlYXIgb2YgYmVlc+KAnSByZWxlYXNlLgotCi1EZXBlbmRlbmNpZXM6Ci0KLeKAoiBFeHBhdCA+PSAyLjEuMCBpcyBhbHdheXMgcmVxdWlyZWQKLeKAoiBsaWJzZWxpbnV4ID49IDIuMC44NiBpcyByZXF1aXJlZCBpZiBTRUxpbnV4IHN1cHBvcnQgaXMgZW5hYmxlZAot4oCiIEdMaWIgPj0gMi40MCBpcyByZXF1aXJlZCBpZiBmdWxsIHRlc3QgY292ZXJhZ2UgaXMgZW5hYmxlZAotCi1CdWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlczoKLQot4oCiIFdlIG5vdyB1c2UgcGtnLWNvbmZpZyB0byBmaW5kIGxpYmV4cGF0IGluIEF1dG90b29scyBidWlsZHMuIFRoaXMgcmVxdWlyZXMKLSAgRXhwYXQgMi4xLjAgKE1hcmNoIDIwMTIpIG9yIGxhdGVyLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIHNob3VsZCByZW1vdmUgdGhlCi0gIG5lZWQgdG8gY29uZmlndXJlIHdpdGggTERGTEFHUz0tTC91c3IvbG9jYWwvbGliIG9uIE9wZW5CU0QsIHdoaWNoIGNhbgotICBpdHNlbGYgY2F1c2UgY29tcGlsYXRpb24gZmFpbHVyZXMuCi0KLSAgQXMgd2l0aCBhbGwgcGtnLWNvbmZpZy1iYXNlZCBjb25maWd1cmUgY2hlY2tzLCB5b3UgY2FuIHVzZQotICBQS0dfQ09ORklHX1BBVEg9L3doYXRldmVyL2xpYi9wa2djb25maWcgdG8gZmluZCBleHBhdC5wYyBpbiBhCi0gIG5vbi1zdGFuZGFyZCBwcmVmaXgsIG9yIEVYUEFUX0NGTEFHUz0iLUkvd2hhdGV2ZXIvaW5jbHVkZSIgYW5kCi0gIEVYUEFUX0xJQlM9Ii1ML3doYXRldmVyL2xpYiAtbGV4cGF0IiB0byBhdm9pZCBuZWVkaW5nIGEgLnBjIGZpbGUKLSAgYXQgYWxsLgotCi0gIChmZC5vICM2OTgwMSwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBTaW1pbGFybHksIHdlIG5vdyB1c2UgcGtnLWNvbmZpZyB0byBmaW5kIGxpYnNlbGludXguIFZlcnNpb24gMi4wLjg2Ci0gIGlzIHJlcXVpcmVkIGR1ZSB0byB0aGUgcmVtb3ZhbCBvZiBleHBsaWNpdCByZWZjb3VudGluZyBmb3IgU0lEcy4KLSAgKGZkLm8gIzEwMDkxMiwgTGF1cmVudCBCaWdvbnZpbGxlKQotCi1CZWhhdmlvdXIgY2hhbmdlczoKLQot4oCiIFByZXZpb3VzbHksIC9ldGMvbWFjaGluZS1pZCBjb3VsZCBiZSBjb3BpZWQgdG8gL3Zhci9saWIvZGJ1cy9tYWNoaW5lLWlkCi0gIGFzIGEgc2lkZS1lZmZlY3Qgb2YgYSBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCBwcm9jZXNzIG1lcmVseSByZWFkaW5nIHRoZQotICBtYWNoaW5lIElELiBJdCBpcyBubyBsb25nZXIgY29waWVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgcmVhZGluZy4KLSAgUnVubmluZyBkYnVzLXV1aWRnZW4gLS1lbnN1cmUsIHdoaWNoIHNob3VsZCBiZSBkb25lIGFmdGVyIGluc3RhbGxpbmcgZGJ1cywKLSAgY29udGludWVzIHRvIGNvcHkgL2V0Yy9tYWNoaW5lLWlkIHRvIC92YXIvbGliL2RidXMvbWFjaGluZS1pZCBpZiB0aGUKLSAgZm9ybWVyIGV4aXN0cyBhbmQgdGhlIGxhdHRlciBkb2VzIG5vdC4KLSAgKGZkLm8gIzEwMTI1NywgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBUaGUgdW5kb2N1bWVudGVkIFZlcmJvc2UgaW50ZXJmYWNlLCBhbmQgdGhlIEdldEFsbE1hdGNoUnVsZXMgbWV0aG9kIG9uCi0gIHRoZSB1bmRvY3VtZW50ZWQgU3RhdHMgaW50ZXJmYWNlLCBtdXN0IG5vdyBiZSB1c2VkIHZpYSB0aGUgb2JqZWN0IHBhdGgKLSAgL29yZy9mcmVlZGVza3RvcC9EQnVzLiBQcmV2aW91c2x5LCB0aGV5IGV4aXN0ZWQgb24gYWxsIG9iamVjdCBwYXRocy4KLSAgKGZkLm8gIzEwMTI1NywgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBBZGRNYXRjaCgpIHdpdGggYSBtYXRjaCBydWxlIGNvbnRhaW5pbmcgZWF2ZXNkcm9wPSd0cnVlJyB3aWxsIG5vdyBmYWlsCi0gIHVubGVzcyBjYWxsZWQgYnkgZWl0aGVyIHRoZSBzYW1lIHVzZXIgYXMgdGhlIGRidXMtZGFlbW9uLCBvciBVbml4IHVpZCAwCi0gIChyb290KSwgbWF0Y2hpbmcgdGhlIHJlc3RyaWN0aW9ucyBhcHBsaWVkIHRvIHRoZSBuZXdlciBCZWNvbWVNb25pdG9yKCkKLSAgbWV0aG9kLiBPbiB0aGUgc2Vzc2lvbiBidXMgdGhpcyBoYXMgbm8gcHJhY3RpY2FsIGVmZmVjdC4gT24gdGhlIHN5c3RlbQotICBidXMgdGhpcyB3aWxsIHByZXZlbnQgY2VydGFpbiBjb25maWd1cmF0aW9ucyB0aGF0IGFscmVhZHkgZGlkIG5vdAotICB3b3JrIHdlbGwgaW4gcHJhY3RpY2UuIChmZC5vICMxMDE1NjcsIFNpbW9uIE1jVml0dGllKQotCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiBELUJ1cyBTcGVjaWZpY2F0aW9uIHZlcnNpb24gMC4zMQotICDCtyBEb24ndCByZXF1aXJlIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHNlYXJjaCBwYXRocyB0byBiZSBsb3dlc3QKLSAgICBwcmlvcml0eQotICDCtyBDb3JyZWN0IHJlZ2V4IHN5bnRheCBmb3Igb3B0aW9uYWxseS1lc2NhcGVkIGJ5dGVzIGluIGFkZHJlc3NlcyBzbyBpdAotICAgIGluY2x1ZGVzIGh5cGhlbi1taW51cywgZm9yd2FyZCBzbGFzaCBhbmQgdW5kZXJzY29yZSBhcyBpbnRlbmRlZAotICDCtyBEZXNjcmliZSBhbGwgbWVzc2FnZSBidXMgbWV0aG9kcyBpbiB0aGUgc2FtZSBzZWN0aW9uCi0gIMK3IENsYXJpZnkgdGhlIGNvcnJlY3Qgb2JqZWN0IHBhdGggZm9yIG1ldGhvZCBjYWxscyB0byB0aGUgbWVzc2FnZSBidXMKLSAgICAoL29yZy9mcmVlZGVza3RvcC9EQnVzLCBEQlVTX1BBVEhfREJVUyBpbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uKQotICDCtyBEb2N1bWVudCB0aGF0IHRoZSBtZXNzYWdlIGJ1cyBpbXBsZW1lbnRzIEludHJvc3BlY3RhYmxlLCBQZWVyIGFuZAotICAgIFByb3BlcnRpZXMKLSAgwrcgQWRkIG5ldyBGZWF0dXJlcyBhbmQgSW50ZXJmYWNlcyBwcm9wZXJ0aWVzIGZvciBtZXNzYWdlIGJ1cwotICAgIGZlYXR1cmUtZGlzY292ZXJ5Ci0gIMK3IEFkZCB1bml4OmRpcj0uLi4sIHdoaWNoIHJlc2VtYmxlcyB1bml4OnRtcGRpcj0uLi4gYnV0IG5ldmVyIHVzZXMKLSAgICBhYnN0cmFjdCBzb2NrZXRzCi0gIMK3IERvbid0IHJlcXVpcmUgZWF2ZXNkcm9wPSd0cnVlJyB0byBiZSBhY2NlcHRlZCBmcm9tIGNvbm5lY3Rpb25zIG5vdAotICAgIHN1ZmZpY2llbnRseSBwcml2aWxlZ2VkIHRvIHVzZSBpdCBzdWNjZXNzZnVsbHkKLSAgwrcgRm9ybWFsbHkgZGVwcmVjYXRlIGVhdmVzZHJvcHBpbmcgaW4gZmF2b3VyIG9mIEJlY29tZU1vbml0b3IKLSAgKGZkLm8gIzk5ODI1LCAjMTAwNjg2LCAjMTAwNzk1LCAjMTAxMjU2LCAjMTAxMjU3LCAjMTAxNTY3OwotICBTaW1vbiBNY1ZpdHRpZSwgVG9tIEd1bmRlcnNlbikKLQot4oCiIEltcGxlbWVudCB0aGUgUHJvcGVydGllcyBhbmQgUGVlciBpbnRlcmZhY2VzIGluIGRidXMtZGFlbW9uCi0gIChmZC5vICMxMDEyNTcsIFNpbW9uIE1jVml0dGllKQotCi3igKIgTmV3IGZ1bmN0aW9uIGRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkKCkgaXMgbGlrZQotICBkYnVzX2dldF9sb2NhbF9tYWNoaW5lX2lkKCksIGJ1dCByZXR1cm5pbmcgYSBEQnVzRXJyb3IuIE90aGVyIGNvZGUKLSAgdGhhdCBuZWVkcyB0aGUgbWFjaGluZSBJRCB3aWxsIG5vdyByZXBvcnQgYSByZWNvdmVyYWJsZSBlcnJvciAoaW5zdGVhZAotICBvZiBsb2dnaW5nIHRvIHN0ZGVyciBhbmQgYWJvcnRpbmcpIGlmIG5vIG1hY2hpbmUgSUQgaXMgYXZhaWxhYmxlLgotICBHZW5lcmF0aW5nIGEgbWFjaGluZSBJRCBpcyBzdGlsbCBjb25zaWRlcmVkIHRvIGJlIGEgcmVxdWlyZWQgcGFydCBvZgotICBpbnN0YWxsaW5nIGRidXMgY29ycmVjdGx5LiAoZmQubyAjMTMxOTQsIFNpbW9uIE1jVml0dGllKQotCi3igKIgSW1wbGVtZW50IEdldENvbm5lY3Rpb25TRUxpbnV4U2VjdXJpdHlDb250ZXh0KCJvcmcuZnJlZWRlc2t0b3AuREJ1cyIpCi0gIChmZC5vICMxMDEzMTUsIExhdXJlbnQgQmlnb252aWxsZSkKLQot4oCiIEF2b2lkIGRlcHJlY2F0ZWQgQVBJIGNhbGxzIHdoZW4gdXNpbmcgU0VMaW51eAotICAoZmQubyAjMTAwOTEyLCBMYXVyZW50IEJpZ29udmlsbGUpCi0KLeKAoiBTd2l0Y2ggYSB0ZXN0IGZyb20gdGhlIGRlcHJlY2F0ZWQgZ190ZXN0X3RyYXBfZm9yaygpIHRvCi0gIGdfdGVzdF90cmFwX3N1YnByb2Nlc3MoKSwgZm9yIFdpbmRvd3Mgc3VwcG9ydCBhbmQgYmV0dGVyIHJvYnVzdG5lc3MKLSAgb24gVW5peCAoZmQubyAjMTAxMzYyLCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIE9uIHN5c3RlbWQgc3lzdGVtcywgaWYgJHtsb2NhbHN0YXRlZGlyfS9kYnVzL21hY2hpbmUtaWQgZG9lc24ndCBleGlzdCwKLSAgaW5zdHJ1Y3Qgc3lzdGVtZC10bXBmaWxlcyB0byBtYWtlIGl0IGEgc3ltYm9saWMgbGluayB0byAvZXRjL21hY2hpbmUtaWQuCi0gIFRoaXMgcHJldmVudHMgdGhlIHR3byBmaWxlcyBmcm9tIGdvaW5nIG91dCBvZiBzeW5jIG9uIHN0YXRlbGVzcyBvciBsaXZlCi0gIGltYWdlcyB3aXRob3V0IG5lZWRpbmcgdG8gcnVuIGRidXMtdXVpZGdlbiwgYW5kIHN1cHBvcnRzIG9sZGVyIEQtQnVzCi0gIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSByZWFkIC9ldGMvbWFjaGluZS1pZCB0aGVtc2VsdmVzLgotICAoZmQubyAjMTAxNTcwLCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEltcGxlbWVudCB1bml4OmRpcj0uLi4sIHdoaWNoIHJlc2VtYmxlcyB1bml4OnRtcGRpcj0uLi4gYnV0IG5ldmVyIHVzZXMKLSAgYWJzdHJhY3Qgc29ja2V0cy4gVGhpcyBpcyBwcmVmZXJhYmxlIHdoZW4gdXNlZCB3aXRoIExpbnV4IGNvbnRhaW5lcnMuCi0gIChmZC5vICMxMDE1NjcsIFNpbW9uIE1jVml0dGllKQotCi1GaXhlczoKLQot4oCiIEZpeCBhIHJlZmVyZW5jZSBsZWFrIHdoZW4gYmxvY2tpbmcgb24gYSBwZW5kaW5nIGNhbGwgb24gYSBjb25uZWN0aW9uCi0gIHRoYXQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIChmZC5vICMxMDE0ODEsIFNoaW4taWNoaSBNT1JJVEEpCi0KLeKAoiBEb24ndCBwdXQgdGltZXN0YW1wcyBpbiB0aGUgRG94eWdlbi1nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgb3IgaGFyZC1jb2RlIHRoZSBidWlsZCBkaXJlY3RvcnkgaW50byBidWlsZHMgd2l0aCBlbWJlZGRlZCB0ZXN0cywKLSAgZm9yIHJlcHJvZHVjaWJsZSBidWlsZHMgKGZkLm8gIzEwMDY5MiwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggc29tZSBpbnRlZ3JhdGlvbiB0ZXN0IGlzc3VlcyAoZmQubyAjMTAwNjg2LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEZpeCBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3RzIChmZC5vICMxMDEyNTcsIFNpbW9uIE1jVml0dGllKQotCi3igKIgSWYgd2Ugc29tZWhvdyBnZXQgYW4gYXV0b2xhdW5jaCBhZGRyZXNzIHdpdGggbXVsdGlwbGUgc2VtaWNvbG9uLXNlcGFyYXRlZAotICBjb21wb25lbnRzLCBhbmQgdGhleSBkb24ndCB3b3JrLCBkb24ndCBpbnZhbGlkbHkgInBpbGUgdXAiIGVycm9ycwotICAoZmQubyAjMTAxMjU3LCBTaW1vbiBNY1ZpdHRpZSkKLQotRG9jdW1lbnRhdGlvbjoKLQot4oCiIFVwZGF0ZSBnaXQgVVJJcyBpbiBIQUNLSU5HIGRvY3VtZW50IHRvIHN5bmMgdXAgd2l0aCBjZ2l0LmZyZWVkZXNrdG9wLm9yZwotICAoZmQubyAjMTAwNzE1LCBTaW1vbiBNY1ZpdHRpZSkKLQotRC1CdXMgMS4xMS4xMiAoMjAxNy0wNC0wNykKLT09Ci0KLVRoZSDigJxpdCdzIHNvbWV0aGluZyBodW1hbnMgZG/igJ0gcmVsZWFzZS4KLQotRW5oYW5jZW1lbnRzOgotCi3igKIgVGhlIHNlc3Npb24gZGJ1cy1kYWVtb24gbm93IHN1cHBvcnRzIHRyYW5zaWVudCAuc2VydmljZSBmaWxlcwotICBpbiAkWERHX1JVTlRJTUVfRElSL2RidXMtMS9zZXJ2aWNlcy4gVW5saWtlIHRoZSBvdGhlciBzdGFuZGFyZAotICBzZXJ2aWNlIGRpcmVjdG9yaWVzLCB0aGlzIGRpcmVjdG9yeSBpcyBub3QgbW9uaXRvcmVkIHdpdGggaW5vdGlmeQotICBvciBzaW1pbGFyLCBhbmQgdGhlIHNlcnZpY2UgZmlsZXMgbXVzdCBiZSBuYW1lZCBleGFjdGx5Ci0gICR7YnVzX25hbWV9LnNlcnZpY2UuIChmZC5vICM5OTgyNSwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBkYnVzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtcmVsb2NhdGlvbiB3aGVuIGJ1aWxkaW5nIHdpdGgKLSAgQXV0b3Rvb2xzLCBvciB3aXRoIC1EREJVU19SRUxPQ0FUQUJMRT1PTiB3aGVuIGJ1aWxkaW5nIHdpdGggY21ha2UsCi0gIHRvIG1ha2UgdGhlIHBrZy1jb25maWcgbWV0YWRhdGEgcmVsb2NhdGFibGUuIFRoaXMgaXMgdXNlZnVsIGZvcgotICBub24tc3RhbmRhcmQgcHJlZml4ZXMsIGFuZCBpbiBwYXJ0aWN1bGFyIGZvciBXaW5kb3dzIGluc3RhbGxhdGlvbnMuCi0gIEhvd2V2ZXIsIGl0IGlzIG5vdCByZWNvbW1lbmRlZCBmb3Igc3lzdGVtLXdpZGUgaW5zdGFsbGF0aW9ucyBpbnRvCi0gIC91c3IsIGJlY2F1c2UgaXQgaW50ZXJmZXJlcyB3aXRoIHBrZy1jb25maWcncyBhYmlsaXR5IHRvIGZpbHRlciBvdXQKLSAgY29tcGlsZXIgZGVmYXVsdCBsaW5rZXIgZGlyZWN0b3JpZXMuCi0KLSAgV2l0aCBBdXRvdG9vbHMsIHRoZSBkZWZhdWx0IGlzIC0tZW5hYmxlLXJlbG9jYXRpb24gd2hlbiBidWlsZGluZwotICBmb3IgV2luZG93cyBvciAtLWRpc2FibGUtcmVsb2NhdGlvbiBvdGhlcndpc2UuIFdpdGggQ01ha2UsIHRoZSBkZWZhdWx0Ci0gIGlzIC1EREJVU19SRUxPQ0FUQUJMRT1PTi4KLQotICAoZmQubyAjOTk3MjE7IFJhbGYgSGFiYWNrZXIsIFNpbW9uIE1jVml0dGllKQotCi3igKIgVXNlcnMgb2YgQ01ha2Ug4omlIDIuNiBjYW4gbm93IGxpbmsgdG8gbGliZGJ1cyB3aXRob3V0IHByb3ZpZGluZyB0aGVpcgotICBvd24gRmluZERCdXMuY21ha2UgbWFjcm9zLCB3aGV0aGVyIGRidXMgd2FzIGNvbXBpbGVkIHdpdGggQXV0b3Rvb2xzCi0gIG9yIHdpdGggQ01ha2UuIFNlZSB0aGUgZW5kIG9mIFJFQURNRS5jbWFrZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgKGZkLm8gIzk5NzIxOyBSYWxmIEhhYmFja2VyLCBTaW1vbiBNY1ZpdHRpZSkKLQotRml4ZXM6Ci0KLeKAoiBBbHdheXMgcmVhZCBzZXJ2aWNlIGZpbGUgZGlyZWN0b3JpZXMgaW4gdGhlIGludGVuZGVkIG9yZGVyCi0gIChmZC5vICM5OTgyNSwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBXaGVuIHRlc3RzIGFyZSBza2lwcGVkLCBkb24ndCB0cnkgdG8ga2lsbCBub25leGlzdGVudCBwcm9jZXNzIDAKLSAgKGZkLm8gIzk5ODI1LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEF2b2lkIHZhbGdyaW5kIGZhbHNlIHBvc2l0aXZlcyAoZmQubyAjODg4MDgsIFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIEZpeCBhIGhhcm1sZXNzIHJlYWQgb3ZlcmZsb3cgYW5kIHNvbWUgbWVtb3J5IGxlYWtzIGluIGEgdW5pdCB0ZXN0Ci0gIChmZC5vICMxMDA1NjgsIFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIEZpeCBzb21lIHR5cG9zIGluIHRlc3QgY29kZQotICAoZmQubyAjOTk5OTksIENvdmVyaXR5ICMxNDE4NzYsICMxNDE4Nzc7IFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIENsYXJpZnkgdGhlIHJvbGVzIG9mIC9ldGMvZGJ1cy0xL3MqLmQgYW5kIC91c3Ivc2hhcmUvZGJ1cy0xL3MqLmQKLSAgaW4gZG9jdW1lbnRhdGlvbiAoZmQubyAjOTk5MDEsIFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIEZpeCBhbmQgZW5hYmxlIGNvbXBpbGVyIHdhcm5pbmdzIHJlbGF0ZWQgdG8gLVdzd2l0Y2gKLSAgKGZkLm8gIzk4MTkxOyBUaG9tYXMgWmltbWVybWFubiwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggd3JpdGluZyBvZmYgdGhlIGVuZCBvZiBhIGZkX3NldCB3aGVuIHRlc3Rpbmcgd2l0aCB2YWxncmluZAotICAoZmQubyAjOTk4MzksIFBoaWxpcCBXaXRobmFsbCkKLQotRC1CdXMgMS4xMS4xMCAoMjAxNy0wMi0xNikKLT09Ci0KLVRoZSDigJxwdXJwbGUgaGFpciBnaXZlcyB5b3UgdGVsZWtpbmVzaXM/4oCdIHJlbGVhc2UuCi0KLURlcGVuZGVuY2llczoKLQot4oCiIEFwcEFybW9yIHN1cHBvcnQgcmVxdWlyZXMgYXQgbGVhc3QgbGliYXBwYXJtb3IgMi44Ljk1LCByZWR1Y2VkCi0gIGZyb20gMi4xMCBpbiBwcmV2aW91cyB2ZXJzaW9ucy4gT25lIHRlc3QgcmVxdWlyZXMgMi4xMCBhbmQgaXMKLSAgc2tpcHBlZCBpZiBidWlsZGluZyB3aXRoIGFuIG9sZGVyIHZlcnNpb24uCi0KLUVuaGFuY2VtZW50czoKLQot4oCiIERvIHRoZSBUcmF2aXMtQ0kgYnVpbGQgaW4gRG9ja2VyIGNvbnRhaW5lcnMgZm9yIFVidW50dSBMVFMsIERlYmlhbgotICBzdGFibGUgYW5kIERlYmlhbiB0ZXN0aW5nIGluIGFkZGl0aW9uIHRvIHRoZSBvbGRlciBVYnVudHUgdGhhdCBpcwotICB0aGUgZGVmYXVsdCAoZmQubyAjOTg4ODksIFNpbW9uIE1jVml0dGllKQotCi3igKIgQXZvaWQgc29tZSBkZXByZWNhdGVkIENNYWtlIGZ1bmN0aW9ucyAoZmQubyAjOTk1ODYsIFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBTaWxlbmNlIG1hbnkgLVdzd2l0Y2gtZW51bSBhbmQgLVdzd2l0Y2gtZGVmYXVsdCB3YXJuaW5ncwotICAoZmQubyAjOTgxOTE7IFRob21hcyBaaW1tZXJtYW5uLCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEluc3RhbGwgYSBzeXN1c2Vycy5kIHNuaXBwZXQgc28gYGRidXMtZGFlbW9uIC0tc3lzdGVtYCBjYW4gYmUgdXNlZAotICB3aXRoIGFuIHVucG9wdWxhdGVkIC9ldGMgKGZkLm8gIzk5MTYyLCBMZW5uYXJ0IFBvZXR0ZXJpbmcpCi0KLeKAoiBJbnN0YWxsIHBrZy1jb25maWcgbWV0YWRhdGEgb24gVW5peCBldmVuIGlmIGJ1aWxkaW5nIHdpdGggQ01ha2UKLSAgKGZkLm8gIzk5NzUyLCBSYWxmIEhhYmFja2VyKQotCi3igKIgRXhjbHVkZSBhdXRoIG1lY2hhbmlzbXMgZnJvbSBSRUpFQ1RFRCBtZXNzYWdlIGlmIHRoZXkgYXJlIHN1cHBvcnRlZAotICBpbiB0aGUgY29kZSBidXQgYnV0IGNvbmZpZ3VyZWQgdG8gYmUgZGlzYWxsb3dlZCAoZmQubyAjOTk2MjEsCi0gIFJhbGYgSGFiYWNrZXIpCi0KLUZpeGVzOgotCi3igKIgUHJldmVudCBzeW1saW5rIGF0dGFja3MgaW4gdGhlIG5vbmNlLXRjcCB0cmFuc3BvcnQgb24gVW5peCB0aGF0IGNvdWxkCi0gIGFsbG93IGFuIGF0dGFja2VyIHRvIG92ZXJ3cml0ZSBhIGZpbGUgbmFtZWQgIm5vbmNlIiwgaW4gYSBkaXJlY3RvcnkKLSAgdGhhdCB0aGUgdXNlciBydW5uaW5nIGRidXMtZGFlbW9uIGNhbiB3cml0ZSwgd2l0aCBhIHJhbmRvbSB2YWx1ZQotICBrbm93biBvbmx5IHRvIHRoZSB1c2VyIHJ1bm5pbmcgZGJ1cy1kYWVtb24uIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUKLSAgZXhwbG9pdGFibGUgaW4gcHJhY3RpY2UsIHBhcnRpY3VsYXJseSBzaW5jZSB0aGUgbm9uY2UtdGNwIHRyYW5zcG9ydAotICBpcyByZWFsbHkgb25seSB1c2VmdWwgb24gV2luZG93cy4KLQotICBPbiBVbml4IHN5c3RlbXMgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHVzaW5nIG9ubHkgdGhlIHVuaXg6IGFuZCBzeXN0ZW1kOgotICB0cmFuc3BvcnRzLCB0b2dldGhlciB3aXRoIEVYVEVSTkFMIGF1dGhlbnRpY2F0aW9uLiBUaGVzZSBhcmUgdGhlIG9ubHkKLSAgdHJhbnNwb3J0cyBhbmQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0KLSAgKGZkLm8gIzk5ODI4LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEF2b2lkIHN5bWxpbmsgYXR0YWNrcyBpbiB0aGUgImVtYmVkZGVkIHRlc3RzIiwgd2hpY2ggYXJlIG5vdCBlbmFibGVkCi0gIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBuZXZlciBiZSBlbmFibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIGRidXMuCi0gIChmZC5vICM5OTgyOCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggdGhlIGltcGxlbWVudGF0aW9uIG9mIHJlLWVuYWJsaW5nIGEgdGltZW91dCBzbyB0aGF0IGl0cwotICBjb3VudGRvd24gaXMgcmVzdGFydGVkIGFzIGludGVuZGVkLCBpbnN0ZWFkIG9mIGNvbnRpbnVhbGx5Ci0gIGRlY3JlYXNpbmcuIChmZC5vICM5NTYxOTsgTWljaGFsIEtvdXRuw70sIFNpbW9uIE1jVml0dGllKQotCi3igKIgV2hlbiByZWNlaXZpbmcgYSBtZXNzYWdlIHdpdGggZmlsZSBkZXNjcmlwdG9ycywgZG8gbm90IHN0YXJ0IHJlYWRpbmcKLSAgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBtZXNzYWdlLCBzbyB0aGF0IG9ubHkgb25lIHN1Y2ggbWVzc2FnZQotICBpcyBwcm9jZXNzZWQgYXQgYSB0aW1lLiBJbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBmaXggZm9yICM5NTYxOQotICB0aGlzIG1lYW5zIHRoYXQgcHJvY2Vzc2VzIHNlbmRpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzLCBzdWNoIGFzCi0gIHN5c3RlbWQtbG9naW5kIG9uIGEgc3lzdGVtIHRoYXQgcmVjZWl2ZXMgdmVyeSByYXBpZCBzc2ggY29ubmVjdGlvbnMsCi0gIGFyZSBub3QgdHJlYXRlZCBhcyBhYnVzaXZlIGFuZCBraWNrZWQgb2ZmIHRoZSBidXMuIFJldmVydCB0aGUgcHJldmlvdXMKLSAgd29ya2Fyb3VuZCB0aGF0IHNwZWNpYWwtY2FzZWQgdWlkIDAuCi0gIChmZC5vICM5NTI2MywgTFAjMTU5MTQxMTsgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBEbyBub3QgcmVxdWlyZSBUTVBESVIsIFRFTVAgb3IgVE1QIHRvIGJlIHNldCB3aGVuIGNyb3NzLWNvbXBpbGluZwotICBmb3IgV2luZG93cyB3aXRoIENNYWtlIChmZC5vICM5OTU4NiwgUmFsZiBIYWJhY2tlcikKLQot4oCiIERvIG5vdCBzZXQgVW5peC1zcGVjaWZpYyB2YXJpYWJsZXMgd2hlbiB0YXJnZXRpbmcgV2luZG93cwotICAoZmQubyAjOTk1ODYsIFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBJbnN0YWxsIFVuaXggZXhlY3V0YWJsZXMgdG8gJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluIGFzIGludGVuZGVkLAotICBub3QgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliIChmZC5vICM5OTc1MiwgUmFsZiBIYWJhY2tlcikKLQot4oCiIFVzZSByZWxhdGl2ZSBpbnN0YWxsIGxvY2F0aW9ucyBpbiBDTWFrZSBvbiBVbml4IHRvIHJlc3BlY3QgREVTVERJUiwKLSAgYW5kIHVzZSBHTlUtc3R5bGUgaW5zdGFsbCBsYXlvdXQgKGZkLm8gIzk5NzIxLCAjOTk3NTI7IFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBJbnN0YWxsIGRidXMtYXJjaC1kZXBzLmggY29ycmVjdGx5IHdoZW4gdXNpbmcgQ01ha2UKLSAgKGZkLm8gIzk5NTg2LCAjOTk3MjE7IFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBJbXByb3ZlIGFyZ3VtZW50IHZhbGlkYXRpb24gZm9yIGBkYnVzLXRlc3QtdG9vbCBzcGFtYAotICAoZmZkLm8gIzk5NjkzLCBDb3Zlcml0eSAjNTQ3NTk7IFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIERvbid0IHNoaWZ0IGJ5IGEgbmVnYXRpdmUgaW50ZWdlciBpZiBhIGhhc2ggdGFibGUgYmVjb21lcyBtb25zdHJvdXNseQotICBsYXJnZSAoZmQubyAjOTk2NDEsIENvdmVyaXR5ICM1NDY4MjsgUGhpbGlwIFdpdGhuYWxsKQotCi3igKIgRG9uJ3QgbGVhayBMU00gbGFiZWwgaWYgZGJ1cy1kYWVtb24gcnVucyBvdXQgb2YgbWVtb3J5IHdoZW4gZGVhbGluZyB3aXRoCi0gIGEgbmV3IGNvbm5lY3Rpb24gKGZkLm8gIzk5NjEyLCBDb3Zlcml0eSAjMTQxMDU4OyBQaGlsaXAgV2l0aG5hbGwpCi0KLeKAoiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgTlVMTCBjaGVjawotICAoZmQubyAjOTk2NDIsIENvdmVyaXR5ICMxNDEwNjI7IFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIEltcHJvdmUgZXJyb3IgaGFuZGxpbmcgaW4gdW5pdCB0ZXN0cyBhbmQgZGJ1cy1zZW5kCi0gIChmZC5vICM5OTY0MywgIzk5Njk0LCAjOTk3MTIsICM5OTcyMiwgIzk5NzIzLCAjOTk3MjQsICM5OTc1OCwKLSAgIzk5NzU5LCAjOTk3OTMsIENvdmVyaXR5ICM1NDY4OCwgIzU0NjkyLCAjNTQ2OTMsICM1NDY5NywgIzU0NzAxLAotICAjNTQ3MTAsICM1NDcxMSwgIzU0NzE0LCAjNTQ3MTUsICM1NDcxOCwgIzU0NzIxLCAjNTQ3MjQsICM1NDcyNiwKLSAgIzU0NzMwLCAjNTQ3NDAsICM1NDgyMiwgIzU0ODIzLCAjNTQ4MjQsICM1NDgyNTsgUGhpbGlwIFdpdGhuYWxsKQotCi3igKIgRG8gbm90IHByaW50IHZlcmJvc2UgbWVzc2FnZXMnIHRpbWVzdGFtcHMgdG8gc3RkZXJyIGlmIHRoZSBhY3R1YWwgbWVzc2FnZQotICBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIHRoZSBXaW5kb3dzIGRlYnVnIHBvcnQgKGZkLm8gIzk5NzQ5LCBSYWxmIEhhYmFja2VyKQotCi1ELUJ1cyAxLjExLjggKDIwMTYtMTEtMjgpCi09PQotCi1UaGUg4oCccGFuaWNzIGluIHRoZSBmYWNlIG9mIGJyZWFrZmFzdCBmb29kc+KAnSByZWxlYXNlLgotCi1CdWlsZC10aW1lIGNvbmZpZ3VyYXRpb246Ci0KLeKAoiBUaGUgbmV3IC0tZW5hYmxlLWRlYnVnIGNvbmZpZ3VyZSBvcHRpb24gcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8KLSAgZW5hYmxlIGRlYnVnIHN5bWJvbHMsIGRpc2FibGUgb3B0aW1pemF0aW9uIGFuZC9vciBlbmFibGUgcHJvZmlsaW5nLgotCi3igKIgVGhlIC0tZW5hYmxlLWNvbXBpbGUtd2FybmluZ3MgY29uZmlndXJlIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sCi0gIGNvbXBpbGVyIHdhcm5pbmdzLgotCi3igKIgVGhlIC0tZGlzYWJsZS1jb21waWxlci1vcHRpbWlzYXRpb25zIGNvbmZpZ3VyZSBvcHRpb24gaXMgbm8gbG9uZ2VyCi0gIHN1cHBvcnRlZC4gVXNlIC0tZW5hYmxlLWRlYnVnPXllcyBvciBDRkxBR1M9LU8wIGluc3RlYWQuCi0KLUVuaGFuY2VtZW50czoKLQot4oCiIEQtQnVzIFNwZWNpZmljYXRpb24gdmVyc2lvbiAwLjMwCi0gIMK3IERlZmluZSB0aGUgamFyZ29uIHRlcm0gImFjdGl2YXRpb24iIG1vcmUgY2xlYXJseQotICDCtyBEZWZpbmUgdGhlIGphcmdvbiB0ZXJtICJhdXRvLXN0YXJ0aW5nIiwgd2hpY2ggaXMgb25lIGZvcm0gb2YgYWN0aXZhdGlvbgotICDCtyBEb2N1bWVudCB0aGUgb3B0aW9uYWwgU3lzdGVtZFNlcnZpY2Uga2V5IGluIHNlcnZpY2UgZmlsZXMKLSAgwrcgVXNlIHZlcnNpb25lZCBpbnRlcmZhY2UgYW5kIGJ1cyBuYW1lcyBpbiBtb3N0IGV4YW1wbGVzCi0gIMK3IENsYXJpZnkgaW50ZW5kZWQgYmVoYXZpb3VyIG9mIFByb3BlcnRpZXMuR2V0QWxsCi0gIChmZC5vICMzNjE5MCwgZmQubyAjOTg2NzE7IFBoaWxpcCBXaXRobmFsbCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBGaXggYW5kIGVuYWJsZSBhIGxvdCBvZiBjb21waWxlciB3YXJuaW5ncyB0byBpbXByb3ZlIGZ1dHVyZSBjb2RlCi0gIHF1YWxpdHkuIFRoaXMgbWlnaHQgaW5jaWRlbnRhbGx5IGFsc28gZml4IHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgYWNjZXNzZXMgb24gT1MgWC4KLSAgwrcgSW4gcGFydGljdWxhciwgcHJpbnRmLXN0eWxlIGZ1bmN0aW9ucyBpbiB0aGUgbGliZGJ1cyBBUEkgYXJlIG5vdyBhbm5vdGF0ZWQKLSAgICB3aXRoIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgKiwgKikpKSB3aGVuIGNvbXBpbGluZyB3aXRoCi0gICAgZ2NjIG9yIGNsYW5nLiBUaGlzIG1pZ2h0IG1ha2UgcHJpbnRmIGJ1Z3MgaW4gb3RoZXIgc29mdHdhcmUgdmlzaWJsZQotICAgIGF0IGNvbXBpbGUgdGltZS4KLSAgKGZkLm8gIzk3MzU3LCBmZC5vICM5ODE5MiwgZmQubyAjOTgxOTUsIGZkLm8gIzk4NjU4OwotICBUaG9tYXMgWmltbWVybWFubiwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBXaGVuIHJ1bm5pbmcgd2l0aCBBcHBBcm1vciBtZWRpYXRpb24gKGZvciBleGFtcGxlIHVzaW5nIFVidW50dSdzIHBhdGNoZWQKLSAgTGludXgga2VybmVsKSwgY2xpZW50cyBjYW4gbm8gbG9uZ2VyIGF1dG8tc3RhcnQgc2VydmljZXMgdW5sZXNzIHRoZXkgd291bGQKLSAgaGF2ZSBiZWVuIGFibGUgdG8gc2VuZCB0aGUgYXV0by1zdGFydGluZyBtZXNzYWdlIHRvIHRoZSBzZXJ2aWNlIGFmdGVyIGl0Ci0gIHN0YXJ0cy4gU3RhcnRTZXJ2aWNlQnlOYW1lKCkgaXMgdW5hZmZlY3RlZCwgYW5kIGNvbnRpbnVlcyB0byBiZSBhbGxvd2VkIGJ5Ci0gIGRlZmF1bHQgaW4gQXBwQXJtb3IncyA8YWJzdHJhY3Rpb25zL2RidXMtc3RyaWN0PiBhbmQKLSAgPGFic3RyYWN0aW9ucy9kYnVzLXNlc3Npb24tc3RyaWN0Pi4gKGZkLm8gIzk4NjY2LCBTaW1vbiBNY1ZpdHRpZSkKLQotRml4ZXM6Ci0KLeKAoiBXb3JrIGFyb3VuZCBhbiB1bmRlc2lyZWQgZWZmZWN0IG9mIHRoZSBmaXggZm9yIENWRS0yMDE0LTM2MzcKLSAgKGZkLm8gIzgwNTU5KSwgaW4gd2hpY2ggcHJvY2Vzc2VzIHRoYXQgZnJlcXVlbnRseSBzZW5kIGZkcywgc3VjaCBhcwotICBsb2dpbmQgZHVyaW5nIGEgZmxvb2Qgb2YgbmV3IFBBTSBzZXNzaW9ucywgY2FuIGdldCBkaXNjb25uZWN0ZWQgZm9yCi0gIGNvbnRpbnVvdXNseSBoYXZpbmcgYXQgbGVhc3Qgb25lIGZkICJpbiBmbGlnaHQiIGZvciB0b28gbG9uZzsKLSAgZGJ1cy1kYWVtb24gaW50ZXJwcmV0cyB0aGF0IGFzIGEgcG90ZW50aWFsIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFjay4KLSAgVGhlIHdvcmthcm91bmQgaXMgdG8gZGlzYWJsZSB0aGF0IGNoZWNrIGZvciB1aWQgMCBwcm9jZXNzIHN1Y2ggYXMKLSAgbG9naW5kLCB3aXRoIGEgbWVzc2FnZSBpbiB0aGUgc3lzdGVtIGxvZy4gVGhlIGJ1ZyByZW1haW5zIG9wZW4gd2hpbGUKLSAgd2UgbG9vayBmb3IgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24uCi0gIChmZC5vICM5NTI2MywgTFAjMTU5MTQxMTsgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBEb24ndCBydW4gdGhlIHRlc3QgdGVzdC1kYnVzLWxhdW5jaC14MTEuc2ggaWYgWDExIGF1dG9sYXVuY2hpbmcKLSAgd2FzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gVGhhdCB0ZXN0IGlzIG5vdCBleHBlY3RlZCB0byB3b3JrCi0gIGluIHRoYXQgY29uZmlndXJhdGlvbi4gKGZkLm8gIzk4NjY1LCBTaW1vbiBNY1ZpdHRpZSkKLQotRC1CdXMgMS4xMS42ICgyMDE2LTEwLTEwKQotPT0KLQotVGhlIOKAnGRhcmtseSB3aGltc2ljYWzigJ0gcmVsZWFzZS4KK1RoZSDigJxub3QgZXhjZXNzaXZlbHkgaW5ob3NwaXRhYmxl4oCdIHJlbGVhc2UuCiAKIFNlY3VyaXR5IGZpeGVzOgogCkBAIC05ODYsMjkgKzE5LDYgQEAKIAogICAoZmQubyAjOTgxNTcsIFNpbW9uIE1jVml0dGllKQogCi1FbmhhbmNlbWVudHM6Ci0KLeKAoiBELUJ1cyBTcGVjaWZpY2F0aW9uIHZlcnNpb24gMC4yOQotICDCtyBSZWNvbW1lbmQgbm90IHVzaW5nICcvJyBmb3Igb2JqZWN0IHBhdGhzIChmZC5vICMzNzA5NSwgUGhpbGlwIFdpdGhuYWxsKQotICDCtyBBbGxvdyA8YW5ub3RhdGlvbj4gaW4gPGFyZz4gZWxlbWVudHMgKGZkLm8gIzg2MTYyLCBQaGlsaXAgV2l0aG5hbGwpCi0KLeKAoiBMb2cgdG8gc3lzbG9nIHdoZW4gd2UgZXhjZWVkIHZhcmlvdXMgYW50aS1Eb1MgbGltaXRzLCBhbmQgYWRkIHRlc3QKLSAgY292ZXJhZ2UgZm9yIHRoZW0gKGZkLm8gIzg2NDQyLCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEltcHJvdmUgc3lzbG9nIGhhbmRsaW5nIHNvIHRoYXQgX2RidXNfd2FybigpIGFuZCBzaW1pbGFyIHdhcm5pbmdzCi0gIGdvIHRvIHN5c2xvZywgYWRkIGRidXMtZGFlbW9uIC0tc3lzbG9nfC0tbm9zeXNsb2d8LS1zeXNsb2ctb25seSBvcHRpb25zLAotICBhbmQgbG9nIHRvIHN5c2xvZyAoaW5zdGVhZCBvZiAvZGV2L251bGwpIHdoZW4gZGJ1cy1kYWVtb24gaXMgc3RhcnRlZCBieQotICBkYnVzLWxhdW5jaC4gKGZkLm8gIzk3MDA5LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIEluc3RhbGwgaW50cm9zcGVjdC5kdGQgYW5kIGJ1c2NvbmZpZy5kdGQgdG8gJHtkYXRhZGlyfS94bWwvZGJ1cy0xCi0gIChmZC5vICM4OTAxMSwgUGhpbGlwIFdpdGhuYWxsKQotCi3igKIgV2hlbiBsb2dnaW5nIG1lc3NhZ2VzIGFib3V0IHNlcnZpY2UgYWN0aXZhdGlvbiwgbWVudGlvbiB3aGljaCBwZWVyCi0gIHJlcXVlc3RlZCB0aGUgYWN0aXZhdGlvbiAoZmQubyAjNjgyMTIsIFBoaWxpcCBXaXRobmFsbCkKLQot4oCiIE9uIExpbnV4LCBtZW50aW9uIHRoZSBMU00gbGFiZWwgKGlmIGF2YWlsYWJsZSkgd2hlbmV2ZXIgd2UgcHJpbnQKLSAgZGVidWcgaW5mb3JtYXRpb24gYWJvdXQgYSBwZWVyIChmZC5vICM2ODIxMiwgUGhpbGlwIFdpdGhuYWxsKQotCiBPdGhlciBmaXhlczoKIAog4oCiIEhhcmRlbiBkYnVzLWRhZW1vbiBhZ2FpbnN0IG1hbGljaW91cyBvciBpbmNvcnJlY3QgQWN0aXZhdGlvbkZhaWx1cmUKQEAgLTEwMTksNjkgKzI5LDI4IEBACiDigKIgQXZvaWQgdW5kZWZpbmVkIGJlaGF2aW91ciB3aGVuIHNldHRpbmcgcmVwbHkgc2VyaWFsIG51bWJlciB3aXRob3V0IGdvaW5nCiAgIHZpYSB1bmlvbiBEQnVzQmFzaWNWYWx1ZSAoZmQubyAjOTgwMzUsIE1hcmMgTXV0eikKIAot4oCiIEZpeCBDTWFrZSBidWlsZCBmb3IgVW5peCBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgaGF2ZSAtbHJ0LCBzdWNoIGFzIEFuZHJvaWQsCi0gIG9yIHRoYXQgZG8gbmVlZCAtbHNvY2tldCwgc3VjaCBhcyBRTlggKGZkLm8gIzk0MDk2LCBSYWxmIEhhYmFja2VyKQotCiDigKIgYXV0b2dlbi5zaDogZmFpbCBjbGVhbmx5IGlmIGF1dG9jb25mIGZhaWxzIChTaW1vbiBNY1ZpdHRpZSkKIAotRC1CdXMgMS4xMS40ICgyMDE2LTA4LTE1KQorRC1CdXMgMS4xMC4xMCAoMjAxNi0wOC0xNSkKID09CiAKLVRoZSDigJxjb3BwZXIgcGlja2F4ZeKAnSByZWxlYXNlLgotCi1EZXBlbmRlbmNpZXM6Ci0KLeKAoiBCdWlsZGluZyBmcm9tIGdpdCAoYnV0IG5vdCBmcm9tIHRhcmJhbGxzKSBub3cgcmVxdWlyZXMKLSAgbWFjcm9zIGZyb20gdGhlIEdOVSBBdXRvY29uZiBBcmNoaXZlLCBmb3IgZXhhbXBsZSB0aGUgYXV0b2NvbmYtYXJjaGl2ZQotICBwYWNrYWdlIGluIERlYmlhbiBvciBGZWRvcmEgZGVyaXZhdGl2ZXMuCi0KLUJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbjoKLQot4oCiIFRoZSBvcHRpb24gdG8gZW5hYmxlIGNvdmVyYWdlIGluc3RydW1lbnRhdGlvbiBoYXMgY2hhbmdlZCBmcm9tCi0gIC0tZW5hYmxlLWNvbXBpbGVyLWNvdmVyYWdlIHRvIC0tZW5hYmxlLWNvZGUtY292ZXJhZ2UuCi0KLUVuaGFuY2VtZW50czoKLQot4oCiIEQtQnVzIFNwZWNpZmljYXRpb24gdmVyc2lvbiAwLjI4Ci0gIMK3IENsYXJpZnkgc29tZSBkZXRhaWxzIG9mIHNlcmlhbGl6YXRpb24gKGZkLm8gIzkzMzgyLCBQaGlsaXAgV2l0aG5hbGwpCi0KLeKAoiBJbmNyZWFzZSBsaXN0ZW4oKSBiYWNrbG9nIG9mIEFGX1VOSVggc29ja2V0cyB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSwKLSAgbWluaW1pemluZyBmYWlsZWQgY29ubmVjdGlvbnMgdW5kZXIgaGVhdnkgbG9hZAotICAoZmQubyAjOTUyNjQsIExlbm5hcnQgUG9ldHRlcmluZykKLQot4oCiIEFkZCBhIG5ldyBkYnVzLWxhdW5jaCAtLWV4aXQtd2l0aC14MTEgb3B0aW9uIChmZC5vICMzOTE5NywgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBVc2UgdGhlIHNhbWUgcmVncmVzc2lvbiB0ZXN0cyBmb3Igc3VicHJvY2VzcyBzdGFydGluZyBvbiBVbml4IGFuZCBXaW5kb3dzCi0gIChmZC5vICM5NTE5MSwgUmFsZiBIYWJhY2tlcikKLQot4oCiIFByaW50IHRpbWVzdGFtcHMgYW5kIHRocmVhZCBJRHMgaW4gdmVyYm9zZSBtZXNzYWdlcwotICAoZmQubyAjOTUxOTEsIFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBPbiBVbml4LCB1bmlmeSB0aGUgdmFyaW91cyBwbGFjZXMgdGhhdCByZW9wZW4gc3RkaW4sIHN0ZG91dCBhbmQvb3Igc3RkZXJyCi0gIHBvaW50aW5nIHRvIC9kZXYvbnVsbCAoZmQubyAjOTcwMDgsIFNpbW9uIE1jVml0dGllKQotCi3igKIgVXNlIEFYX0NPREVfQ09WRVJBR0UgaW5zdGVhZCBvZiBvdXIgb3duIENPTVBJTEVSX0NPVkVSQUdFCi0gIChmZC5vICM4ODkyMiwgVGhvbWFzIFppbW1lcm1hbm4pCitUaGUg4oCcdHVuZ3N0ZW4gZG9vcuKAnSByZWxlYXNlLgogCiBGaXhlczoKIAot4oCiIE9uIFdpbmRvd3MsIGZpeCBhIG1lbW9yeSBsZWFrIGluIHJlcGxhY2luZyB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeAotICAoZmQubyAjOTUxOTEsIFJhbGYgSGFiYWNrZXIpCi0KIOKAoiBPbiBMaW51eCwgd2hlbiBkYnVzLWRhZW1vbiBpcyBydW4gd2l0aCByZWR1Y2VkIHN1c2NlcHRpYmlsaXR5IHRvIHRoZQogICBPT00ga2lsbGVyICh0eXBpY2FsbHkgdmlhIHN5c3RlbWQpLCBkbyBub3QgbGV0IGNoaWxkIHByb2Nlc3NlcyBpbmhlcml0CiAgIHRoYXQgc2V0dGluZyAoZmQubyAjMzI4NTE7IEtpbW1vIEjDpG3DpGzDpGluZW4sIFdhTHlvbmcgQ2hvKQogCi3igKIgT24gVW5peCwgbWFrZSBkYnVzLWxhdW5jaCBhbmQgZGJ1cy1kYWVtb24gLS1mb3JrIHdvcmsgYXMgaW50ZW5kZWQKLSAgZXZlbiBpZiBhIHBhcmVudCBwcm9jZXNzIGluY29ycmVjdGx5IHN0YXJ0cyB0aGVtIHdpdGggc3RkaW4sIHN0ZG91dAotICBhbmQvb3Igc3RkZXJyIGNsb3NlZCAoZmQubyAjOTcwMDgsIFNpbW9uIE1jVml0dGllKQotCiDigKIgT3V0cHV0IHZhbGlkIHNoZWxsIHN5bnRheCBpbiB+Ly5kYnVzL3Nlc3Npb24tYnVzLyBpZiB0aGUgYnVzIGFkZHJlc3MKICAgY29udGFpbnMgYSBzZW1pY29sb24gKGZkLm8gIzk0NzQ2LCBUaGlhZ28gTWFjaWVpcmEpCiAKIOKAoiBGaXggbWVtb3J5IGxlYWtzIGFuZCB0aHJlYWQgc2FmZXR5IGluIHN1YnByb2Nlc3Mgc3RhcnRpbmcgb24gV2luZG93cwogICAoZmQubyAjOTUxOTEsIFJhbGYgSGFiYWNrZXIpCiAKK+KAoiBEbyBub3QgcmVxdWlyZSBzeXN0ZW1kIHRvIGhhdmUgYSBzZXJ2aWNlIGZpbGUgaWYgdXNpbmcgaXQgZm9yIGFjdGl2YXRpb24KKyAgKGZkLm8gIzkzMTk0OyBTaW1vbiBNY1ZpdHRpZTsgYmFja3BvcnQgZnJvbSAxLjExLjApCisKIOKAoiBTdG9wIHRlc3QtZGJ1cy1kYWVtb24gaW5jb3JyZWN0bHkgZmFpbGluZyBvbiBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QKICAgZGlzY292ZXIgdGhlIHByb2Nlc3MgSUQgb2YgY2xpZW50cyAoZmQubyAjOTY2NTMsINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIpCiAKQEAgLTEwOTAsMzEgKzU5LDMwIEBACiAKIOKAoiBFeHBsaWNpdGx5IGNoZWNrIGZvciBzdGRpbnQuaCAoSW9hbi1BZHJpYW4gUmF0aXUpCiAKLeKAoiBJbiB0ZXN0cywgYWRkIGFuIGludmFsaWQgREJ1c0F1dGhTdGF0ZSB0byBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3VyCi0gIGluIHNvbWUgdGVzdCBjYXNlcyAoZmQubyAjOTM5MDksIE5pY2sgTGV3eWNreSkKLQot4oCiIEFkZCBhc3NlcnRpb25zIHRvIHJlYXNzdXJlIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wKLSAgKGZkLm8gIzkzMjEwLCBEZWVwaWthIEFnZ2Fyd2FsKQotCi3igKIgQmUgZXhwbGljaXQgYWJvdXQgZW51bSBjb21wYXJpc29uIHdoZW4gbG9hZGluZyBYTUwKLSAgKGZkLm8gIzkzMjA1LCBEZWVwaWthIEFnZ2Fyd2FsKQotCiDigKIgdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQ6IHByb2R1Y2UgYmV0dGVyIGRpYWdub3N0aWNzIG9uIGVycm9yCiAgIChmZC5vICM5NjY1MywgU2ltb24gTWNWaXR0aWUpCiAKLeKAoiBBdm9pZCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggZ2NjIDYKK+KAoiBEb24ndCBmYWlsIHRoZSBidWlsZCB3aXRoIGFuIHVudXNlZCBjb25zdCB2YXJpYWJsZSB3YXJuaW5nIHVuZGVyIGdjYyA2CiAgIChmZC5vICM5NzI4MjsgVGhvbWFzIFppbW1lcm1hbm4sIFNpbW9uIE1jVml0dGllKQogCi3igKIgT24gVW5peCB3aGVuIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gbG9nLCByZXBvcnQgYXMgImRidXMtZGFlbW9uIiwKLSAgbm90IGFzICJkYnVzIiAoZmQubyAjOTcwMDksIFNpbW9uIE1jVml0dGllKQor4oCiIE1lcmdlIGRidXMtMS4xMC1jaSBicmFuY2gsIGNvbnRhaW5pbmcgYmFja3BvcnRzIGZyb20gMS4xMS4wIGluIGJ1aWxkL3Rlc3QKKyAgY29kZSB0byBzdXBwb3J0IGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKGZkLm8gIzkzMTk0LCBTaW1vbiBNY1ZpdHRpZSkKIAot4oCiIER1cmluZyB1bml0IHRlc3RzLCByZWR1Y2UgdGhlIGFtb3VudCB3ZSB3cml0ZSB0byB0aGUgc3lzdGVtIGxvZwotICAoZmQubyAjOTcwMDksIFNpbW9uIE1jVml0dGllKQorICDCtyBBdm9pZCAtV3VudXNlZC1sYWJlbCB3aGVuIGNvbXBpbGluZyB3aXRoIGxpYnNlbGludXggYnV0IG5vIGxpYmF1ZGl0CisgIMK3IEluIGRldmVsb3BtZW50IGJ1aWxkcywgYWxsb3cgT09NIHRlc3RzIHRvIGJlIGRpc2FibGVkIGFzIGRvY3VtZW50ZWQKKyAgwrcgQWNjZXB0IGFuZCBpZ25vcmUgdGhlIC0tdGFwIGFyZ3VtZW50IGluIGFsbCAiZW1iZWRkZWQgdGVzdHMiLCBhbmQgcnVuCisgICAgYWxsIGF1dG9tYXRlZCB0ZXN0cyB3aXRoIHRoYXQgYXJndW1lbnQgZm9yIGJldHRlciBkaWFnbm9zdGljcworICDCtyBGaXggdGhlIHN5c3RlbWQgYWN0aXZhdGlvbiB0ZXN0IHVuZGVyIENNYWtlIGJ5IGluc3RhbGxpbmcgdGhlIHJlcXVpcmVkCisgICAgZmlsZXMKKyAgwrcgSW4gQXV0b21ha2UsIGZpeCBzaGVsbCBzeW50YXggZm9yIGluc3RhbGxjaGVjay1sb2NhbCB3aXRoIG5vIERFU1RESVIKKyAgwrcgSW4gQXV0b21ha2UsIGRvbid0IHRyeSB0byBydW4gbWFudWFsIHRlc3RzIGluIGluc3RhbGxjaGVjaworICDCtyBJbiBDTWFrZSwgZG9uJ3QgcnVuIG1hbnVhbC10Y3AgdGVzdCBhcyBhbiBhdXRvbWF0ZWQgdGVzdAorICDCtyBBZGQgdHJhdmlzLWNpLm9yZyBidWlsZCBtYWNoaW5lcnkKIAotRC1CdXMgMS4xMS4yICgyMDE2LTAzLTA3KQorRC1CdXMgMS4xMC44ICgyMDE2LTAzLTA3KQogPT0KIAotVGhlIOKAnHBuZXVtYXRpYyBkcmlsbCB2cy4gSXJvbiBNYWlkZW7igJ0gcmVsZWFzZS4KK1RoZSDigJxkaWdlc3RpdmUgYmlzY3VpdHPigJ0gcmVsZWFzZS4KIAogRml4ZXM6CiAKQEAgLTExMzksNzcgKzEwNyw2IEBACiDigKIgQ29ycmVjdCB0aGUgZXhwZWN0ZWQgZXJyb3IgZnJvbSBvbmUgbWFyc2hhbC12YWxpZGF0ZSB0ZXN0LCB3aGljaCB3YXMKICAgcHJldmlvdXNseSBub3QgcnVuIGR1ZSB0byB0aGUgYWJvdmUgYnVnIChmZC5vICM5MzkwOCwgU2ltb24gTWNWaXR0aWUpCiAKLeKAoiBGaXggY29tcGlsYXRpb24gdW5kZXIgQ01ha2Ugd2hlbiBlbWJlZGRlZCB0ZXN0cyBhcmUgZGlzYWJsZWQKLSAgKGZkLm8gIzk0MDk0LCBlcmljLmh5ZXIpCi0KLUludGVybmFsIGNoYW5nZXM6Ci0KLeKAoiBGaXggYWxsIC1XcG9pbnRlci1zaWduIChzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gpIHdhcm5pbmdzLCBhbmQgZW5hYmxlIHRoZQotICB3YXJuaW5nIChmZC5vICM5MzA2OTsgUmFsZiBIYWJhY2tlciwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBXaGVuIGJ1aWxkaW5nIHdpdGggQ01ha2UsIHVzZSB0aGUgc2FtZSBnY2MvY2xhbmcgd2FybmluZ3MgYXMgdW5kZXIgQXV0b3Rvb2xzLAotICBvciBNU1ZDIHdhcm5pbmdzIHRoYXQgYXJlIGJyb2FkbHkgc2ltaWxhciAoZmQubyAjOTMwNjksIFJhbGYgSGFiYWNrZXIpCi0KLeKAoiB0ZXN0L25hbWUtdGVzdDogbWFrZSBDIHRlc3RzIHByb2R1Y2UgVEFQIG91dHB1dCBhbmQgcnVuIHRoZW0gZGlyZWN0bHksIG5vdAotICB2aWEgcnVuLXRlc3Quc2ggKGZkLm8gIzkyODk5LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIFVuZGVyIENNYWtlIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciBXaW5kb3dzIG9uIFVuaXgsIHJ1biB0aGUgdGVzdHMKLSAgdW5kZXIgV2luZSBldmVuIGlmIGJpbmZtdF9taXNjIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZQotICAoZmQubyAjODg5NjYsIFJhbGYgSGFiYWNrZXIpCi0KLeKAoiBUaGUgREJVU19VU0VfVEVTVF9CSU5BUlkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm8gbG9uZ2VyIHVzZWQgYnkgYnVpbGRzIHdpdGgKLSAgZW1iZWRkZWQgdGVzdHM7IERCVVNfVEVTVF9EQlVTX0xBVU5DSCByZXBsYWNlcyBpdCAoZmQubyAjOTI4OTksIFNpbW9uIE1jVml0dGllKQotCi3igKIgRmFjdG9yIG91dCBzb21lIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgbmVlZGVkIGluIGZ1dHVyZSBmb3IgYSBXaW5kb3dzCi0gIGltcGxlbWVudGF0aW9uIG9mIGRidXMtcnVuLXNlc3Npb24gKGZkLm8gIzkyODk5LCBSYWxmIEhhYmFja2VyKQotCi1ELUJ1cyAxLjExLjAgKDIwMTUtMTItMDIpCi09PQotCi1UaGUg4oCccGVwcGVybWludCBkZWVy4oCdIHJlbGVhc2UuCi0KLURlcGVuZGVuY2llczoKLQot4oCiIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcywgZGJ1cyBub3cgcmVxdWlyZXMgYW4gPGludHR5cGVzLmg+IHRoYXQgZGVmaW5lcwotICBDOTkgY29uc3RhbnRzIHN1Y2ggYXMgUFJJZDY0IGFuZCBQUkl1NjQuCi0KLUVuaGFuY2VtZW50czoKLQot4oCiIEQtQnVzIFNwZWNpZmljYXRpb24gdmVyc2lvbiAwLjI3Ci0gIMK3IFNwZWNpZnkgdGhhdCBzZXJ2aWNlcyBzaG91bGQgbm90IHJlcGx5IGlmIE5PX1JFUExZX0VYUEVDVEVEIHdhcyB1c2VkCi0gICAgKGZkLm8gIzc1NzQ5LCBMYXJzIFVlYmVybmlja2VsKQotCi3igKIgQWRkIGEgc2NyaXB0IHRvIGRvIGNvbnRpbnVvdXMtaW50ZWdyYXRpb24gYnVpbGRzLCBhbmQgbWV0YWRhdGEgdG8gcnVuIGl0Ci0gIG9uIHRyYXZpcy1jaS5vcmcuIFRvIHVzZSB0aGlzLCBjbG9uZSB0aGUgZGJ1cyBnaXQgcmVwb3NpdG9yeSBvbiBHaXRIdWIKLSAgYW5kIHNldCBpdCB1cCB3aXRoIHRyYXZpcy1jaS5vcmc7IHRoZSBvbmx5IHNwZWNpYWwgc2V0dGluZyBuZWVkZWQgaXMKLSAgIm9ubHkgYnVpbGQgYnJhbmNoZXMgd2l0aCBhIC50cmF2aXMueW1sIi4gKGZkLm8gIzkzMTk0LCBTaW1vbiBNY1ZpdHRpZSkKLQot4oCiIElmIGRidXMtZGFlbW9uIGlzIHJ1biB3aXRoIC0tc3lzdGVtZC1hY3RpdmF0aW9uLCBkbyBub3QgcmVxdWlyZQotICBvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEuc2VydmljZSB0byBleGlzdCAoZmQubyAjOTMxOTQsIFNpbW9uIE1jVml0dGllKQotCi1GaXhlczoKLQot4oCiIFJlLW9yZGVyIGRidXMtZGFlbW9uIHN0YXJ0dXAgc28gdGhhdCBvbiBTRUxpbnV4IHN5c3RlbXMsIHRoZSB0aHJlYWQKLSAgdGhhdCByZWFkcyBBVkMgbm90aWZpY2F0aW9ucyByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIHdyaXRlIHRvIHRoZQotICBhdWRpdCBsb2cgKGZkLm8gIzkyODMyLCBMYXVyZW50IEJpZ29udmlsbGUpCi0KLeKAoiBQcmludCA2NC1iaXQgaW50ZWdlcnMgb24gbm9uLUdOVSBVbml4IHBsYXRmb3JtcyAoZmQubyAjOTIwNDMsIE5hdGFuYWVsIENvcGEpCi0KLeKAoiBXaGVuIHVzaW5nIHRoZSBNb25pdG9yaW5nIGludGVyZmFjZSwgbWF0Y2ggbWVzc2FnZXMnIGRlc3RpbmF0aW9ucwotICAoZmQubyAjOTIwNzQsIFNpbW9uIE1jVml0dGllKQotCi3igKIgT24gTGludXggd2l0aCBzeXN0ZW1kLCBzdG9wIGluc3RhbGxpbmcgYSByZWZlcmVuY2UgdG8gdGhlIG9ic29sZXRlCi0gIGRidXMudGFyZ2V0LCBhbmQgZW5hYmxlIGRidXMuc29ja2V0IHN0YXRpY2FsbHkgKGZkLm8gIzc4NDEyLCAjOTI0MDI7Ci0gIFNpbW9uIE1jVml0dGllKQotCi3igKIgT24gV2luZG93cywgd2hlbiBpbmNsdWRpbmcgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoIDxpbmNsdWRlPiBvcgotICA8aW5jbHVkZWRpcj4sIGFwcGx5IHRoZSBzYW1lIHJlbG9jYXRpb24gYXMgZm9yIHRoZSBFeGVjIHBhdGhzCi0gIGluIC5zZXJ2aWNlIGZpbGVzIChmZC5vICM5MjAyOCwgU2ltb24gTWNWaXR0aWUpCi0KLeKAoiBBZGQgc3VwcG9ydCBmb3IgYmFja3RyYWNlcyBvbiBXaW5kb3dzIChmZC5vICM5MjcyMSwgUmFsZiBIYWJhY2tlcikKLQot4oCiIEZpeCBtYW55IC1XcG9pbnRlci1zaWduIHdhcm5pbmdzIChmZC5vICM5MzA2OSwgUmFsZiBIYWJhY2tlcikKLQogRC1CdXMgMS4xMC42ICgyMDE1LTEyLTAxKQogPT0KIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDhmYTAwOWUuLjAyNTdlNjkgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE4LDggKzE4LDcgQEAKIFNlZSBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kYnVzLyBmb3IgbG90cyBvZiBkb2N1bWVudGF0aW9uLCAKIG1haWxpbmcgbGlzdHMsIGV0Yy4KIAotU2VlIGFsc28gdGhlIGZpbGUgQ09OVFJJQlVUSU5HLm1kIGZvciBub3RlcyBvZiBpbnRlcmVzdCB0byBkZXZlbG9wZXJzCi13b3JraW5nIG9uIEQtQnVzLgorU2VlIGFsc28gdGhlIGZpbGUgSEFDS0lORyBmb3Igbm90ZXMgb2YgaW50ZXJlc3QgdG8gZGV2ZWxvcGVycyB3b3JraW5nIG9uIEQtQnVzLgogCiBJZiB5b3UncmUgY29uc2lkZXJpbmcgRC1CdXMgZm9yIHVzZSBpbiBhIHByb2plY3QsIHlvdSBzaG91bGQgYmUgYXdhcmUKIHRoYXQgRC1CdXMgd2FzIGRlc2lnbmVkIGZvciBhIGNvdXBsZSBvZiBzcGVjaWZpYyB1c2UgY2FzZXMsIGEgInN5c3RlbQpkaWZmIC0tZ2l0IGEvUkVBRE1FLmNtYWtlIGIvUkVBRE1FLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTAxMmZiLi4wMDAwMDAwCi0tLSBhL1JFQURNRS5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi1UaGlzIGZpbGUgZGVzY3JpYmVzIGhvdyB0byBjb21waWxlIGRidXMgdXNpbmcgdGhlIGNtYWtlIGJ1aWxkIHN5c3RlbQotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotLSBjbWFrZSB2ZXJzaW9uID49IDIuNi4wIHNlZSBodHRwOi8vd3d3LmNtYWtlLm9yZwotLSBpbnN0YWxsZWQgbGliZXhwYXQgc2VlIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvIAotICAgIHVuc3VwcG9ydGVkIFJlbFdpdGhEZWJJbmZvIGJ1aWxkcyBjb3VsZCBiZSBmZXRjaGVkIAotICAgIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9rZGUtd2luZG93cy9maWxlcy9leHBhdC8KLQotQnVpbGRpbmcKLS0tLS0tLS0tCi0KLVdpbjMyIE1pbkdXLXc2NHwzMgotMS4gaW5zdGFsbCBtaW5ndy13NjQgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21pbmd3LXc2NC8KLTIuIGluc3RhbGwgY21ha2UgYW5kIGxpYmV4cGF0Ci0zLiBnZXQgZGJ1cyBzb3VyY2VzCi00LiB1bnBhY2sgZGJ1cyBzb3VyY2VzIGludG8gYSBzdWIgZGlyZWN0b3J5IChyZWZlcnJlZCBhcyA8ZGJ1cy1zcmMtcm9vdD4gbGF0ZXIpCi01LiBta2RpciBkYnVzLWJ1aWxkCi02LiBjZCBkYnVzLWJ1aWxkCi03LiBydW4gCi0gICAgY21ha2UgLUcgIk1pbkdXIE1ha2VmaWxlcyIgWzxvcHRpb25zLCBzZWUgYmVsb3c+XSA8ZGJ1cy1zcmMtcm9vdD4vY21ha2UKLSAgICBtaW5ndzMyLW1ha2UKLSAgICBtaW5ndzMyLW1ha2UgaW5zdGFsbAotCi1XaW4zMiBNaWNyb3NvZnQgbm1ha2UKLTEuIGluc3RhbGwgTVNWQyAyMDEwIEV4cHJlc3MgVmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS92aXN1YWxzdHVkaW8vZW4tdXMvcHJvZHVjdHMvMjAxMC1lZGl0aW9ucy92aXN1YWwtY3BwLWV4cHJlc3MKLTIuIGluc3RhbGwgY21ha2UgYW5kIGxpYmV4cGF0Ci0zLiBnZXQgZGJ1cyBzb3VyY2VzCi00LiB1bnBhY2sgZGJ1cyBzb3VyY2VzIGludG8gYSBzdWIgZGlyZWN0b3J5IChyZWZlcnJlZCBhcyA8ZGJ1cy1zcmMtcm9vdD4gbGF0ZXIpCi01LiBta2RpciBkYnVzLWJ1aWxkCi02LiBjZCBkYnVzLWJ1aWxkCi03LiBydW4gCi0gICAgY21ha2UgLUcgIk5NYWtlIE1ha2VmaWxlcyIgWzxvcHRpb25zLCBzZWUgYmVsb3c+XSA8ZGJ1cy1zcmMtcm9vdD4vY21ha2UKLSAgICBubWFrZQotICAgIG5tYWtlIGluc3RhbGwKLQotV2luMzIgVmlzdWFsIFN0dWRpbyAyMDEwIEV4cHJlc3MgSURFCi0xLiBpbnN0YWxsIE1TVkMgMjAxMCBFeHByZXNzIFZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdmlzdWFsc3R1ZGlvL2VuLXVzL3Byb2R1Y3RzLzIwMTAtZWRpdGlvbnMvdmlzdWFsLWNwcC1leHByZXNzCi0yLiBpbnN0YWxsIGNtYWtlIGFuZCBsaWJleHBhdAotMy4gZ2V0IGRidXMgc291cmNlcwotNC4gdW5wYWNrIGRidXMgc291cmNlcyBpbnRvIGEgc3ViIGRpcmVjdG9yeSAocmVmZXJyZWQgYXMgPGRidXMtc3JjLXJvb3Q+IGxhdGVyKQotNS4gbWtkaXIgZGJ1cy1idWlsZAotNi4gY2QgZGJ1cy1idWlsZAotNy4gcnVuCi0gICAgICBjbWFrZSAtRyAiVmlzdWFsIFN0dWRpbyAxMCIgWzxvcHRpb25zLCBzZWUgYmVsb3c+XSA8ZGJ1cy1zcmMtcm9vdD4vY21ha2UKLThhLiBvcGVuIElERSB3aXRoCi0gICAgICB2Y2V4cHJlc3MgZGJ1cy5zbG4KLThiLiBmb3IgaW1tZWRpYXRlIGJ1aWxkIHJ1bgotICAgICAgdmNleHByZXNzIGRidXMuc2xuIC9idWlsZAotCi1XaW4zMiBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJvZmVzc2lvbmFsIElERQotMS4gaW5zdGFsbCBNU1ZDIDIwMTAgUHJvZmVzc2lvbmFsIFZlcnNpb24KLTIuIGluc3RhbGwgY21ha2UgYW5kIGxpYmV4cGF0Ci0zLiBnZXQgZGJ1cyBzb3VyY2VzCi00LiB1bnBhY2sgZGJ1cyBzb3VyY2VzIGludG8gYSBzdWIgZGlyZWN0b3J5IChyZWZlcnJlZCBhcyA8ZGJ1cy1zcmMtcm9vdD4gbGF0ZXIpCi01LiBta2RpciBkYnVzLWJ1aWxkCi02LiBjZCBkYnVzLWJ1aWxkCi03LiBydW4gCi0gICAgICBjbWFrZSAtRyAiVmlzdWFsIFN0dWRpbyAxMCIgWzxvcHRpb25zLCBzZWUgYmVsb3c+XSA8ZGJ1cy1zcmMtcm9vdD4vY21ha2UKLThhLiBvcGVuIElERSB3aXRoCi0gICAgICBkZXZlbnYgZGJ1cy5zbG4KLThiLiBmb3IgaW1tZWRpYXRlIGJ1aWxkIHJ1bgotICAgICAgZGV2ZW52IGRidXMuc2xuIC9idWlsZAotCi1MaW51eAotMS4gaW5zdGFsbCBjbWFrZSBhbmQgbGliZXhwYXQKLTIuIGdldCBkYnVzIHNvdXJjZXMKLTMuIHVucGFjayBkYnVzIHNvdXJjZXMgaW50byBhIHN1YiBkaXJlY3RvcnkgKHJlZmVycmVkIGFzIDxkYnVzLXNyYy1yb290PiBsYXRlcikKLTQuIG1rZGlyIGRidXMtYnVpbGQKLTUuIGNkIGRidXMtYnVpbGQKLTYuIHJ1biAKLSAgICBjbWFrZSAtRyAiPGZvciBhdmFpbGFibGUgdGFyZ2V0cywgc2VlIGNtYWtlIC0taGVscCBmb3IgYSBsaXN0PiIgWzxvcHRpb25zLCBzZWUgYmVsb3c+XSA8ZGJ1cy1zcmMtcm9vdD4vY21ha2UKLSAgICBtYWtlCi0gICAgbWFrZSBpbnN0YWxsCi0KLUZvciBvdGhlciBjb21waWxlcnMgc2VlIGNtYWtlIC0taGVscCBpbiB0aGUgR2VuZXJhdG9ycyBzZWN0aW9uCi0KLUNvbmZpZ3VyYXRpb24gZmxhZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbiB1c2luZyB0aGUgY21ha2UgYnVpbGQgc3lzdGVtIHRoZSBkYnVzLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBjYW4gYmUgZ2l2ZW4gCi10byB0aGUgY21ha2UgcHJvZ3JhbSBhcmUgdGhlc2UgKHVzZSAtRDxrZXk+PTx2YWx1ZT4gb24gY29tbWFuZCBsaW5lKS4gVGhlIGxpc3RlZCB2YWx1ZXMgCi1hcmUgdGhlIGRlZmF1bHRzIChpbiBhIHR5cGljYWwgYnVpbGQgLSBzb21lIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYykuCi0KLS8vIENob29zZSB0aGUgdHlwZSBvZiBidWlsZCwgb3B0aW9ucyBhcmU6IE5vbmUoQ01BS0VfQ1hYX0ZMQUdTIG9yCi0vLyBDTUFLRV9DX0ZMQUdTIHVzZWQpIERlYnVnIFJlbGVhc2UgUmVsV2l0aERlYkluZm8gTWluU2l6ZVJlbC4KLUNNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPURlYnVnCi0KLS8vIEluY2x1ZGUgcGF0aCBmb3IgM3JkcGFydHkgcGFja2FnZXMKLUNNQUtFX0lOQ0xVREVfUEFUSDpQQVRIPQotCi0vLyBMaWJyYXJ5IHBhdGggZm9yIDNyZHBhcnR5IHBhY2thZ2VzCi1DTUFLRV9MSUJSQVJZX1BBVEg6UEFUSD0KLQotLy8gSW5zdGFsbCBwYXRoIHByZWZpeCwgcHJlcGVuZGVkIG9udG8gaW5zdGFsbCBkaXJlY3Rvcmllcy4KLUNNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9QzovUHJvZ3JhbSBGaWxlcy9kYnVzCi0KLQotLy8gZW5hYmxlIHVuaXQgdGVzdCBjb2RlCi1EQlVTX0JVSUxEX1RFU1RTOkJPT0w9T04KLQotLy8gVGhlIG5hbWUgb2YgdGhlIGRidXMgZGFlbW9uIGV4ZWN1dGFibGUKLURCVVNfREFFTU9OX05BTUU6U1RSSU5HPWRidXMtZGFlbW9uCi0KLS8vIERpc2FibGUgYXNzZXJ0aW9uIGNoZWNraW5nCi1EQlVTX0RJU0FCTEVfQVNTRVJUOkJPT0w9T0ZGCi0KLS8vIERpc2FibGUgcHVibGljIEFQSSBzYW5pdHkgY2hlY2tpbmcKLURCVVNfRElTQUJMRV9DSEVDS1M6Qk9PTD1PRkYKLQotLy8gZW5hYmxlIC1hbnNpIC1wZWRhbnRpYyBnY2MgZmxhZ3MKLURCVVNfRU5BQkxFX0FOU0k6Qk9PTD1PRkYKLQotLy8gYnVpbGQgRE9YWUdFTiBkb2N1bWVudGF0aW9uIChyZXF1aXJlcyBEb3h5Z2VuKQotREJVU19FTkFCTEVfRE9YWUdFTl9ET0NTOkJPT0w9T0ZGCi0KLS8vIGVuYWJsZSBidXMgZGFlbW9uIHVzYWdlIHN0YXRpc3RpY3MKLURCVVNfRU5BQkxFX1NUQVRTOkJPT0w9T0ZGCi0KLS8vIHN1cHBvcnQgdmVyYm9zZSBkZWJ1ZyBtb2RlCi1EQlVTX0VOQUJMRV9WRVJCT1NFX01PREU6Qk9PTD1PTgotCi0vLyBidWlsZCBYTUwgIGRvY3VtZW50YXRpb24gKHJlcXVpcmVzIHhtbHRvIG9yIG1laW5wcm9jNCkKLURCVVNfRU5BQkxFX1hNTF9ET0NTOkJPT0w9T04KLQotLy8gaW5zdGFsbCByZXF1aXJlZCBzeXN0ZW0gbGlicmFyaWVzCi1EQlVTX0lOU1RBTExfU1lTVEVNX0xJQlM6Qk9PTD1PRkYKLQotLy8gc2Vzc2lvbiBidXMgZGVmYXVsdCBsaXN0ZW5pbmcgYWRkcmVzcwotREJVU19TRVNTSU9OX0JVU19MSVNURU5fQUREUkVTUzpTVFJJTkc9YXV0b2xhdW5jaDoKLQotLy8gc2Vzc2lvbiBidXMgZmFsbGJhY2sgYWRkcmVzcyBmb3IgY2xpZW50cwotREJVU19TRVNTSU9OX0JVU19DT05ORUNUX0FERFJFU1M6U1RSSU5HPWF1dG9sYXVuY2g6Ci0KLS8vIHN5c3RlbSBidXMgZGVmYXVsdCBhZGRyZXNzIChvbmx5IHVzZWZ1bCBvbiBVbml4KQotREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUzpTVFJJTkc9dW5peDpwYXRoPS92YXIvcnVuL2RidXMvc3lzdGVtX2J1c19zb2NrZXQKLQotd2luMzIgb25seToKLS8vIGVuYWJsZSB3aW4zMiBkZWJ1ZyBwb3J0IGZvciBtZXNzYWdlIG91dHB1dAotREJVU19VU0VfT1VUUFVUX0RFQlVHX1NUUklORzpCT09MPU9GRgotCi1nY2Mgb25seToKLS8vIGNvbXBpbGUgd2l0aCBjb3ZlcmFnZSBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uCi1EQlVTX0dDT1ZfRU5BQkxFRDpCT09MPU9GRgotCi1zb2xhcmlzIG9ubHk6Ci0vLyBlbmFibGUgY29uc29sZSBvd25lciBmaWxlIAotSEFWRV9DT05TT0xFX09XTkVSX0ZJTEU6Qk9PTD1PTgotCi0vLyBEaXJlY3RvcnkgdG8gY2hlY2sgZm9yIGNvbnNvbGUgb3duZXJzaGlwCi1EQlVTX0NPTlNPTEVfT1dORVJfRklMRTpTVFJJTkc9L2Rldi9jb25zb2xlCi0KLS8vIExpbnV4IG9ubHk6Ci0vLyBlbmFibGUgaW5vdGlmeSBhcyBkaXIgd2F0Y2ggYmFja2VuZAotREJVU19CVVNfRU5BQkxFX0lOT1RJRlk6Qk9PTD1PTgotCi0qQlNEIG9ubHk6Ci0vLyBlbmFibGUga3F1ZXVlIGFzIGRpciB3YXRjaCBiYWNrZW5kCi1EQlVTX0JVU19FTkFCTEVfS1FVRVVFOkJPT0w9T04KLQoteDExIG9ubHk6Ci0vLyBCdWlsZCB3aXRoIFgxMSBhdXRvIGxhdW5jaCBzdXBwb3J0Ci1EQlVTX0JVSUxEX1gxMTpCT09MPU9OCi0KLQotTm90ZTogVGhlIGFib3ZlIG1lbnRpb25lZCBvcHRpb25zIGNvdWxkIGJlIGV4dHJhY3RlZCBhZnRlciAKLWNvbmZpZ3VyaW5nIGZyb20gdGhlIG91dHB1dCBvZiBydW5uaW5nICI8bWFrZXRvb2w+IGhlbHAtb3B0aW9ucyIgCi1pbiB0aGUgYnVpbGQgZGlyZWN0b3J5LiBUaGUgcmVsYXRlZCBlbnRyaWVzIHN0YXJ0IHdpdGggCi1DTUFLRV8gb3IgREJVU18uIAotCi0KLUhvdyB0byBjb21waWxlIGluIGRidXMgaW50byBjbGllbnRzIHdpdGggY21ha2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gY29tcGlsZSBkYnVzIGxpYnJhcnkgaW50byBhIGNsaWVudCBhcHBsaWNhdGlvbiB3aXRoIGNtYWtlCi10aGUgZm9sbG93aW5nIGNtYWtlIGNvbW1hbmRzIGFyZSByZXF1aXJlZDoKLQotMS4gY2FsbCBmaW5kX3BhY2thZ2UgdG8gZmluZCBkYnVzIHBhY2thZ2UKLQotZmluZF9wYWNrYWdlKERCdXMxKQotCi0yLiBhZnRlciBzcGVjaWZpbmcgdGFyZ2V0cyBsaW5rIGRidXMgaW50byB0YXJnZXQKLQotYWRkX2V4ZWN1dGFibGUodGVzdCB0ZXN0LmMpCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdCAke0RCdXMxX0xJQlJBUklFU30pCi0KLUFkZGluZyAke0RCdXMxX0xJQlJBUklFU30gdG8gdGFyZ2V0cyBhbHNvIGFkZHMgcmVxdWlyZWQgZGJ1cwotaW5jbHVkZSBkaXJzIGFuZCBjb21waWxlciBkZWZpbml0aW9ucyBieSBkZWZhdWx0LiBUaGVyZSBpcwotbm8gbmVlZCB0byBhZGQgdGhlbSB3aXRoIGluY2x1ZGVfZGlyZWN0b3JpZXMgYW5kIGFkZF9kZWZpbml0aW9ucy4KLQotVG8gY29tcGlsZSBhZ2FpbnN0IGRidXMgaW5zdGFsbGVkIGluIGEgbm9uIHN0YW5kYXJkIGxvY2F0aW9uCi1zcGVjaWZ5IC1EREJ1czFfRElSPTxkYnVzLWluc3RhbGwtcm9vdD4vbGliWzY0XS9jbWFrZS9EQnVzMQotb24gY21ha2UgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvYnVzLy5naXRpZ25vcmUgYi9idXMvLmdpdGlnbm9yZQppbmRleCAzN2IwNDc3Li44NjFkYzFmIDEwMDY0NAotLS0gYS9idXMvLmdpdGlnbm9yZQorKysgYi9idXMvLmdpdGlnbm9yZQpAQCAtMTMsMTYgKzEzLDE0IEBACiAqLmJiZwogKi5kYQogKi5nY292Ci10ZXN0LWJ1cworYnVzLXRlc3QKIHJjLm1lc3NhZ2VidXMKIG1lc3NhZ2VidXMKIG1lc3NhZ2VidXMtY29uZmlnCiBzZXNzaW9uLmNvbmYKIHN5c3RlbS5jb25mCi10ZXN0LWJ1cy1sYXVuY2gtaGVscGVyCi10ZXN0LWJ1cy1zeXN0ZW0KK2J1cy10ZXN0LWxhdW5jaC1oZWxwZXIKK2J1cy10ZXN0LXN5c3RlbQogZGJ1cy5zZXJ2aWNlCiBkYnVzLnNvY2tldAogb3JnLmZyZWVkZXNrdG9wLmRidXMtc2Vzc2lvbi5wbGlzdAotZXhhbXBsZS1zZXNzaW9uLWRpc2FibGUtc3RhdHMuY29uZgotZXhhbXBsZS1zeXN0ZW0tZW5hYmxlLXN0YXRzLmNvbmYKZGlmZiAtLWdpdCBhL2J1cy9BbmRyb2lkLm1rIGIvYnVzL0FuZHJvaWQubWsKaW5kZXggNThhZjg5NS4uMjQ4NzQ2YSAxMDA2NDQKLS0tIGEvYnVzL0FuZHJvaWQubWsKKysrIGIvYnVzL0FuZHJvaWQubWsKQEAgLTM5LDggKzM5LDYgQEAKIAlzdGF0cy5jIFwKIAl1dGlscy5jCiAKLUxPQ0FMX0xERkxBR1M6PSAtV2wsLS1uby1leHBvcnQtZHluYW1pYywtLWdjLXNlY3Rpb25zCi0KIGlmZXEgKCQoQlVJTERfRVVSRUtBKSx0cnVlKQogTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC9leHBhdC9saWIKIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliZXhwYXRfc3RhdGljCmRpZmYgLS1naXQgYS9idXMvTWFrZWZpbGUuYW0gYi9idXMvTWFrZWZpbGUuYW0KaW5kZXggYzkxNzA2My4uMzNhZjA5YiAxMDA2NDQKLS0tIGEvYnVzL01ha2VmaWxlLmFtCisrKyBiL2J1cy9NYWtlZmlsZS5hbQpAQCAtMSwxMyArMSw5IEBACiBkYnVzZGF0YWRpcj0kKGRhdGFkaXIpL2RidXMtMQogbGVnYWN5ZGJ1c2RhdGFkaXI9JChzeXNjb25mZGlyKS9kYnVzLTEKIGRidXNfZGFlbW9uX2V4ZWNkaXIgPSAkKERCVVNfREFFTU9ORElSKQotIyBBbHdheXMgbGliLCBldmVuIGlmICR7bGliZGlyfSBpcyBsaWI2NCBvciBsaWIveDg2XzY0LWxpbnV4LWdudQotc3lzdGVtZHRtcGZpbGVzZGlyID0gJChwcmVmaXgpL2xpYi90bXBmaWxlcy5kCi1zeXN0ZW1kc3lzdXNlcnNkaXIgPSAkKHByZWZpeCkvbGliL3N5c3VzZXJzLmQKIAogREJVU19CVVNfTElCUyA9IFwKLQkkKENPREVfQ09WRVJBR0VfTElCUykgXAotCSQoRVhQQVRfTElCUykgXAorCSQoWE1MX0xJQlMpIFwKIAkkKFNFTElOVVhfTElCUykgXAogCSQoQVBQQVJNT1JfTElCUykgXAogCSQoVEhSRUFEX0xJQlMpIFwKQEAgLTE2LDE3ICsxMiwxNSBAQAogCSQoTlVMTCkKIAogREJVU19MQVVOQ0hFUl9MSUJTID0gXAotCSQoQ09ERV9DT1ZFUkFHRV9MSUJTKSBcCi0JJChFWFBBVF9MSUJTKSBcCisJJChYTUxfTElCUykgXAogCSQoVEhSRUFEX0xJQlMpIFwKIAkkKE5FVFdPUktfbGlicykgXAogCSQoTlVMTCkKIAogQU1fQ1BQRkxBR1MgPSBcCi0JJChDT0RFX0NPVkVSQUdFX0NQUEZMQUdTKSBcCiAJLUkkKHRvcF9zcmNkaXIpIFwKIAkkKERCVVNfU1RBVElDX0JVSUxEX0NQUEZMQUdTKSBcCi0JJChFWFBBVF9DRkxBR1MpIFwKKwkkKFhNTF9DRkxBR1MpIFwKIAkkKEFQUEFSTU9SX0NGTEFHUykgXAogCS1EREJVU19TWVNURU1fQ09ORklHX0ZJTEU9XCIiJChkYnVzZGF0YWRpcikvc3lzdGVtLmNvbmYiXCIgXAogCS1EREJVU19DT01QSUxBVElPTiBcCkBAIC0zNSwxMyArMjksOSBAQAogIyBpZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBpbXByb3ZlIGJhY2t0cmFjZXMKIEFNX0xERkxBR1MgPSBAUl9EWU5BTUlDX0xERkxBR0AKIAotQU1fQ0ZMQUdTID0gXAotCSQoQ09ERV9DT1ZFUkFHRV9DRkxBR1MpIFwKLQkkKE5VTEwpCi0KIEVGRU5DRT0KIAotRVhUUkFfRElTVCA9CQkJCQlcCitDT05GSUdfSU5fRklMRVM9CQkJCVwKIAlzZXNzaW9uLmNvbmYuaW4JCQkJXAogCXN5c3RlbS5jb25mLmluCQkJCVwKIAlsZWdhY3ktY29uZmlnL3Nlc3Npb24uY29uZi5pbgkJXApAQCAtNzAsNiArNjAsOCBAQAogYWdlbnRfREFUQT1vcmcuZnJlZWRlc2t0b3AuZGJ1cy1zZXNzaW9uLnBsaXN0CiBlbmRpZgogCitYTUxfU09VUkNFUz1jb25maWctbG9hZGVyLWV4cGF0LmMKKwogaWYgREJVU19CVVNfRU5BQkxFX0tRVUVVRQogRElSX1dBVENIX1NPVVJDRT1kaXItd2F0Y2gta3F1ZXVlLmMKIGVsc2UKQEAgLTkwLDcgKzgyLDYgQEAKIAlhdWRpdC5oCQkJCQlcCiAJYnVzLmMJCQkJCVwKIAlidXMuaAkJCQkJXAotCWNvbmZpZy1sb2FkZXItZXhwYXQuYwkJCVwKIAljb25maWctcGFyc2VyLmMJCQkJXAogCWNvbmZpZy1wYXJzZXIuaAkJCQlcCiAJY29uZmlnLXBhcnNlci1jb21tb24uYwkJCVwKQEAgLTEyMSw3ICsxMTIsNyBAQAogCXRlc3QuaAkJCQkJXAogCXV0aWxzLmMJCQkJCVwKIAl1dGlscy5oCQkJCQlcCi0JJChOVUxMKQorCSQoWE1MX1NPVVJDRVMpCiAKIGRidXNfZGFlbW9uX1NPVVJDRVM9CQkJCVwKIAkkKEJVU19TT1VSQ0VTKQkJCQlcCkBAIC0xMzQsNyArMTI1LDcgQEAKIAkkKERCVVNfQlVTX0xJQlMpCiAKIExBVU5DSF9IRUxQRVJfU09VUkNFUz0JCQkJXAotCWNvbmZpZy1sb2FkZXItZXhwYXQuYwkJCVwKKwkkKFhNTF9TT1VSQ0VTKQkJCQlcCiAJY29uZmlnLXBhcnNlci1jb21tb24uYwkJCVwKIAljb25maWctcGFyc2VyLWNvbW1vbi5oCQkJXAogCWNvbmZpZy1wYXJzZXItdHJpdmlhbC5jCQkJXApAQCAtMjE3LDcgKzIwOCw3IEBACiBlbmRpZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogCiB0ZXN0X2J1c19zeXN0ZW1fU09VUkNFUz0JCQlcCi0JY29uZmlnLWxvYWRlci1leHBhdC5jCQkJXAorCSQoWE1MX1NPVVJDRVMpCQkJCVwKIAljb25maWctcGFyc2VyLWNvbW1vbi5jCQkJXAogCWNvbmZpZy1wYXJzZXItY29tbW9uLmgJCQlcCiAJY29uZmlnLXBhcnNlci10cml2aWFsLmMJCQlcCkBAIC0yNDIsNiArMjMzLDEwIEBACiAJJChEQlVTX0JVU19MSUJTKSBcCiAJJChOVUxMKQogCisjIyBtb3AgdXAgdGhlIGdjb3YgZmlsZXMKK2NsZWFuLWxvY2FsOgorCS9iaW4vcm0gKi5iYiAqLmJiZyAqLmRhICouZ2NvdiB8fCB0cnVlCisKIGluc3RhbGwtZGF0YS1ob29rOgogCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZGJ1c2RhdGFkaXIpL3Nlc3Npb24uZAogCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZGJ1c2RhdGFkaXIpL3NlcnZpY2VzCkBAIC0yNTQsNiArMjQ5LDggQEAKICMgSW5zdGFsbCBkYnVzLnNvY2tldCBhcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgRC1CdXMgc3RhY2suCiAjIERlbGliZXJhdGVseSBub3QgdXNpbmcgJChMTl9TKSBoZXJlOiBsbiAtZnMgaXMgbm90IHVuaXZlcnNhbGx5IHBvcnRhYmxlLAogIyBidXQgbmVpdGhlciBpcyBzeXN0ZW1kLCBzbyBpdCdzIE9LIHRvIGFzc3VtZSBoZXJlIHRoYXQgbG4gY29tcGxpZXMgd2l0aCBTVVMuCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikvZGJ1cy50YXJnZXQud2FudHMKKwlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpL2RidXMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0CiAjIFVuY29uZGl0aW9uYWxseSBlbmFibGUgRC1CdXMgb24gc3lzdGVtZCBpbnN0YWxsYXRpb25zCiAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikvc29ja2V0cy50YXJnZXQud2FudHMKIAlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpL3NvY2tldHMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0CkBAIC0yNzYsMjYgKzI3Myw1MyBAQAogCWZpCiBlbmRpZgogCi1FWFRSQV9ESVNUICs9IFwKKyMjIyMgSW5pdCBzY3JpcHRzIGZ1bgorU0NSSVBUX0lOX0ZJTEVTPW1lc3NhZ2VidXMuaW4gXAorCQltZXNzYWdlYnVzLWNvbmZpZy5pbiBcCisJCXJjLm1lc3NhZ2VidXMuaW4KKworIyMgUmVkIEhhdCBzdGFydAoraWYgREJVU19JTklUX1NDUklQVFNfUkVEX0hBVAorCitpbml0ZGRpcj0kKHN5c2NvbmZkaXIpL3JjLmQvaW5pdC5kCisKK2luaXRkX1NDUklQVFM9IAlcCisJbWVzc2FnZWJ1cworCitlbmRpZgorICMjIFJlZCBIYXQgZW5kCisKKyMjIFNsYWNrd2FyZSBzdGFydAoraWYgREJVU19JTklUX1NDUklQVFNfU0xBQ0tXQVJFCisKK2luaXRkZGlyPSQoc3lzY29uZmRpcikvcmMuZC8KKworaW5pdGRfU0NSSVBUUz0gCVwKKwlyYy5tZXNzYWdlYnVzCisKK2VuZGlmCisjIyBTbGFja3dhcmUgZW5kCisKKyMjIEN5Z3dpbiBzdGFydAoraWYgREJVU19JTklUX1NDUklQVFNfQ1lHV0lOCisKK2Jpbl9TQ1JJUFRTPSAJXAorCW1lc3NhZ2VidXMtY29uZmlnCisKK2VuZGlmCisjIyBDeWd3aW4gZW5kCisKK2lmIEhBVkVfU1lTVEVNRAorU0NSSVBUX0lOX0ZJTEVTICs9IFwKIAlkYnVzLnNlcnZpY2UuaW4gXAogCWRidXMuc29ja2V0LmluIFwKIAlzeXN0ZW1kLXVzZXIvZGJ1cy5zZXJ2aWNlLmluIFwKIAlzeXN0ZW1kLXVzZXIvZGJ1cy5zb2NrZXQuaW4gXAotCXN5c3VzZXJzLmQvZGJ1cy5jb25mLmluIFwKLQl0bXBmaWxlcy5kL2RidXMuY29uZi5pbiBcCiAJJChOVUxMKQogCi1pZiBIQVZFX1NZU1RFTUQKIHN5c3RlbWRzeXN0ZW11bml0X0RBVEEgPSBcCiAJZGJ1cy5zZXJ2aWNlIFwKIAlkYnVzLnNvY2tldAotCi1ub2Rpc3Rfc3lzdGVtZHN5c3VzZXJzX0RBVEEgPSBcCi0Jc3lzdXNlcnMuZC9kYnVzLmNvbmYKLQotbm9kaXN0X3N5c3RlbWR0bXBmaWxlc19EQVRBID0gXAotCXRtcGZpbGVzLmQvZGJ1cy5jb25mIFwKLQkkKE5VTEwpCiBlbmRpZgogCiBpZiBEQlVTX0VOQUJMRV9VU0VSX1NFU1NJT04KQEAgLTMwNSw1ICszMjksNiBAQAogCSQoTlVMTCkKIGVuZGlmCiAKLSMgQWRkIHJ1bGVzIGZvciBjb2RlLWNvdmVyYWdlIHRlc3RpbmcsIGFzIGRlZmluZWQgYnkgQVhfQ09ERV9DT1ZFUkFHRQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2FtaW5jbHVkZV9zdGF0aWMuYW0KKyMjIyMgRXh0cmEgZGlzdAorCitFWFRSQV9ESVNUPSQoQ09ORklHX0lOX0ZJTEVTKSAkKFNDUklQVF9JTl9GSUxFUykKZGlmZiAtLWdpdCBhL2J1cy9hY3RpdmF0aW9uLWhlbHBlci5jIGIvYnVzL2FjdGl2YXRpb24taGVscGVyLmMKaW5kZXggNWI2YTA5MC4uMzk0ZjM5MyAxMDA2NDQKLS0tIGEvYnVzL2FjdGl2YXRpb24taGVscGVyLmMKKysrIGIvYnVzL2FjdGl2YXRpb24taGVscGVyLmMKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICBzZXJ2aWNlX2RpcnMgPSBidXNfY29uZmlnX3BhcnNlcl9nZXRfc2VydmljZV9wYXRocyAocGFyc2VyKTsKKyAgc2VydmljZV9kaXJzID0gYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfZGlycyAocGFyc2VyKTsKICAgZm9yIChsaW5rID0gX2RidXNfbGlzdF9nZXRfZmlyc3RfbGluayAoc2VydmljZV9kaXJzKTsKICAgICAgICBsaW5rICE9IE5VTEw7CiAgICAgICAgbGluayA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayAoc2VydmljZV9kaXJzLCBsaW5rKSkKZGlmZiAtLWdpdCBhL2J1cy9hY3RpdmF0aW9uLWhlbHBlci5oIGIvYnVzL2FjdGl2YXRpb24taGVscGVyLmgKaW5kZXggNDNlN2IxNS4uMzYxYTRjNiAxMDA2NDQKLS0tIGEvYnVzL2FjdGl2YXRpb24taGVscGVyLmgKKysrIGIvYnVzL2FjdGl2YXRpb24taGVscGVyLmgKQEAgLTI1LDggKzI1LDYgQEAKICNpZm5kZWYgQlVTX0FDVElWQVRJT05fSEVMUEVSX0gKICNkZWZpbmUgQlVTX0FDVElWQVRJT05fSEVMUEVSX0gKIAotI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgotCiBkYnVzX2Jvb2xfdCBydW5fbGF1bmNoX2hlbHBlciAoY29uc3QgY2hhciAqYnVzX25hbWUsIERCdXNFcnJvciAqZXJyb3IpOwogCiAKZGlmZiAtLWdpdCBhL2J1cy9hY3RpdmF0aW9uLmMgYi9idXMvYWN0aXZhdGlvbi5jCmluZGV4IDk5NDA0YjkuLjEyMTEzMjkgMTAwNjQ0Ci0tLSBhL2J1cy9hY3RpdmF0aW9uLmMKKysrIGIvYnVzL2FjdGl2YXRpb24uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgImFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJhY3RpdmF0aW9uLWV4aXQtY29kZXMuaCIKLSNpbmNsdWRlICJjb25maWctcGFyc2VyLmgiCiAjaW5jbHVkZSAiZGVza3RvcC1maWxlLmgiCiAjaW5jbHVkZSAiZGlzcGF0Y2guaCIKICNpbmNsdWRlICJzZXJ2aWNlcy5oIgpAQCAtNTQsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpLmUuIG51bWJlciBvZiBwZW5kaW5nIGFjdGl2YXRpb24gcmVxdWVzdHMsIG5vdCBwZW5kaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFjdGl2YXRpb25zIHBlciBzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgREJ1c0xpc3QgKmRpcmVjdG9yaWVzOworICBEQnVzSGFzaFRhYmxlICpkaXJlY3RvcmllczsKICAgREJ1c0hhc2hUYWJsZSAqZW52aXJvbm1lbnQ7CiB9OwogCkBAIC02MiwyMiArNjEsMjAgQEAKIHsKICAgaW50IHJlZmNvdW50OwogICBjaGFyICpkaXJfYzsKLSAgQnVzU2VydmljZURpckZsYWdzIGZsYWdzOwogICBEQnVzSGFzaFRhYmxlICplbnRyaWVzOwogfSBCdXNTZXJ2aWNlRGlyZWN0b3J5OwogCi1zdHJ1Y3QgQnVzQWN0aXZhdGlvbkVudHJ5Cit0eXBlZGVmIHN0cnVjdAogewogICBpbnQgcmVmY291bnQ7CiAgIGNoYXIgKm5hbWU7CiAgIGNoYXIgKmV4ZWM7CiAgIGNoYXIgKnVzZXI7CiAgIGNoYXIgKnN5c3RlbWRfc2VydmljZTsKLSAgY2hhciAqYXNzdW1lZF9hcHBhcm1vcl9sYWJlbDsKICAgdW5zaWduZWQgbG9uZyBtdGltZTsKICAgQnVzU2VydmljZURpcmVjdG9yeSAqc19kaXI7CiAgIGNoYXIgKmZpbGVuYW1lOwotfTsKK30gQnVzQWN0aXZhdGlvbkVudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCBCdXNQZW5kaW5nQWN0aXZhdGlvbkVudHJ5IEJ1c1BlbmRpbmdBY3RpdmF0aW9uRW50cnk7CiAKQEAgLTI0Nyw3ICsyNDQsNiBAQAogICBkYnVzX2ZyZWUgKGVudHJ5LT51c2VyKTsKICAgZGJ1c19mcmVlIChlbnRyeS0+ZmlsZW5hbWUpOwogICBkYnVzX2ZyZWUgKGVudHJ5LT5zeXN0ZW1kX3NlcnZpY2UpOwotICBkYnVzX2ZyZWUgKGVudHJ5LT5hc3N1bWVkX2FwcGFybW9yX2xhYmVsKTsKIAogICBkYnVzX2ZyZWUgKGVudHJ5KTsKIH0KQEAgLTI2MCwxMyArMjU2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgICplcnJvcikKIHsKICAgY2hhciAqbmFtZSwgKmV4ZWMsICp1c2VyLCAqZXhlY190bXAsICpzeXN0ZW1kX3NlcnZpY2U7Ci0gIGNoYXIgKmFzc3VtZWRfYXBwYXJtb3JfbGFiZWw7CiAgIEJ1c0FjdGl2YXRpb25FbnRyeSAqZW50cnk7CiAgIERCdXNTdGF0IHN0YXRfYnVmOwogICBEQnVzU3RyaW5nIGZpbGVfcGF0aDsKICAgREJ1c0Vycm9yIHRtcF9lcnJvcjsKICAgZGJ1c19ib29sX3QgcmV0dmFsOwotICBEQnVzU3RyaW5nIHN0cjsKIAogICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKIApAQCAtMjc3LDcgKzI3MSw2IEBACiAgIGV4ZWNfdG1wID0gTlVMTDsKICAgZW50cnkgPSBOVUxMOwogICBzeXN0ZW1kX3NlcnZpY2UgPSBOVUxMOwotICBhc3N1bWVkX2FwcGFybW9yX2xhYmVsID0gTlVMTDsKIAogICBkYnVzX2Vycm9yX2luaXQgKCZ0bXBfZXJyb3IpOwogCkBAIC0zMTUsMTggKzMwOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikpCiAgICAgZ290byBvdXQ7CiAKLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnN0cikpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICgmc3RyLCBleGVjX3RtcCkgfHwKLSAgICAgICFfZGJ1c19yZXBsYWNlX2luc3RhbGxfcHJlZml4ICgmc3RyKSB8fAotICAgICAgIV9kYnVzX3N0cmluZ19zdGVhbF9kYXRhICgmc3RyLCAmZXhlYykpCi0gICAgewotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZzdHIpOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gIF9kYnVzX3N0cmluZ19mcmVlICgmc3RyKTsKKyAgZXhlYyA9IF9kYnVzX3N0cmR1cCAoX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoZXhlY190bXApKTsKKyAgZGJ1c19mcmVlIChleGVjX3RtcCk7CisgIGV4ZWNfdG1wID0gTlVMTDsKIAogICAvKiB1c2VyIGlzIG5vdCBfcmVxdWlyZWRfIHVubGVzcyB3ZSBhcmUgdXNpbmcgc3lzdGVtIGFjdGl2YXRpb24gKi8KICAgaWYgKCFidXNfZGVza3RvcF9maWxlX2dldF9zdHJpbmcgKGRlc2t0b3BfZmlsZSwKQEAgLTM3MywyOCArMzU3LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAvKiBhc3N1bWVkIEFwcEFybW9yIGxhYmVsIGlzIG5ldmVyIHJlcXVpcmVkICovCi0gIGlmICghYnVzX2Rlc2t0b3BfZmlsZV9nZXRfc3RyaW5nIChkZXNrdG9wX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1NFUlZJQ0VfU0VDVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfU0VSVklDRV9BU1NVTUVEX0FQUEFSTU9SX0xBQkVMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzc3VtZWRfYXBwYXJtb3JfbGFiZWwsICZ0bXBfZXJyb3IpKQotICAgIHsKLSAgICAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19TRVQgKCZ0bXBfZXJyb3IpOwotICAgICAgLyogaWYgd2UgZ290IE9PTSwgdGhlbiBleGl0ICovCi0gICAgICBpZiAoZGJ1c19lcnJvcl9oYXNfbmFtZSAoJnRtcF9lcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpKQotICAgICAgICB7Ci0gICAgICAgICAgZGJ1c19tb3ZlX2Vycm9yICgmdG1wX2Vycm9yLCBlcnJvcik7Ci0gICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qIGlmIHdlIGhhdmUgZXJyb3IgYmVjYXVzZSB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0aGVuIGNvbnRpbnVlICovCi0gICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmdG1wX2Vycm9yKTsKLSAgICAgICAgICBkYnVzX2ZyZWUgKGFzc3VtZWRfYXBwYXJtb3JfbGFiZWwpOwotICAgICAgICAgIGFzc3VtZWRfYXBwYXJtb3JfbGFiZWwgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoJnRtcF9lcnJvcik7CiAKICAgZW50cnkgPSBfZGJ1c19oYXNoX3RhYmxlX2xvb2t1cF9zdHJpbmcgKHNfZGlyLT5lbnRyaWVzLApAQCAtNDAyLDY5ICszNjQsOCBAQAogCiAgIGlmIChlbnRyeSA9PSBOVUxMKSAvKiBOZXcgZmlsZSAqLwogICAgIHsKLSAgICAgIERCdXNTdHJpbmcgZXhwZWN0ZWRfbmFtZTsKLQotICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmV4cGVjdGVkX25hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKLSAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0gICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZleHBlY3RlZF9uYW1lLCBuYW1lKSB8fAotICAgICAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmZXhwZWN0ZWRfbmFtZSwgIi5zZXJ2aWNlIikpCi0gICAgICAgIHsKLSAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmV4cGVjdGVkX25hbWUpOwotICAgICAgICAgIEJVU19TRVRfT09NIChlcnJvcik7Ci0gICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgaWYgKF9kYnVzX3N0cmluZ19lcXVhbCAoJmV4cGVjdGVkX25hbWUsIGZpbGVuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJOYW1lIG9mIFwiJXNcIiBpcyBhcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZmaWxlX3BhdGgpKTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoc19kaXItPmZsYWdzICYgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX1NUUklDVF9OQU1JTkcpCi0gICAgICAgIHsKLSAgICAgICAgICBidXNfY29udGV4dF9sb2dfYW5kX3NldF9lcnJvciAoYWN0aXZhdGlvbi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsIGVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZpY2UgZmlsZSBcIiVzXCIgc2hvdWxkIGhhdmUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVlbiBuYW1lZCBcIiVzXCI6IG5vdCBsb2FkaW5nIGl0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZmlsZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZXhwZWN0ZWRfbmFtZSkpOwotICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZXhwZWN0ZWRfbmFtZSk7Ci0gICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGJ1c19jb250ZXh0X2dldF9zZXJ2aWNlaGVscGVyIChhY3RpdmF0aW9uLT5jb250ZXh0KSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgYnVzX2NvbnRleHRfbG9nIChhY3RpdmF0aW9uLT5jb250ZXh0LCBEQlVTX1NZU1RFTV9MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIGZpbGUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gbmFtZWQgXCIlc1wiICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgd2lsbCBub3Qgd29yayB3aXRoIHN5c3RlbSBidXMgYWN0aXZhdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZmaWxlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZXhwZWN0ZWRfbmFtZSkpOwotICAgICAgICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5IGVycm9yIG91dCBoZXJlLCBiZWNhdXNlICp0ZWNobmljYWxseSogaXQgY291bGQKLSAgICAgICAgICAgKiBzdGlsbCB3b3JrIG9uIHN5c3RlbWQgc3lzdGVtcywgd2hlcmUgd2UgdGVsbCBzeXN0ZW1kIHRvIHN0YXJ0IHRoZQotICAgICAgICAgICAqIFN5c3RlbWRTZXJ2aWNlIGluc3RlYWQgb2YgbGF1bmNoaW5nIGRidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKLSAgICAgICAgICAgKiBvdXJzZWx2ZXMuIEJ1dCBtYXliZSB3ZSBzaG91bGQ6Ci0gICAgICAgICAgICogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4NzQgKi8KLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLyogV2UgY291bGQgbWF5YmUgbG9nIG1pc21hdGNoZWQgbmFtZXMgZm9yIHNlc3Npb24gc2VydmljZXMgaW4KLSAgICAgICAgICAgKiBhIHVzZXItdmlzaWJsZSB3YXkgdG9vLCBidXQgbm90IHVudGlsCi0gICAgICAgICAgICogaHR0cHM6Ly9saW50aWFuLmRlYmlhbi5vcmcvdGFncy9kYnVzLXNlc3Npb24tc2VydmljZS13cm9uZy1uYW1lLmh0bWwKLSAgICAgICAgICAgKiBpcyBhIGJpdCBzaG9ydGVyLgotICAgICAgICAgICAqIGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODczICovCi0gICAgICAgICAgX2RidXNfdmVyYm9zZSAoIk5hbWUgb2YgXCIlc1wiIHNob3VsZCBjYW5vbmljYWxseSBiZSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZmlsZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZleHBlY3RlZF9uYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZleHBlY3RlZF9uYW1lKTsKLQogICAgICAgLyogRklYTUUgd2UgbmVlZCBhIGJldHRlci1kZWZpbmVkIGFsZ29yaXRobSBmb3Igd2hpY2ggc2VydmljZSBmaWxlIHRvCiAgICAgICAgKiBwaWNrIHRoYW4gIndoaWNoZXZlciBvbmUgaXMgZmlyc3QgaW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nIgotICAgICAgICogU2VlIGFsc28gaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4NzQKICAgICAgICAqLwogICAgICAgaWYgKF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX3N0cmluZyAoYWN0aXZhdGlvbi0+ZW50cmllcywgbmFtZSkpCiAgICAgICAgIHsKQEAgLTQ4NCw3ICszODUsNiBAQAogICAgICAgZW50cnktPmV4ZWMgPSBleGVjOwogICAgICAgZW50cnktPnVzZXIgPSB1c2VyOwogICAgICAgZW50cnktPnN5c3RlbWRfc2VydmljZSA9IHN5c3RlbWRfc2VydmljZTsKLSAgICAgIGVudHJ5LT5hc3N1bWVkX2FwcGFybW9yX2xhYmVsID0gYXNzdW1lZF9hcHBhcm1vcl9sYWJlbDsKICAgICAgIGVudHJ5LT5yZWZjb3VudCA9IDE7CiAKICAgICAgIC8qIG93bmVyc2hpcCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBlbnRyeSwgZG8gbm90IGZyZWUgc2VwYXJhdGVseSAqLwpAQCAtNDkyLDcgKzM5Miw2IEBACiAgICAgICBleGVjID0gTlVMTDsKICAgICAgIHVzZXIgPSBOVUxMOwogICAgICAgc3lzdGVtZF9zZXJ2aWNlID0gTlVMTDsKLSAgICAgIGFzc3VtZWRfYXBwYXJtb3JfbGFiZWwgPSBOVUxMOwogCiAgICAgICBlbnRyeS0+c19kaXIgPSBzX2RpcjsKICAgICAgIGVudHJ5LT5maWxlbmFtZSA9IF9kYnVzX3N0cmR1cCAoX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhIChmaWxlbmFtZSkpOwpAQCAtNTUwLDEwICs0NDksNiBAQAogICAgICAgZW50cnktPnN5c3RlbWRfc2VydmljZSA9IHN5c3RlbWRfc2VydmljZTsKICAgICAgIHN5c3RlbWRfc2VydmljZSA9IE5VTEw7CiAKLSAgICAgIGRidXNfZnJlZSAoZW50cnktPmFzc3VtZWRfYXBwYXJtb3JfbGFiZWwpOwotICAgICAgZW50cnktPmFzc3VtZWRfYXBwYXJtb3JfbGFiZWwgPSBhc3N1bWVkX2FwcGFybW9yX2xhYmVsOwotICAgICAgYXNzdW1lZF9hcHBhcm1vcl9sYWJlbCA9IE5VTEw7Ci0KICAgICAgIGlmICghX2RidXNfaGFzaF90YWJsZV9pbnNlcnRfc3RyaW5nIChhY3RpdmF0aW9uLT5lbnRyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uYW1lLCBidXNfYWN0aXZhdGlvbl9lbnRyeV9yZWYoZW50cnkpKSkKICAgICAgICAgewpAQCAtNTcxLDEyICs0NjYsMTAgQEAKIAogb3V0OgogICAvKiBpZiB0aGVzZSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgaW50byBlbnRyeSwgdGhlIHZhcmlhYmxlcyB3aWxsIGJlIE5VTEwgKi8KLSAgZGJ1c19mcmVlIChleGVjX3RtcCk7CiAgIGRidXNfZnJlZSAobmFtZSk7CiAgIGRidXNfZnJlZSAoZXhlYyk7CiAgIGRidXNfZnJlZSAodXNlcik7CiAgIGRidXNfZnJlZSAoc3lzdGVtZF9zZXJ2aWNlKTsKLSAgZGJ1c19mcmVlIChhc3N1bWVkX2FwcGFybW9yX2xhYmVsKTsKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZmaWxlX3BhdGgpOwogCiAgIGlmIChlbnRyeSkKQEAgLTgzNiw2ICs3MjksOSBAQAogc3RhdGljIGRidXNfYm9vbF90CiBwb3B1bGF0ZV9lbnZpcm9ubWVudCAoQnVzQWN0aXZhdGlvbiAqYWN0aXZhdGlvbikKIHsKKyAgREJ1c1N0cmluZyAgIGtleTsKKyAgREJ1c1N0cmluZyAgIHZhbHVlOworICBpbnQgICAgICAgICAgaTsKICAgY2hhciAgICAgICAqKmVudmlyb25tZW50OwogICBkYnVzX2Jvb2xfdCAgcmV0dmFsID0gRkFMU0U7CiAKQEAgLTg0NCw3ICs3NDAsNTAgQEAKICAgaWYgKGVudmlyb25tZW50ID09IE5VTEwpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIHJldHZhbCA9IF9kYnVzX2hhc2hfdGFibGVfZnJvbV9hcnJheSAoYWN0aXZhdGlvbi0+ZW52aXJvbm1lbnQsIGVudmlyb25tZW50LCAnPScpOworICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgma2V5KSkKKyAgICB7CisgICAgICAgIGRidXNfZnJlZV9zdHJpbmdfYXJyYXkgKGVudmlyb25tZW50KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmdmFsdWUpKQorICAgIHsKKyAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgma2V5KTsKKyAgICAgIGRidXNfZnJlZV9zdHJpbmdfYXJyYXkgKGVudmlyb25tZW50KTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgZW52aXJvbm1lbnRbaV0gIT0gTlVMTDsgaSsrKQorICAgIHsKKyAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJmtleSwgZW52aXJvbm1lbnRbaV0pKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKF9kYnVzX3N0cmluZ19zcGxpdF9vbl9ieXRlICgma2V5LCAnPScsICZ2YWx1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICpoYXNoX2tleSwgKmhhc2hfdmFsdWU7CisKKyAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19zdGVhbF9kYXRhICgma2V5LCAmaGFzaF9rZXkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19zdGVhbF9kYXRhICgmdmFsdWUsICZoYXNoX3ZhbHVlKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9zdHJpbmcgKGFjdGl2YXRpb24tPmVudmlyb25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2tleSwgaGFzaF92YWx1ZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKCZrZXksIDApOworICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKCZ2YWx1ZSwgMCk7CisgICAgfQorCisgIGlmIChlbnZpcm9ubWVudFtpXSAhPSBOVUxMKQorICAgIGdvdG8gb3V0OworCisgIHJldHZhbCA9IFRSVUU7CitvdXQ6CisKKyAgX2RidXNfc3RyaW5nX2ZyZWUgKCZrZXkpOworICBfZGJ1c19zdHJpbmdfZnJlZSAoJnZhbHVlKTsKICAgZGJ1c19mcmVlX3N0cmluZ19hcnJheSAoZW52aXJvbm1lbnQpOwogCiAgIHJldHVybiByZXR2YWw7CkBAIC04NzcsMTkgKzgxNiwyMyBAQAogICAgICAgZ290byBmYWlsZWQ7CiAgICAgfQogCi0gIF9kYnVzX2xpc3RfZm9yZWFjaCAoJmFjdGl2YXRpb24tPmRpcmVjdG9yaWVzLAotICAgICAgICAgICAgICAgICAgICAgIChEQnVzRm9yZWFjaEZ1bmN0aW9uKSBidXNfc2VydmljZV9kaXJlY3RvcnlfdW5yZWYsIE5VTEwpOwotICBfZGJ1c19saXN0X2NsZWFyICgmYWN0aXZhdGlvbi0+ZGlyZWN0b3JpZXMpOworICBpZiAoYWN0aXZhdGlvbi0+ZGlyZWN0b3JpZXMgIT0gTlVMTCkKKyAgICBfZGJ1c19oYXNoX3RhYmxlX3VucmVmIChhY3RpdmF0aW9uLT5kaXJlY3Rvcmllcyk7CisgIGFjdGl2YXRpb24tPmRpcmVjdG9yaWVzID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9TVFJJTkcsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQnVzRnJlZUZ1bmN0aW9uKWJ1c19zZXJ2aWNlX2RpcmVjdG9yeV91bnJlZik7CisKKyAgaWYgKGFjdGl2YXRpb24tPmRpcmVjdG9yaWVzID09IE5VTEwpCisgICAgeworICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKKyAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KIAogICBsaW5rID0gX2RidXNfbGlzdF9nZXRfZmlyc3RfbGluayAoZGlyZWN0b3JpZXMpOwogICB3aGlsZSAobGluayAhPSBOVUxMKQogICAgIHsKLSAgICAgIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKmNvbmZpZyA9IGxpbmstPmRhdGE7CiAgICAgICBCdXNTZXJ2aWNlRGlyZWN0b3J5ICpzX2RpcjsKIAotICAgICAgX2RidXNfYXNzZXJ0IChjb25maWctPnBhdGggIT0gTlVMTCk7Ci0KLSAgICAgIGRpciA9IF9kYnVzX3N0cmR1cCAoY29uZmlnLT5wYXRoKTsKKyAgICAgIGRpciA9IF9kYnVzX3N0cmR1cCAoKGNvbnN0IGNoYXIgKikgbGluay0+ZGF0YSk7CiAgICAgICBpZiAoIWRpcikKICAgICAgICAgewogICAgICAgICAgIEJVU19TRVRfT09NIChlcnJvcik7CkBAIC05MDYsNyArODQ5LDYgQEAKIAogICAgICAgc19kaXItPnJlZmNvdW50ID0gMTsKICAgICAgIHNfZGlyLT5kaXJfYyA9IGRpcjsKLSAgICAgIHNfZGlyLT5mbGFncyA9IGNvbmZpZy0+ZmxhZ3M7CiAKICAgICAgIHNfZGlyLT5lbnRyaWVzID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9TVFJJTkcsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoREJ1c0ZyZWVGdW5jdGlvbilidXNfYWN0aXZhdGlvbl9lbnRyeV91bnJlZik7CkBAIC05MTgsNyArODYwLDcgQEAKICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogCi0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmYWN0aXZhdGlvbi0+ZGlyZWN0b3JpZXMsIHNfZGlyKSkKKyAgICAgIGlmICghX2RidXNfaGFzaF90YWJsZV9pbnNlcnRfc3RyaW5nIChhY3RpdmF0aW9uLT5kaXJlY3Rvcmllcywgc19kaXItPmRpcl9jLCBzX2RpcikpCiAgICAgICAgIHsKICAgICAgICAgICBidXNfc2VydmljZV9kaXJlY3RvcnlfdW5yZWYgKHNfZGlyKTsKICAgICAgICAgICBCVVNfU0VUX09PTSAoZXJyb3IpOwpAQCAtMTAyNSwxMSArOTY3LDggQEAKICAgICBfZGJ1c19oYXNoX3RhYmxlX3VucmVmIChhY3RpdmF0aW9uLT5lbnRyaWVzKTsKICAgaWYgKGFjdGl2YXRpb24tPnBlbmRpbmdfYWN0aXZhdGlvbnMpCiAgICAgX2RidXNfaGFzaF90YWJsZV91bnJlZiAoYWN0aXZhdGlvbi0+cGVuZGluZ19hY3RpdmF0aW9ucyk7Ci0KLSAgX2RidXNfbGlzdF9mb3JlYWNoICgmYWN0aXZhdGlvbi0+ZGlyZWN0b3JpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgKERCdXNGb3JlYWNoRnVuY3Rpb24pIGJ1c19zZXJ2aWNlX2RpcmVjdG9yeV91bnJlZiwgTlVMTCk7Ci0gIF9kYnVzX2xpc3RfY2xlYXIgKCZhY3RpdmF0aW9uLT5kaXJlY3Rvcmllcyk7Ci0KKyAgaWYgKGFjdGl2YXRpb24tPmRpcmVjdG9yaWVzKQorICAgIF9kYnVzX2hhc2hfdGFibGVfdW5yZWYgKGFjdGl2YXRpb24tPmRpcmVjdG9yaWVzKTsKICAgaWYgKGFjdGl2YXRpb24tPmVudmlyb25tZW50KQogICAgIF9kYnVzX2hhc2hfdGFibGVfdW5yZWYgKGFjdGl2YXRpb24tPmVudmlyb25tZW50KTsKIApAQCAtMTI2Nyw3ICsxMjA2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWN0aXZhdGlvbl9tZXNzYWdlKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgICAgICAgICBsaW5rID0gbmV4dDsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0xNTMwLDEyICsxNDY4LDcgQEAKIHBlbmRpbmdfYWN0aXZhdGlvbl90aW1lZF9vdXQgKHZvaWQgKmRhdGEpCiB7CiAgIEJ1c1BlbmRpbmdBY3RpdmF0aW9uICpwZW5kaW5nX2FjdGl2YXRpb24gPSBkYXRhOwotICBCdXNDb250ZXh0ICpjb250ZXh0OwogICBEQnVzRXJyb3IgZXJyb3I7Ci0gIGludCB0aW1lb3V0OwotCi0gIGNvbnRleHQgPSBwZW5kaW5nX2FjdGl2YXRpb24tPmFjdGl2YXRpb24tPmNvbnRleHQ7Ci0gIHRpbWVvdXQgPSBidXNfY29udGV4dF9nZXRfYWN0aXZhdGlvbl90aW1lb3V0IChjb250ZXh0KTsKIAogICAvKiBLaWxsIHRoZSBzcGF3bmVkIHByb2Nlc3MsIHNpbmNlIGl0IHN1Y2tzCiAgICAqIChub3Qgc3VyZSB0aGlzIGlzIHdoYXQgd2Ugd2FudCB0byBkbywgYnV0CkBAIC0xNTQ2LDExICsxNDc5LDEwIEBACiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogCi0gIGJ1c19jb250ZXh0X2xvZ19hbmRfc2V0X2Vycm9yIChjb250ZXh0LCBEQlVTX1NZU1RFTV9MT0dfV0FSTklORywgJmVycm9yLAotICAgICAgICAgICAgICAgICAgIERCVVNfRVJST1JfVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gYWN0aXZhdGUgc2VydmljZSAnJXMnOiB0aW1lZCBvdXQgIgotICAgICAgICAgICAgICAgICAgICIoc2VydmljZV9zdGFydF90aW1lb3V0PSVkbXMpIiwKLSAgICAgICAgICAgICAgICAgICBwZW5kaW5nX2FjdGl2YXRpb24tPnNlcnZpY2VfbmFtZSwgdGltZW91dCk7CisgIGJ1c19jb250ZXh0X2xvZ19hbmRfc2V0X2Vycm9yIChwZW5kaW5nX2FjdGl2YXRpb24tPmFjdGl2YXRpb24tPmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX0lORk8sICZlcnJvciwgREJVU19FUlJPUl9USU1FRF9PVVQsCisgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBhY3RpdmF0ZSBzZXJ2aWNlICclcyc6IHRpbWVkIG91dCIsCisgICAgICAgICAgICAgICAgICAgcGVuZGluZ19hY3RpdmF0aW9uLT5zZXJ2aWNlX25hbWUpOwogCiAgIHBlbmRpbmdfYWN0aXZhdGlvbl9mYWlsZWQgKHBlbmRpbmdfYWN0aXZhdGlvbiwgJmVycm9yKTsKIApAQCAtMTYwMSwxNCArMTUzMywxNSBAQAogc3RhdGljIGRidXNfYm9vbF90CiB1cGRhdGVfc2VydmljZV9jYWNoZSAoQnVzQWN0aXZhdGlvbiAqYWN0aXZhdGlvbiwgREJ1c0Vycm9yICplcnJvcikKIHsKLSAgREJ1c0xpc3QgKml0ZXI7CisgIERCdXNIYXNoSXRlciBpdGVyOwogCi0gIGZvciAoaXRlciA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKCZhY3RpdmF0aW9uLT5kaXJlY3Rvcmllcyk7Ci0gICAgICAgaXRlciAhPSBOVUxMOwotICAgICAgIGl0ZXIgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZhY3RpdmF0aW9uLT5kaXJlY3RvcmllcywgaXRlcikpCisgIF9kYnVzX2hhc2hfaXRlcl9pbml0IChhY3RpdmF0aW9uLT5kaXJlY3RvcmllcywgJml0ZXIpOworICB3aGlsZSAoX2RidXNfaGFzaF9pdGVyX25leHQgKCZpdGVyKSkKICAgICB7CiAgICAgICBEQnVzRXJyb3IgdG1wX2Vycm9yOwotICAgICAgQnVzU2VydmljZURpcmVjdG9yeSAqc19kaXIgPSBpdGVyLT5kYXRhOworICAgICAgQnVzU2VydmljZURpcmVjdG9yeSAqc19kaXI7CisKKyAgICAgIHNfZGlyID0gX2RidXNfaGFzaF9pdGVyX2dldF92YWx1ZSAoJml0ZXIpOwogCiAgICAgICBkYnVzX2Vycm9yX2luaXQgKCZ0bXBfZXJyb3IpOwogICAgICAgaWYgKCF1cGRhdGVfZGlyZWN0b3J5IChhY3RpdmF0aW9uLCBzX2RpciwgJnRtcF9lcnJvcikpCkBAIC0xNjY3LDcgKzE2MDAsNTEgQEAKIHN0YXRpYyBjaGFyICoqCiBidXNfYWN0aXZhdGlvbl9nZXRfZW52aXJvbm1lbnQgKEJ1c0FjdGl2YXRpb24gKmFjdGl2YXRpb24pCiB7Ci0gIHJldHVybiBfZGJ1c19oYXNoX3RhYmxlX3RvX2FycmF5IChhY3RpdmF0aW9uLT5lbnZpcm9ubWVudCwgJz0nKTsKKyAgY2hhciAqKmVudmlyb25tZW50OworICBpbnQgaSwgbGVuZ3RoOworICBEQnVzU3RyaW5nIGVudHJ5OworICBEQnVzSGFzaEl0ZXIgaXRlcjsKKworICBsZW5ndGggPSBfZGJ1c19oYXNoX3RhYmxlX2dldF9uX2VudHJpZXMgKGFjdGl2YXRpb24tPmVudmlyb25tZW50KTsKKworICBlbnZpcm9ubWVudCA9IGRidXNfbmV3MCAoY2hhciAqLCBsZW5ndGggKyAxKTsKKworICBpZiAoZW52aXJvbm1lbnQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpID0gMDsKKyAgX2RidXNfaGFzaF9pdGVyX2luaXQgKGFjdGl2YXRpb24tPmVudmlyb25tZW50LCAmaXRlcik7CisKKyAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmVudHJ5KSkKKyAgICB7CisgICAgICBkYnVzX2ZyZWVfc3RyaW5nX2FycmF5IChlbnZpcm9ubWVudCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgd2hpbGUgKF9kYnVzX2hhc2hfaXRlcl9uZXh0ICgmaXRlcikpCisgICAgeworICAgICAgY29uc3QgY2hhciAqa2V5LCAqdmFsdWU7CisKKyAgICAgIGtleSA9IChjb25zdCBjaGFyICopIF9kYnVzX2hhc2hfaXRlcl9nZXRfc3RyaW5nX2tleSAoJml0ZXIpOworICAgICAgdmFsdWUgPSAoY29uc3QgY2hhciAqKSBfZGJ1c19oYXNoX2l0ZXJfZ2V0X3ZhbHVlICgmaXRlcik7CisKKyAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKCZlbnRyeSwgIiVzPSVzIiwga2V5LCB2YWx1ZSkpCisgICAgICAgIGJyZWFrOworCisgICAgICBpZiAoIV9kYnVzX3N0cmluZ19zdGVhbF9kYXRhICgmZW50cnksIGVudmlyb25tZW50ICsgaSkpCisgICAgICAgIGJyZWFrOworICAgICAgaSsrOworICAgIH0KKworICBfZGJ1c19zdHJpbmdfZnJlZSAoJmVudHJ5KTsKKworICBpZiAoaSAhPSBsZW5ndGgpCisgICAgeworICAgICAgZGJ1c19mcmVlX3N0cmluZ19hcnJheSAoZW52aXJvbm1lbnQpOworICAgICAgZW52aXJvbm1lbnQgPSBOVUxMOworICAgIH0KKworICByZXR1cm4gZW52aXJvbm1lbnQ7CiB9CiAKIGRidXNfYm9vbF90CkBAIC0xNzU2LDIwICsxNzMzLDE1IEBACiAgIGRidXNfYm9vbF90IHJldHZhbDsKICAgZGJ1c19ib29sX3Qgd2FzX3BlbmRpbmdfYWN0aXZhdGlvbjsKICAgREJ1c1N0cmluZyBjb21tYW5kOwotICBpbnQgbGltaXQ7Ci0gIERCdXNTcGF3bkZsYWdzIGZsYWdzID0gREJVU19TUEFXTl9OT05FOwogCiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCi0gIGxpbWl0ID0gYnVzX2NvbnRleHRfZ2V0X21heF9wZW5kaW5nX2FjdGl2YXRpb25zIChhY3RpdmF0aW9uLT5jb250ZXh0KTsKLQotICBpZiAoYWN0aXZhdGlvbi0+bl9wZW5kaW5nX2FjdGl2YXRpb25zID49IGxpbWl0KQorICBpZiAoYWN0aXZhdGlvbi0+bl9wZW5kaW5nX2FjdGl2YXRpb25zID49CisgICAgICBidXNfY29udGV4dF9nZXRfbWF4X3BlbmRpbmdfYWN0aXZhdGlvbnMgKGFjdGl2YXRpb24tPmNvbnRleHQpKQogICAgIHsKICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQsCi0gICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwZW5kaW5nIGFjdGl2YXRpb25zIGhhcyBiZWVuICIKLSAgICAgICAgICAgICAgICAgICAgICAicmVhY2hlZCwgYWN0aXZhdGlvbiBvZiAlcyBmYWlsZWQgIgotICAgICAgICAgICAgICAgICAgICAgICIobWF4X3BlbmRpbmdfc2VydmljZV9zdGFydHM9JWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUsIGxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIHBlbmRpbmcgYWN0aXZhdGlvbnMgaGFzIGJlZW4gcmVhY2hlZCwgYWN0aXZhdGlvbiBvZiAlcyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfbmFtZSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCkBAIC0xNzg3LDI0ICsxNzU5LDYgQEAKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICBpZiAoYXV0b19hY3RpdmF0aW9uICYmCi0gICAgICBlbnRyeSAhPSBOVUxMICYmCi0gICAgICAhYnVzX2NvbnRleHRfY2hlY2tfc2VjdXJpdHlfcG9saWN5IChhY3RpdmF0aW9uLT5jb250ZXh0LAotICAgICAgICB0cmFuc2FjdGlvbiwKLSAgICAgICAgY29ubmVjdGlvbiwgLyogc2VuZGVyICovCi0gICAgICAgIE5VTEwsIC8qIGFkZHJlc3NlZCByZWNpcGllbnQgKi8KLSAgICAgICAgTlVMTCwgLyogcHJvcG9zZWQgcmVjaXBpZW50ICovCi0gICAgICAgIGFjdGl2YXRpb25fbWVzc2FnZSwKLSAgICAgICAgZW50cnksCi0gICAgICAgIGVycm9yKSkKLSAgICB7Ci0gICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7Ci0gICAgICBfZGJ1c192ZXJib3NlICgiYWN0aXZhdGlvbiBub3QgYXV0aG9yaXplZDogJXM6ICVzXG4iLAotICAgICAgICAgIGVycm9yICE9IE5VTEwgPyBlcnJvci0+bmFtZSA6ICIoZXJyb3IgaWdub3JlZCkiLAotICAgICAgICAgIGVycm9yICE9IE5VTEwgPyBlcnJvci0+bWVzc2FnZSA6ICIoZXJyb3IgaWdub3JlZCkiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KICAgLyogQnlwYXNzIHRoZSByZWdpc3RyeSBsb29rdXAgaWYgd2UncmUgYXV0by1hY3RpdmF0aW5nLCBidXNfZGlzcGF0Y2ggd291bGQgbm90CiAgICAqIGNhbGwgdXMgaWYgdGhlIHNlcnZpY2UgaXMgYWxyZWFkeSBhY3RpdmUuCiAgICAqLwpAQCAtMjAxMyw3ICsxOTY3LDYgQEAKICAgICAgICAgICBEQnVzU3RyaW5nIHNlcnZpY2Vfc3RyaW5nOwogICAgICAgICAgIEJ1c1NlcnZpY2UgKnNlcnZpY2U7CiAgICAgICAgICAgQnVzUmVnaXN0cnkgKnJlZ2lzdHJ5OwotICAgICAgICAgIERCdXNDb25uZWN0aW9uICpzeXN0ZW1kID0gTlVMTDsKIAogICAgICAgICAgIC8qIE9LLCB3ZSBoYXZlIGEgc3lzdGVtZCBzZXJ2aWNlIGNvbmZpZ3VyZWQgZm9yIHRoaXMgZW50cnksCiAgICAgICAgICAgICAgaGVuY2UgbGV0J3MgZW5xdWV1ZSBhbiBhY3RpdmF0aW9uIHJlcXVlc3QgbWVzc2FnZS4gVGhpcwpAQCAtMjA2MiwxNCArMjAxNSwxMSBAQAogICAgICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmc2VydmljZV9zdHJpbmcsICJvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEiKTsKICAgICAgICAgICBzZXJ2aWNlID0gYnVzX3JlZ2lzdHJ5X2xvb2t1cCAocmVnaXN0cnksICZzZXJ2aWNlX3N0cmluZyk7CiAKLSAgICAgICAgICBpZiAoc2VydmljZSkKLSAgICAgICAgICAgIHN5c3RlbWQgPSBidXNfc2VydmljZV9nZXRfcHJpbWFyeV9vd25lcnNfY29ubmVjdGlvbiAoc2VydmljZSk7Ci0KICAgICAgICAgICAvKiBGb2xsb3dpbmcgdGhlIGdlbmVyYWwgcHJpbmNpcGxlIG9mICJsb2cgZWFybHkgYW5kIG9mdGVuIiwKICAgICAgICAgICAgKiB3ZSBjYXB0dXJlIHRoYXQgd2UgKndhbnQqIHRvIHNlbmQgdGhlIGFjdGl2YXRpb24gbWVzc2FnZSwgZXZlbiBpZgogICAgICAgICAgICAqIHN5c3RlbWQgaXMgbm90IGFjdHVhbGx5IHRoZXJlIHRvIHJlY2VpdmUgaXQgeWV0ICovCiAgICAgICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAoYWN0aXZhdGlvbl90cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBzeXN0ZW1kLCBtZXNzYWdlKSkKKyAgICAgICAgICAgICAgICBOVUxMLCBtZXNzYWdlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKICAgICAgICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKQEAgLTIwNzksMjMgKzIwMjksMTkgQEAKICAgICAgICAgICBpZiAoc2VydmljZSAhPSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBidXNfY29udGV4dF9sb2cgKGFjdGl2YXRpb24tPmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX0lORk8sICJBY3RpdmF0aW5nIHZpYSBzeXN0ZW1kOiBzZXJ2aWNlIG5hbWU9JyVzJyB1bml0PSclcycgcmVxdWVzdGVkIGJ5ICclcycgKCVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX0lORk8sICJBY3RpdmF0aW5nIHZpYSBzeXN0ZW1kOiBzZXJ2aWNlIG5hbWU9JyVzJyB1bml0PSclcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3lzdGVtZF9zZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jb25uZWN0aW9uX2dldF9uYW1lIChjb25uZWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbG9naW5mbyAoY29ubmVjdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zeXN0ZW1kX3NlcnZpY2UpOwogICAgICAgICAgICAgICAvKiBXb25kZXJmdWwsIHN5c3RlbWQgaXMgY29ubmVjdGVkLCBsZXQncyBqdXN0IHNlbmQgdGhlIG1zZyAqLwotICAgICAgICAgICAgICByZXR2YWwgPSBidXNfZGlzcGF0Y2hfbWF0Y2hlcyAoYWN0aXZhdGlvbl90cmFuc2FjdGlvbiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQsIG1lc3NhZ2UsIGVycm9yKTsKKyAgICAgICAgICAgICAgcmV0dmFsID0gYnVzX2Rpc3BhdGNoX21hdGNoZXMgKGFjdGl2YXRpb25fdHJhbnNhY3Rpb24sIE5VTEwsIGJ1c19zZXJ2aWNlX2dldF9wcmltYXJ5X293bmVyc19jb25uZWN0aW9uIChzZXJ2aWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGVycm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGJ1c19jb250ZXh0X2xvZyAoYWN0aXZhdGlvbi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1NZU1RFTV9MT0dfSU5GTywgIkFjdGl2YXRpbmcgc3lzdGVtZCB0byBoYW5kLW9mZjogc2VydmljZSBuYW1lPSclcycgdW5pdD0nJXMnIHJlcXVlc3RlZCBieSAnJXMnICglcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfU1lTVEVNX0xPR19JTkZPLCAiQWN0aXZhdGluZyBzeXN0ZW1kIHRvIGhhbmQtb2ZmOiBzZXJ2aWNlIG5hbWU9JyVzJyB1bml0PSclcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3lzdGVtZF9zZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jb25uZWN0aW9uX2dldF9uYW1lIChjb25uZWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbG9naW5mbyAoY29ubmVjdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zeXN0ZW1kX3NlcnZpY2UpOwogICAgICAgICAgICAgICAvKiBzeXN0ZW1kIGlzIG5vdCBhcm91bmQsIGxldCdzICJhY3RpdmF0ZSIgaXQuICovCiAgICAgICAgICAgICAgIHJldHZhbCA9IGJ1c19hY3RpdmF0aW9uX2FjdGl2YXRlX3NlcnZpY2UgKGFjdGl2YXRpb24sIE5VTEwsIGFjdGl2YXRpb25fdHJhbnNhY3Rpb24sIFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICJvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEiLCBlcnJvcik7CkBAIC0yMjA3LDI3ICsyMTUzLDE5IEBACiAgIF9kYnVzX3ZlcmJvc2UgKCJTcGF3bmluZyAlcyAuLi5cbiIsIGFyZ3ZbMF0pOwogICBpZiAoc2VydmljZWhlbHBlciAhPSBOVUxMKQogICAgIGJ1c19jb250ZXh0X2xvZyAoYWN0aXZhdGlvbi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIERCVVNfU1lTVEVNX0xPR19JTkZPLCAiQWN0aXZhdGluZyBzZXJ2aWNlIG5hbWU9JyVzJyByZXF1ZXN0ZWQgYnkgJyVzJyAoJXMpICh1c2luZyBzZXJ2aWNlaGVscGVyKSIsCi0gICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbmFtZSAoY29ubmVjdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbG9naW5mbyAoY29ubmVjdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX0lORk8sICJBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nJXMnICh1c2luZyBzZXJ2aWNlaGVscGVyKSIsCisgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUpOwogICBlbHNlCiAgICAgYnVzX2NvbnRleHRfbG9nIChhY3RpdmF0aW9uLT5jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgREJVU19TWVNURU1fTE9HX0lORk8sICJBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nJXMnIHJlcXVlc3RlZCBieSAnJXMnICglcykiLAotICAgICAgICAgICAgICAgICAgICAgc2VydmljZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgYnVzX2Nvbm5lY3Rpb25fZ2V0X25hbWUgKGNvbm5lY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgYnVzX2Nvbm5lY3Rpb25fZ2V0X2xvZ2luZm8gKGNvbm5lY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgIERCVVNfU1lTVEVNX0xPR19JTkZPLCAiQWN0aXZhdGluZyBzZXJ2aWNlIG5hbWU9JyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUpOwogCiAgIGRidXNfZXJyb3JfaW5pdCAoJnRtcF9lcnJvcik7CiAKLSAgaWYgKGJ1c19jb250ZXh0X2dldF91c2luZ19zeXNsb2cgKGFjdGl2YXRpb24tPmNvbnRleHQpKQotICAgIGZsYWdzIHw9IERCVVNfU1BBV05fUkVESVJFQ1RfT1VUUFVUOwotCiAgIGlmICghX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICgmcGVuZGluZ19hY3RpdmF0aW9uLT5iYWJ5c2l0dGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX3NldHVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfZXJyb3IpKQpAQCAtMjM2NSwxOSArMjMwMywxMyBAQAogICByZXR1cm4gVFJVRTsKIH0KIAotY29uc3QgY2hhciAqCi1idXNfYWN0aXZhdGlvbl9lbnRyeV9nZXRfYXNzdW1lZF9hcHBhcm1vcl9sYWJlbCAoQnVzQWN0aXZhdGlvbkVudHJ5ICplbnRyeSkKLXsKLSAgcmV0dXJuIGVudHJ5LT5hc3N1bWVkX2FwcGFybW9yX2xhYmVsOwotfQotCiAjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLSNkZWZpbmUgU0VSVklDRV9OQU1FXzEgImNvbS5leGFtcGxlLk15U2VydmljZTEiCi0jZGVmaW5lIFNFUlZJQ0VfTkFNRV8yICJvcmcuZXhhbXBsZS5NeVNlcnZpY2UyIgotI2RlZmluZSBTRVJWSUNFX05BTUVfMyAibmV0LmV4YW1wbGUuTXlTZXJ2aWNlMyIKKyNkZWZpbmUgU0VSVklDRV9OQU1FXzEgIk15U2VydmljZTEiCisjZGVmaW5lIFNFUlZJQ0VfTkFNRV8yICJNeVNlcnZpY2UyIgorI2RlZmluZSBTRVJWSUNFX05BTUVfMyAiTXlTZXJ2aWNlMyIKIAogI2RlZmluZSBTRVJWSUNFX0ZJTEVfMSAic2VydmljZS0xLnNlcnZpY2UiCiAjZGVmaW5lIFNFUlZJQ0VfRklMRV8yICJzZXJ2aWNlLTIuc2VydmljZSIKQEAgLTI1MDQsOCArMjQzNiwyMSBAQAogc3RhdGljIGRidXNfYm9vbF90CiBpbml0X3NlcnZpY2VfcmVsb2FkX3Rlc3QgKERCdXNTdHJpbmcgKmRpcikKIHsKLSAgaWYgKCFfZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChkaXIsIE5VTEwpKQotICAgIHJldHVybiBGQUxTRTsKKyAgREJ1c1N0YXQgc3RhdF9idWY7CisKKyAgaWYgKCFfZGJ1c19zdGF0IChkaXIsICZzdGF0X2J1ZiwgTlVMTCkpCisgICAgeworICAgICAgaWYgKCFfZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChkaXIsIE5VTEwpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKCF0ZXN0X3JlbW92ZV9kaXJlY3RvcnkgKGRpcikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgaWYgKCFfZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChkaXIsIE5VTEwpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQogCiAgIC8qIENyZWF0ZSBvbmUgaW5pdGlhbCBmaWxlICovCiAgIGlmICghdGVzdF9jcmVhdGVfc2VydmljZV9maWxlIChkaXIsIFNFUlZJQ0VfRklMRV8xLCBTRVJWSUNFX05BTUVfMSwgImV4ZWMtMSIpKQpAQCAtMjU4NCwxMyArMjUyOSw5IEBACiB9CiAKIHN0YXRpYyBkYnVzX2Jvb2xfdAotZG9fc2VydmljZV9yZWxvYWRfdGVzdCAoY29uc3QgREJ1c1N0cmluZyAqdGVzdF9kYXRhX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgIERCdXNTdHJpbmcgICAgICAgKmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfYm9vbF90ICAgICAgIG9vbV90ZXN0KQorZG9fc2VydmljZV9yZWxvYWRfdGVzdCAoREJ1c1N0cmluZyAqZGlyLCBkYnVzX2Jvb2xfdCBvb21fdGVzdCkKIHsKICAgQnVzQWN0aXZhdGlvbiAqYWN0aXZhdGlvbjsKLSAgQnVzQ29uZmlnU2VydmljZURpciBjb25maWc7Ci0gIEJ1c0NvbnRleHQgICAgKmNvbnRleHQ7CiAgIERCdXNTdHJpbmcgICAgIGFkZHJlc3M7CiAgIERCdXNMaXN0ICAgICAgKmRpcmVjdG9yaWVzOwogICBDaGVja0RhdGEgICAgICBkOwpAQCAtMjU5OCwxOCArMjUzOSwxMCBAQAogICBkaXJlY3RvcmllcyA9IE5VTEw7CiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmYWRkcmVzcywgIiIpOwogCi0gIGNvbmZpZy5wYXRoID0gX2RidXNfc3RyaW5nX2dldF9kYXRhIChkaXIpOwotICBjb25maWcuZmxhZ3MgPSBCVVNfU0VSVklDRV9ESVJfRkxBR1NfTk9ORTsKLQotICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmZGlyZWN0b3JpZXMsICZjb25maWcpKQorICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmZGlyZWN0b3JpZXMsIF9kYnVzX3N0cmluZ19nZXRfZGF0YSAoZGlyKSkpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIGNvbnRleHQgPSBidXNfY29udGV4dF9uZXdfdGVzdCAodGVzdF9kYXRhX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWQtY29uZmlnLWZpbGVzL2RlYnVnLWFsbG93LWFsbC5jb25mIik7Ci0gIGlmIChjb250ZXh0ID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGFjdGl2YXRpb24gPSBidXNfYWN0aXZhdGlvbl9uZXcgKGNvbnRleHQsICZhZGRyZXNzLCAmZGlyZWN0b3JpZXMsIE5VTEwpOworICBhY3RpdmF0aW9uID0gYnVzX2FjdGl2YXRpb25fbmV3IChOVUxMLCAmYWRkcmVzcywgJmRpcmVjdG9yaWVzLCBOVUxMKTsKICAgaWYgKCFhY3RpdmF0aW9uKQogICAgIHJldHVybiBGQUxTRTsKIApAQCAtMjY3MCw3ICsyNjAzLDYgQEAKIAogICBidXNfYWN0aXZhdGlvbl91bnJlZiAoYWN0aXZhdGlvbik7CiAgIF9kYnVzX2xpc3RfY2xlYXIgKCZkaXJlY3Rvcmllcyk7Ci0gIGJ1c19jb250ZXh0X3VucmVmIChjb250ZXh0KTsKIAogICByZXR1cm4gVFJVRTsKIH0KQEAgLTI3MDEsMTkgKzI2MzMsMTYgQEAKICAgaWYgKCFpbml0X3NlcnZpY2VfcmVsb2FkX3Rlc3QgKCZkaXJlY3RvcnkpKQogICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBpbml0aWF0ZSBzZXJ2aWNlIHJlbG9hZCB0ZXN0Iik7CiAKLSAgaWYgKCFkb19zZXJ2aWNlX3JlbG9hZF90ZXN0ICh0ZXN0X2RhdGFfZGlyLCAmZGlyZWN0b3J5LCBGQUxTRSkpCisgIGlmICghZG9fc2VydmljZV9yZWxvYWRfdGVzdCAoJmRpcmVjdG9yeSwgRkFMU0UpKQogICAgIHsKICAgICAgIC8qIERvIG5vdGhpbmc/ICovCiAgICAgfQogCi0gIGlmICghY2xlYW51cF9zZXJ2aWNlX3JlbG9hZF90ZXN0ICgmZGlyZWN0b3J5KSkKLSAgICBnb3RvIG91dDsKLQogICAvKiBEbyBPT00gdGVzdHMgKi8KICAgaWYgKCFpbml0X3NlcnZpY2VfcmVsb2FkX3Rlc3QgKCZkaXJlY3RvcnkpKQogICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBpbml0aWF0ZSBzZXJ2aWNlIHJlbG9hZCB0ZXN0Iik7CiAKLSAgaWYgKCFkb19zZXJ2aWNlX3JlbG9hZF90ZXN0ICh0ZXN0X2RhdGFfZGlyLCAmZGlyZWN0b3J5LCBUUlVFKSkKKyAgaWYgKCFkb19zZXJ2aWNlX3JlbG9hZF90ZXN0ICgmZGlyZWN0b3J5LCBUUlVFKSkKICAgICB7CiAgICAgICAvKiBEbyBub3RoaW5nPyAqLwogICAgIH0KZGlmZiAtLWdpdCBhL2J1cy9hY3RpdmF0aW9uLmggYi9idXMvYWN0aXZhdGlvbi5oCmluZGV4IDdhZThhZGUuLmZjNWQ0MjYgMTAwNjQ0Ci0tLSBhL2J1cy9hY3RpdmF0aW9uLmgKKysrIGIvYnVzL2FjdGl2YXRpb24uaApAQCAtNjQsNiArNjQsNSBAQAogCQkJCQkJCQkgICAgIEJ1c1NlcnZpY2UgICAgICAgICpzZXJ2aWNlLAogCQkJCQkJCQkgICAgIEJ1c1RyYW5zYWN0aW9uICAgICp0cmFuc2FjdGlvbik7CiAKLWNvbnN0IGNoYXIgKmJ1c19hY3RpdmF0aW9uX2VudHJ5X2dldF9hc3N1bWVkX2FwcGFybW9yX2xhYmVsIChCdXNBY3RpdmF0aW9uRW50cnkgKmVudHJ5KTsKIAogI2VuZGlmIC8qIEJVU19BQ1RJVkFUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2J1cy9hcHBhcm1vci5jIGIvYnVzL2FwcGFybW9yLmMKaW5kZXggOTg1ZjVlOS4uM2JhODRkOCAxMDA2NDQKLS0tIGEvYnVzL2FwcGFybW9yLmMKKysrIGIvYnVzL2FwcGFybW9yLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaWJhdWRpdC5oPgogI2VuZGlmIC8qIEhBVkVfTElCQVVESVQgKi8KIAotI2luY2x1ZGUgImFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJhdWRpdC5oIgogI2luY2x1ZGUgImNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJ1dGlscy5oIgpAQCAtNjA3LDkgKzYwNiw3IEBACiAgIEJ1c0FwcEFybW9yQ29uZmluZW1lbnQgKmNvbiA9IE5VTEw7CiAgIERCdXNTdHJpbmcgcXN0ciwgYXV4ZGF0YTsKICAgZGJ1c19ib29sX3QgZnJlZV9hdXhkYXRhID0gRkFMU0U7Ci0gIC8qIHRoZSBBcHBBcm1vciBBUEkgdXNlcyBwb2ludGVycyB0byBpbnQgZm9yIHBvaW50ZXJzIHRvIGJvb2xlYW4sIGFuZAotICAgKiBpbnQgaXMgbm90IHN0cmljdGx5IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgZGJ1c19ib29sX3QgKi8KLSAgaW50IGFsbG93ID0gRkFMU0UsIGF1ZGl0ID0gVFJVRTsKKyAgZGJ1c19ib29sX3QgYWxsb3cgPSBGQUxTRSwgYXVkaXQgPSBUUlVFOwogICB1bnNpZ25lZCBsb25nIHBpZDsKICAgaW50IHJlcywgc2Vycm5vID0gMDsKIApAQCAtNzQwLDIxICs3MzcsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICplcnJvcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKmRlc3RpbmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzQWN0aXZhdGlvbkVudHJ5ICphY3RpdmF0aW9uX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgKmVycm9yKQogewogI2lmZGVmIEhBVkVfQVBQQVJNT1IKICAgQnVzQXBwQXJtb3JDb25maW5lbWVudCAqc3JjX2NvbiA9IE5VTEwsICpkc3RfY29uID0gTlVMTDsKICAgREJ1c1N0cmluZyBxc3RyLCBhdXhkYXRhOwotICBpbnQgc3JjX2FsbG93ID0gRkFMU0UsIGRzdF9hbGxvdyA9IEZBTFNFOwotICBpbnQgc3JjX2F1ZGl0ID0gVFJVRSwgZHN0X2F1ZGl0ID0gVFJVRTsKKyAgZGJ1c19ib29sX3Qgc3JjX2FsbG93ID0gRkFMU0UsIGRzdF9hbGxvdyA9IEZBTFNFOworICBkYnVzX2Jvb2xfdCBzcmNfYXVkaXQgPSBUUlVFLCBkc3RfYXVkaXQgPSBUUlVFOwogICBkYnVzX2Jvb2xfdCBmcmVlX2F1eGRhdGEgPSBGQUxTRTsKICAgdW5zaWduZWQgbG9uZyBwaWQ7CiAgIGludCBsZW4sIHJlcywgc3JjX2Vycm5vID0gMCwgZHN0X2Vycm5vID0gMDsKICAgdWludDMyX3Qgc3JjX3Blcm0gPSBBQV9EQlVTX1NFTkQsIGRzdF9wZXJtID0gQUFfREJVU19SRUNFSVZFOwogICBjb25zdCBjaGFyICptc2d0eXBlc3RyID0gZGJ1c19tZXNzYWdlX3R5cGVfdG9fc3RyaW5nKG1zZ3R5cGUpOwotICBjb25zdCBjaGFyICpkc3RfbGFiZWwgPSBOVUxMOwotICBjb25zdCBjaGFyICpkc3RfbW9kZSA9IE5VTEw7CiAKICAgaWYgKCFhcHBhcm1vcl9lbmFibGVkKQogICAgIHJldHVybiBUUlVFOwpAQCAtNzY3LDIyICs3NjEsMTIgQEAKICAgICB7CiAgICAgICBkc3RfY29uID0gYnVzX2Nvbm5lY3Rpb25fZHVwX2FwcGFybW9yX2NvbmZpbmVtZW50IChwcm9wb3NlZF9yZWNpcGllbnQpOwogICAgIH0KLSAgZWxzZSBpZiAoYWN0aXZhdGlvbl9lbnRyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgIGRzdF9sYWJlbCA9IGJ1c19hY3RpdmF0aW9uX2VudHJ5X2dldF9hc3N1bWVkX2FwcGFybW9yX2xhYmVsIChhY3RpdmF0aW9uX2VudHJ5KTsKLSAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBkc3RfY29uID0gYnVzX2NvbjsKICAgICAgIGJ1c19hcHBhcm1vcl9jb25maW5lbWVudF9yZWYgKGRzdF9jb24pOwogICAgIH0KIAotICBpZiAoZHN0X2NvbiAhPSBOVUxMKQotICAgIHsKLSAgICAgIGRzdF9sYWJlbCA9IGRzdF9jb24tPmxhYmVsOwotICAgICAgZHN0X21vZGUgPSBkc3RfY29uLT5tb2RlOwotICAgIH0KLQogICAvKiBtYXAgcmVwbHkgbWVzc2FnZXMgdG8gaW5pdGlhbCBzZW5kIGFuZCByZWNlaXZlIHBlcm1pc3Npb24uIFRoYXQgaXMKICAgICogcGVybWlzc2lvbiB0byByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIFggZ3JhbnRzIHBlcm1pc3Npb24gdG8gcmVwbHkgdG8gWC4KICAgICogQW5kIHBlcm1pc3Npb24gdG8gc2VuZCBhIG1lc3NhZ2UgdG8gWSBncmFudHMgcGVybWlzc2lvbiB0byByZWNlaXZlIGEgcmVwbHkKQEAgLTgxMCw3ICs3OTQsNyBAQAogICAgICAgICBnb3RvIG9vbTsKIAogICAgICAgaWYgKCFidWlsZF9tZXNzYWdlX3F1ZXJ5ICgmcXN0ciwgc3JjX2Nvbi0+bGFiZWwsIGJ1c3R5cGUsIGRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfbGFiZWwsIHBhdGgsIGludGVyZmFjZSwgbWVtYmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2Nvbi0+bGFiZWwsIHBhdGgsIGludGVyZmFjZSwgbWVtYmVyKSkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcXN0cik7CiAgICAgICAgICAgZ290byBvb207CkBAIC04MjksMTEgKzgxMyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgLyogV2hlbiBkZWNpZGluZyB3aGV0aGVyIHdlIGNhbiBhY3RpdmF0ZSBhIHNlcnZpY2UsIHdlIG9ubHkgY2hlY2sgdGhhdAotICAgKiB3ZSBhcmUgYWxsb3dlZCB0byBzZW5kIGEgbWVzc2FnZSB0byBpdCwgbm90IHRoYXQgaXQgaXMgYWxsb3dlZCB0bwotICAgKiByZWNlaXZlIHRoYXQgbWVzc2FnZSBmcm9tIHVzLgotICAgKi8KLSAgaWYgKGFjdGl2YXRpb25fZW50cnkgIT0gTlVMTCB8fCBpc191bmNvbmZpbmVkIChkc3RfbGFiZWwsIGRzdF9tb2RlKSkKKyAgaWYgKGlzX3VuY29uZmluZWQgKGRzdF9jb24tPmxhYmVsLCBkc3RfY29uLT5tb2RlKSkKICAgICB7CiAgICAgICBkc3RfYWxsb3cgPSBUUlVFOwogICAgICAgZHN0X2F1ZGl0ID0gRkFMU0U7CkBAIC04NDMsNyArODIzLDcgQEAKICAgICAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZxc3RyKSkKICAgICAgICAgZ290byBvb207CiAKLSAgICAgIGlmICghYnVpbGRfbWVzc2FnZV9xdWVyeSAoJnFzdHIsIGRzdF9sYWJlbCwgYnVzdHlwZSwgc291cmNlLAorICAgICAgaWYgKCFidWlsZF9tZXNzYWdlX3F1ZXJ5ICgmcXN0ciwgZHN0X2Nvbi0+bGFiZWwsIGJ1c3R5cGUsIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Nvbi0+bGFiZWwsIHBhdGgsIGludGVyZmFjZSwgbWVtYmVyKSkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcXN0cik7CkBAIC04NjYsNyArODQ2LDcgQEAKICAgLyogRG9uJ3QgZmFpbCBvcGVyYXRpb25zIG9uIHByb2ZpbGVzIGluIGNvbXBsYWluIG1vZGUgKi8KICAgaWYgKG1vZGVzdHJfaXNfY29tcGxhaW4gKHNyY19jb24tPm1vZGUpKQogICAgIHNyY19hbGxvdyA9IFRSVUU7Ci0gIGlmIChtb2Rlc3RyX2lzX2NvbXBsYWluIChkc3RfbW9kZSkpCisgIGlmIChtb2Rlc3RyX2lzX2NvbXBsYWluIChkc3RfY29uLT5tb2RlKSkKICAgICBkc3RfYWxsb3cgPSBUUlVFOwogCiAgIGlmICghc3JjX2FsbG93IHx8ICFkc3RfYWxsb3cpCkBAIC05MzcsOCArOTE3LDggQEAKICAgICAgICAgICAhX2RidXNfYXBwZW5kX3BhaXJfdWludCAoJmF1eGRhdGEsICJwZWVyX3BpZCIsIHBpZCkpCiAgICAgICAgIGdvdG8gb29tOwogCi0gICAgICBpZiAoZHN0X2xhYmVsICYmCi0gICAgICAgICAgIV9kYnVzX2FwcGVuZF9wYWlyX3N0ciAoJmF1eGRhdGEsICJwZWVyX2xhYmVsIiwgZHN0X2xhYmVsKSkKKyAgICAgIGlmIChkc3RfY29uLT5sYWJlbCAmJgorICAgICAgICAgICFfZGJ1c19hcHBlbmRfcGFpcl9zdHIgKCZhdXhkYXRhLCAicGVlcl9sYWJlbCIsIGRzdF9jb24tPmxhYmVsKSkKICAgICAgICAgZ290byBvb207CiAKICAgICAgIGlmIChzcmNfZXJybm8gJiYgIV9kYnVzX2FwcGVuZF9wYWlyX3N0ciAoJmF1eGRhdGEsICJpbmZvIiwgc3RyZXJyb3IgKHNyY19lcnJubykpKQpAQCAtOTY1LDggKzk0NSw4IEBACiAgICAgICAgICAgIV9kYnVzX2FwcGVuZF9wYWlyX3VpbnQgKCZhdXhkYXRhLCAicGlkIiwgcGlkKSkKICAgICAgICAgZ290byBvb207CiAKLSAgICAgIGlmIChkc3RfbGFiZWwgJiYKLSAgICAgICAgICAhX2RidXNfYXBwZW5kX3BhaXJfc3RyICgmYXV4ZGF0YSwgImxhYmVsIiwgZHN0X2xhYmVsKSkKKyAgICAgIGlmIChkc3RfY29uLT5sYWJlbCAmJgorICAgICAgICAgICFfZGJ1c19hcHBlbmRfcGFpcl9zdHIgKCZhdXhkYXRhLCAibGFiZWwiLCBkc3RfY29uLT5sYWJlbCkpCiAgICAgICAgIGdvdG8gb29tOwogCiAgICAgICBpZiAoc2VuZGVyICYmIGRidXNfY29ubmVjdGlvbl9nZXRfdW5peF9wcm9jZXNzX2lkIChzZW5kZXIsICZwaWQpICYmCkBAIC0xMDI2LDcgKzEwMDYsNyBAQAogI2lmZGVmIEhBVkVfQVBQQVJNT1IKICAgQnVzQXBwQXJtb3JDb25maW5lbWVudCAqY29uID0gTlVMTDsKICAgREJ1c1N0cmluZyBxc3RyLCBhdXhkYXRhOwotICBpbnQgYWxsb3cgPSBGQUxTRSwgYXVkaXQgPSBUUlVFOworICBkYnVzX2Jvb2xfdCBhbGxvdyA9IEZBTFNFLCBhdWRpdCA9IFRSVUU7CiAgIGRidXNfYm9vbF90IGZyZWVfYXV4ZGF0YSA9IEZBTFNFOwogICB1bnNpZ25lZCBsb25nIHBpZDsKICAgaW50IHJlcywgc2Vycm5vID0gMDsKZGlmZiAtLWdpdCBhL2J1cy9hcHBhcm1vci5oIGIvYnVzL2FwcGFybW9yLmgKaW5kZXggZWQ0NjVmNy4uMThmM2VlNyAxMDA2NDQKLS0tIGEvYnVzL2FwcGFybW9yLmgKKysrIGIvYnVzL2FwcGFybW9yLmgKQEAgLTU2LDcgKzU2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICplcnJvcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKmRlc3RpbmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzQWN0aXZhdGlvbkVudHJ5ICphY3RpdmF0aW9uX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgKmVycm9yKTsKIAogZGJ1c19ib29sX3QgYnVzX2FwcGFybW9yX2FsbG93c19lYXZlc2Ryb3BwaW5nIChEQnVzQ29ubmVjdGlvbiAgICAgKmNvbm5lY3Rpb24sCmRpZmYgLS1naXQgYS9idXMvYXVkaXQuYyBiL2J1cy9hdWRpdC5jCmluZGV4IDkxZjJjNWMuLjc3MDVlNDIgMTAwNjQ0Ci0tLSBhL2J1cy9hdWRpdC5jCisrKyBiL2J1cy9hdWRpdC5jCkBAIC0xNjYsOSArMTY2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmVycm9yIChlcnJubykpOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgLTU6Ci0gICAgICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgX2RidXNfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBkcm9wIHN1cHBsZW1lbnRhcnkgZ3JvdXBzOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBkcm9wIHN1cHBsZW1lbnRhcnkgZ3JvdXBzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAtNjoKICAgICAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBfZGJ1c19lcnJvcl9mcm9tX2Vycm5vIChlcnJubyksCmRpZmYgLS1naXQgYS9idXMvYnVzLmMgYi9idXMvYnVzLmMKaW5kZXggMmFkOGU3OC4uMTI4YWUzYyAxMDA2NDQKLS0tIGEvYnVzL2J1cy5jCisrKyBiL2J1cy9idXMuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgImJ1cy5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KIAogI2luY2x1ZGUgImFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJjb25uZWN0aW9uLmgiCkBAIC0zOCw3ICszNyw2IEBACiAjaW5jbHVkZSAiYXBwYXJtb3IuaCIKICNpbmNsdWRlICJhdWRpdC5oIgogI2luY2x1ZGUgImRpci13YXRjaC5oIgotI2luY2x1ZGUgPGRidXMvZGJ1cy1hdXRoLmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLWxpc3QuaD4KICNpbmNsdWRlIDxkYnVzL2RidXMtaGFzaC5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy1jcmVkZW50aWFscy5oPgpAQCAtOTIsMTYgKzkwLDIwIEBACiAgIEJ1c0NvbnRleHQgKmNvbnRleHQ7CiAgIEJ1c1NlcnZlckRhdGEgKmJkOwogCi0gIC8qIHRoaXMgZGF0YSBzbG90IHdhcyBhbGxvY2F0ZWQgYnkgdGhlIEJ1c0NvbnRleHQgKi8KLSAgX2RidXNfYXNzZXJ0IChzZXJ2ZXJfZGF0YV9zbG90ID49IDApOworICBpZiAoIWRidXNfc2VydmVyX2FsbG9jYXRlX2RhdGFfc2xvdCAoJnNlcnZlcl9kYXRhX3Nsb3QpKQorICAgIHJldHVybiBOVUxMOwogCiAgIGJkID0gQlVTX1NFUlZFUl9EQVRBIChzZXJ2ZXIpOwotCi0gIC8qIGV2ZXJ5IERCdXNTZXJ2ZXIgaW4gdGhlIGRidXMtZGFlbW9uIGhhcyBnb25lIHRocm91Z2ggc2V0dXBfc2VydmVyKCkgKi8KLSAgX2RidXNfYXNzZXJ0IChiZCAhPSBOVUxMKTsKKyAgaWYgKGJkID09IE5VTEwpCisgICAgeworICAgICAgZGJ1c19zZXJ2ZXJfZnJlZV9kYXRhX3Nsb3QgKCZzZXJ2ZXJfZGF0YV9zbG90KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICBjb250ZXh0ID0gYmQtPmNvbnRleHQ7CiAKKyAgZGJ1c19zZXJ2ZXJfZnJlZV9kYXRhX3Nsb3QgKCZzZXJ2ZXJfZGF0YV9zbG90KTsKKwogICByZXR1cm4gY29udGV4dDsKIH0KIApAQCAtMTcyLDkgKzE3NCwxMCBAQAogewogICBCdXNDb250ZXh0ICpjb250ZXh0ID0gZGF0YTsKIAotICAvKiBJZiB0aGlzIGZhaWxzIGl0IGxvZ3MgYSB3YXJuaW5nLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgKi8KICAgaWYgKCFidXNfY29ubmVjdGlvbnNfc2V0dXBfY29ubmVjdGlvbiAoY29udGV4dC0+Y29ubmVjdGlvbnMsIG5ld19jb25uZWN0aW9uKSkKICAgICB7CisgICAgICBfZGJ1c192ZXJib3NlICgiTm8gbWVtb3J5IHRvIHNldHVwIG5ldyBjb25uZWN0aW9uXG4iKTsKKwogICAgICAgLyogaWYgd2UgZG9uJ3QgZG8gdGhpcywgaXQgd2lsbCBnZXQgdW5yZWYnZCB3aXRob3V0CiAgICAgICAgKiBiZWluZyBkaXNjb25uZWN0ZWQuLi4ga2luZCBvZiBzdHJhbmdlIHJlYWxseQogICAgICAgICogdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMsIHBlb3BsZSB3b24ndCBnZXQgaXQgcmlnaHQKQEAgLTI4Miw3ICsyODUsNiBAQAogICBEQnVzTGlzdCAqKmF1dGhfbWVjaGFuaXNtc19saXN0OwogICBpbnQgbGVuOwogICBkYnVzX2Jvb2xfdCByZXR2YWw7Ci0gIERCdXNMb2dGbGFncyBsb2dfZmxhZ3MgPSBEQlVTX0xPR19GTEFHU19TVERFUlI7CiAKICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CiAKQEAgLTI5MCwyNyArMjkyLDcgQEAKICAgYXV0aF9tZWNoYW5pc21zID0gTlVMTDsKICAgcGlkZmlsZSA9IE5VTEw7CiAKLSAgaWYgKGZsYWdzICYgQlVTX0NPTlRFWFRfRkxBR19TWVNMT0dfQUxXQVlTKQotICAgIHsKLSAgICAgIGNvbnRleHQtPnN5c2xvZyA9IFRSVUU7Ci0gICAgICBsb2dfZmxhZ3MgfD0gREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRzsKLQotICAgICAgaWYgKGZsYWdzICYgQlVTX0NPTlRFWFRfRkxBR19TWVNMT0dfT05MWSkKLSAgICAgICAgbG9nX2ZsYWdzICY9IH5EQlVTX0xPR19GTEFHU19TVERFUlI7Ci0gICAgfQotICBlbHNlIGlmIChmbGFncyAmIEJVU19DT05URVhUX0ZMQUdfU1lTTE9HX05FVkVSKQotICAgIHsKLSAgICAgIGNvbnRleHQtPnN5c2xvZyA9IEZBTFNFOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGNvbnRleHQtPnN5c2xvZyA9IGJ1c19jb25maWdfcGFyc2VyX2dldF9zeXNsb2cgKHBhcnNlcik7Ci0KLSAgICAgIGlmIChjb250ZXh0LT5zeXNsb2cpCi0gICAgICAgIGxvZ19mbGFncyB8PSBEQlVTX0xPR19GTEFHU19TWVNURU1fTE9HOwotICAgIH0KLQotICBfZGJ1c19pbml0X3N5c3RlbV9sb2cgKCJkYnVzLWRhZW1vbiIsIGxvZ19mbGFncyk7CisgIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoVFJVRSk7CiAKICAgaWYgKGZsYWdzICYgQlVTX0NPTlRFWFRfRkxBR19TWVNURU1EX0FDVElWQVRJT04pCiAgICAgY29udGV4dC0+c3lzdGVtZF9hY3RpdmF0aW9uID0gVFJVRTsKQEAgLTQzMCwyNiArNDEyLDYgQEAKICAgICAgIGxpbmsgPSBfZGJ1c19saXN0X2dldF9maXJzdF9saW5rIChhdXRoX21lY2hhbmlzbXNfbGlzdCk7CiAgICAgICB3aGlsZSAobGluayAhPSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgREJ1c1N0cmluZyBuYW1lOwotICAgICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmbmFtZSwgbGluay0+ZGF0YSk7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19hdXRoX2lzX3N1cHBvcnRlZF9tZWNoYW5pc20gKCZuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgREJ1c1N0cmluZyBsaXN0OwotICAgICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmbGlzdCkpCi0gICAgICAgICAgICAgICAgZ290byBvb207Ci0KLSAgICAgICAgICAgICAgaWYgKCFfZGJ1c19hdXRoX2R1bXBfc3VwcG9ydGVkX21lY2hhbmlzbXMgKCZsaXN0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmxpc3QpOwotICAgICAgICAgICAgICAgICAgZ290byBvb207Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIGF1dGggbWVjaGFuaXNtIFwiJXNcIiBpbiBidXMgY29uZmlnIGZpbGUgZGV0ZWN0ZWQuIFN1cHBvcnRlZCBtZWNoYW5pc21zIGFyZSBcIiVzXCIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilsaW5rLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmbGlzdCkpOwotICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmxpc3QpOwotICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICBhdXRoX21lY2hhbmlzbXNbaV0gPSBfZGJ1c19zdHJkdXAgKGxpbmstPmRhdGEpOwogICAgICAgICAgIGlmIChhdXRoX21lY2hhbmlzbXNbaV0gPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gb29tOwpAQCAtNTEyLDYgKzQ3NCw3IEBACiAgICAgfQogCiAgIGNvbnRleHQtPmZvcmsgPSBidXNfY29uZmlnX3BhcnNlcl9nZXRfZm9yayAocGFyc2VyKTsKKyAgY29udGV4dC0+c3lzbG9nID0gYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3N5c2xvZyAocGFyc2VyKTsKICAgY29udGV4dC0+a2VlcF91bWFzayA9IGJ1c19jb25maWdfcGFyc2VyX2dldF9rZWVwX3VtYXNrIChwYXJzZXIpOwogICBjb250ZXh0LT5hbGxvd19hbm9ueW1vdXMgPSBidXNfY29uZmlnX3BhcnNlcl9nZXRfYWxsb3dfYW5vbnltb3VzIChwYXJzZXIpOwogCkBAIC02NzAsNiArNjMzLDMyIEBACiAgIHJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBkYnVzX2Jvb2xfdAorbGlzdF9jb25jYXRfbmV3IChEQnVzTGlzdCAqKmEsCisgICAgICAgICAgICAgICAgIERCdXNMaXN0ICoqYiwKKyAgICAgICAgICAgICAgICAgREJ1c0xpc3QgKipyZXN1bHQpCit7CisgIERCdXNMaXN0ICpsaW5rOworCisgICpyZXN1bHQgPSBOVUxMOworCisgIGZvciAobGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKGEpOyBsaW5rOyBsaW5rID0gX2RidXNfbGlzdF9nZXRfbmV4dF9saW5rIChhLCBsaW5rKSkKKyAgICB7CisgICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kIChyZXN1bHQsIGxpbmstPmRhdGEpKQorICAgICAgICBnb3RvIG9vbTsKKyAgICB9CisgIGZvciAobGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKGIpOyBsaW5rOyBsaW5rID0gX2RidXNfbGlzdF9nZXRfbmV4dF9saW5rIChiLCBsaW5rKSkKKyAgICB7CisgICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kIChyZXN1bHQsIGxpbmstPmRhdGEpKQorICAgICAgICBnb3RvIG9vbTsKKyAgICB9CisKKyAgcmV0dXJuIFRSVUU7Citvb206CisgIF9kYnVzX2xpc3RfY2xlYXIgKHJlc3VsdCk7CisgIHJldHVybiBGQUxTRTsKK30KKwogc3RhdGljIHZvaWQKIHJhaXNlX2ZpbGVfZGVzY3JpcHRvcl9saW1pdCAoQnVzQ29udGV4dCAgICAgICpjb250ZXh0KQogewpAQCAtNjkzLDExICs2ODIsMTEgQEAKICAgLyogV2UgdXNlZCB0byBjb21wdXRlIGEgc3VpdGFibGUgcmxpbWl0IGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIG51bWJlcgogICAgKiBvZiBjb25uZWN0aW9ucywgYnV0IHRoYXQgYnJlYWtzIGRvd24gYXMgc29vbiBhcyB3ZSBhbGxvdyBmZC1wYXNzaW5nLAogICAgKiBiZWNhdXNlIGVhY2ggY29ubmVjdGlvbiBpcyBhbGxvd2VkIHRvIHBhc3MgNjQgZmRzIHRvIHVzLCBhbmQgaWYKLSAgICogdGhleSBhbGwgZGlkLCB3ZSdkIGhpdCBrZXJuZWwgbGltaXRzLiBXZSBub3cgaGFyZC1jb2RlIGEgZ29vZAotICAgKiBsaW1pdCB0aGF0IGlzIGVub3VnaCB0byBhdm9pZCBEb1MgZnJvbSBhbnl0aGluZyBzaG9ydCBvZiBtdWx0aXBsZQotICAgKiB1aWRzIGNvbnNwaXJpbmcgYWdhaW5zdCB1cywgbXVjaCBsaWtlIHN5c3RlbWQgZG9lcy4KKyAgICogdGhleSBhbGwgZGlkLCB3ZSdkIGhpdCBrZXJuZWwgbGltaXRzLiBXZSBub3cgaGFyZC1jb2RlIDY0ayBhcyBhCisgICAqIGdvb2QgbGltaXQsIGxpa2Ugc3lzdGVtZCBkb2VzOiB0aGF0J3MgZW5vdWdoIHRvIGF2b2lkIERvUyBmcm9tCisgICAqIGFueXRoaW5nIHNob3J0IG9mIG11bHRpcGxlIHVpZHMgY29uc3BpcmluZyBhZ2FpbnN0IHVzLgogICAgKi8KLSAgaWYgKCFfZGJ1c19ybGltaXRfcmFpc2VfZmRfbGltaXQgKCZlcnJvcikpCisgIGlmICghX2RidXNfcmxpbWl0X3JhaXNlX2ZkX2xpbWl0X2lmX3ByaXZpbGVnZWQgKDY1NTM2LCAmZXJyb3IpKQogICAgIHsKICAgICAgIGJ1c19jb250ZXh0X2xvZyAoY29udGV4dCwgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICIlczogJXMiLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKQEAgLTcxNSw2ICs3MDQsOCBAQAogICBEQnVzSGFzaFRhYmxlICpzZXJ2aWNlX2NvbnRleHRfdGFibGU7CiAgIERCdXNMaXN0ICp3YXRjaGVkX2RpcnMgPSBOVUxMOwogCisgIHJhaXNlX2ZpbGVfZGVzY3JpcHRvcl9saW1pdCAoY29udGV4dCk7CisKICAgc2VydmljZV9jb250ZXh0X3RhYmxlID0gYnVzX2NvbmZpZ19wYXJzZXJfc3RlYWxfc2VydmljZV9jb250ZXh0X3RhYmxlIChwYXJzZXIpOwogICBpZiAoIWJ1c19yZWdpc3RyeV9zZXRfc2VydmljZV9jb250ZXh0X3RhYmxlIChjb250ZXh0LT5yZWdpc3RyeSwKIAkJCQkJICAgICAgIHNlcnZpY2VfY29udGV4dF90YWJsZSkpCkBAIC03MjgsNyArNzE5LDkgQEAKICAgLyogV2UgbmVlZCB0byBtb25pdG9yIGJvdGggdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgYW5kIGRpcmVjdG9yaWVzCiAgICAqIGNvbnRhaW5pbmcgLnNlcnZpY2UgZmlsZXMuCiAgICAqLwotICBpZiAoIWJ1c19jb25maWdfcGFyc2VyX2dldF93YXRjaGVkX2RpcnMgKHBhcnNlciwgJndhdGNoZWRfZGlycykpCisgIGlmICghbGlzdF9jb25jYXRfbmV3IChidXNfY29uZmlnX3BhcnNlcl9nZXRfY29uZl9kaXJzIChwYXJzZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfZGlycyAocGFyc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3YXRjaGVkX2RpcnMpKQogICAgIHsKICAgICAgIEJVU19TRVRfT09NIChlcnJvcik7CiAgICAgICByZXR1cm4gRkFMU0U7CkBAIC05MzgsMzggKzkzMSw5IEBACiAgICAgICAhX2RidXNfcGlwZV9pc19zdGRvdXRfb3Jfc3RkZXJyIChwcmludF9waWRfcGlwZSkpCiAgICAgX2RidXNfcGlwZV9jbG9zZSAocHJpbnRfcGlkX3BpcGUsIE5VTEwpOwogCi0gIC8qIFJhaXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgbGltaXRzIGJlZm9yZSBkcm9wcGluZyB0aGUgcHJpdmlsZWdlcwotICAgKiByZXF1aXJlZCB0byBkbyBzby4KLSAgICovCi0gIHJhaXNlX2ZpbGVfZGVzY3JpcHRvcl9saW1pdCAoY29udGV4dCk7Ci0KLSAgLyogSGVyZSB3ZSBjaGFuZ2Ugb3VyIGNyZWRlbnRpYWxzIGlmIHJlcXVpcmVkLAotICAgKiBhcyBzb29uIGFzIHdlJ3ZlIHNldCB1cCBvdXIgc29ja2V0cyBhbmQgcGlkZmlsZS4KLSAgICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGluaXRpYWxpemluZyBMU01zLCBzbyB0aGF0IHRoZSBuZXRsaW5rCi0gICAqIG1vbml0b3JpbmcgdGhyZWFkIHN0YXJ0ZWQgYnkgYXZjX2luaXQoKSB3aWxsIG5vdCBsb3NlIENBUF9BVURJVF9XUklURQotICAgKiB3aGVuIHRoZSBtYWluIHRocmVhZCBjYWxscyBzZXR1aWQoKS4KLSAgICogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI4MzIKLSAgICovCi0gIGlmIChjb250ZXh0LT51c2VyICE9IE5VTEwpCi0gICAgewotICAgICAgaWYgKCFfZGJ1c19jaGFuZ2VfdG9fZGFlbW9uX3VzZXIgKGNvbnRleHQtPnVzZXIsIGVycm9yKSkKLQl7Ci0JICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7Ci0JICBnb3RvIGZhaWxlZDsKLQl9Ci0gICAgfQotCi0gIC8qIEF1ZGl0aW5nIHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgTFNNcywgc28gdGhhdCB0aGUgTFNNcyBhcmUgYWJsZQotICAgKiB0byBsb2cgYXVkaXQtZXZlbnRzIHRoYXQgaGFwcGVuIGR1cmluZyB0aGVpciBpbml0aWFsaXphdGlvbi4KLSAgICovCi0gIGJ1c19hdWRpdF9pbml0IChjb250ZXh0KTsKLQogICBpZiAoIWJ1c19zZWxpbnV4X2Z1bGxfaW5pdCAoKSkKICAgICB7Ci0gICAgICBidXNfY29udGV4dF9sb2cgKGNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIlNFTGludXggZW5hYmxlZCBidXQgRC1CdXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICJjaGVjayBzeXN0ZW0gbG9nIik7Ci0gICAgICBleGl0ICgxKTsKKyAgICAgIGJ1c19jb250ZXh0X2xvZyAoY29udGV4dCwgREJVU19TWVNURU1fTE9HX0ZBVEFMLCAiU0VMaW51eCBlbmFibGVkIGJ1dCBELUJ1cyBpbml0aWFsaXphdGlvbiBmYWlsZWQ7IGNoZWNrIHN5c3RlbSBsb2dcbiIpOwogICAgIH0KIAogICBpZiAoIWJ1c19hcHBhcm1vcl9mdWxsX2luaXQgKGVycm9yKSkKQEAgLTk4NiwxMSArOTUwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQXBwQXJtb3IgRC1CdXMgbWVkaWF0aW9uIGlzIGVuYWJsZWRcbiIpOwogICAgIH0KIAotICAvKiBXaGVuIFNFTGludXggaXMgdXNlZCwgdGhpcyBtdXN0IGhhcHBlbiBhZnRlciBidXNfc2VsaW51eF9mdWxsX2luaXQoKQotICAgKiBzbyB0aGF0IGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGFjY2VzcyB2ZWN0b3IgY2FjaGUsIHdoaWNoIGlzIHJlcXVpcmVkCi0gICAqIHRvIHByb2Nlc3MgPGFzc29jaWF0ZS8+IGVsZW1lbnRzLgotICAgKiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2RidXMvMjAwOC1PY3RvYmVyLzAxMDQ5MS5odG1sCi0gICAqLwogICBpZiAoIXByb2Nlc3NfY29uZmlnX3Bvc3Rpbml0IChjb250ZXh0LCBwYXJzZXIsIGVycm9yKSkKICAgICB7CiAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7CkBAIC0xMDAzLDYgKzk2MiwyMCBAQAogICAgICAgcGFyc2VyID0gTlVMTDsKICAgICB9CiAKKyAgLyogSGVyZSB3ZSBjaGFuZ2Ugb3VyIGNyZWRlbnRpYWxzIGlmIHJlcXVpcmVkLAorICAgKiBhcyBzb29uIGFzIHdlJ3ZlIHNldCB1cCBvdXIgc29ja2V0cyBhbmQgcGlkZmlsZQorICAgKi8KKyAgaWYgKGNvbnRleHQtPnVzZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIV9kYnVzX2NoYW5nZV90b19kYWVtb25fdXNlciAoY29udGV4dC0+dXNlciwgZXJyb3IpKQorCXsKKwkgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19TRVQgKGVycm9yKTsKKwkgIGdvdG8gZmFpbGVkOworCX0KKyAgICB9CisKKyAgYnVzX2F1ZGl0X2luaXQgKGNvbnRleHQpOworCiAgIGRidXNfc2VydmVyX2ZyZWVfZGF0YV9zbG90ICgmc2VydmVyX2RhdGFfc2xvdCk7CiAKICAgcmV0dXJuIGNvbnRleHQ7CkBAIC0xMzY1LDE3ICsxMzM4LDI1IEBACiAgIHJldHVybiBjb250ZXh0LT5pbml0aWFsX2ZkX2xpbWl0OwogfQogCi1kYnVzX2Jvb2xfdAotYnVzX2NvbnRleHRfZ2V0X3VzaW5nX3N5c2xvZyAoQnVzQ29udGV4dCAqY29udGV4dCkKLXsKLSAgcmV0dXJuIGNvbnRleHQtPnN5c2xvZzsKLX0KLQogdm9pZAogYnVzX2NvbnRleHRfbG9nIChCdXNDb250ZXh0ICpjb250ZXh0LCBEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNoYXIgKm1zZywgLi4uKQogewogICB2YV9saXN0IGFyZ3M7CiAKKyAgaWYgKCFjb250ZXh0LT5zeXNsb2cpCisgICAgeworICAgICAgLyogd2UncmUgbm90IHN5c2xvZ2dpbmc7IGp1c3Qgb3V0cHV0IHRvIHN0ZGVyciAqLworICAgICAgdmFfc3RhcnQgKGFyZ3MsIG1zZyk7CisgICAgICB2ZnByaW50ZiAoc3RkZXJyLCBtc2csIGFyZ3MpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisKKyAgICAgIGlmIChzZXZlcml0eSA9PSBEQlVTX1NZU1RFTV9MT0dfRkFUQUwpCisgICAgICAgIF9kYnVzX2V4aXQgKDEpOworCisgICAgICByZXR1cm47CisgICAgfQorCiAgIHZhX3N0YXJ0IChhcmdzLCBtc2cpOwogCiAgIGlmIChjb250ZXh0LT5sb2dfcHJlZml4KQpAQCAtMTM4OSwxMiArMTM3MCwxMiBAQAogICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX3ByaW50Zl92YWxpc3QgKCZmdWxsX21zZywgbXNnLCBhcmdzKSkKICAgICAgICAgZ290byBvb21fb3V0OwogCi0gICAgICBfZGJ1c19sb2cgKHNldmVyaXR5LCAiJXMiLCBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZmdWxsX21zZykpOworICAgICAgX2RidXNfc3lzdGVtX2xvZyAoc2V2ZXJpdHksICIlcyIsIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmZ1bGxfbXNnKSk7CiAgICAgb29tX291dDoKICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZnVsbF9tc2cpOwogICAgIH0KICAgZWxzZQotICAgIF9kYnVzX2xvZ3YgKHNldmVyaXR5LCBtc2csIGFyZ3MpOworICAgIF9kYnVzX3N5c3RlbV9sb2d2IChzZXZlcml0eSwgbXNnLCBhcmdzKTsKIAogb3V0OgogICB2YV9lbmQgKGFyZ3MpOwpAQCAtMTQxMiw3ICsxMzkzLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1N5c3RlbUxvZ1NldmVyaXR5ICBzZXZlcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgKm1zZykKIHsKLSAgX2RidXNfbG9nIChzZXZlcml0eSwgIiVzJXMiLCBub25udWxsIChjb250ZXh0LT5sb2dfcHJlZml4LCAiIiksIG1zZyk7CisgIGlmICghY29udGV4dC0+c3lzbG9nKQorICAgIHsKKyAgICAgIGZwdXRzIChtc2csIHN0ZGVycik7CisgICAgICBmcHV0YyAoJ1xuJywgc3RkZXJyKTsKKworICAgICAgaWYgKHNldmVyaXR5ID09IERCVVNfU1lTVEVNX0xPR19GQVRBTCkKKyAgICAgICAgX2RidXNfZXhpdCAoMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgX2RidXNfc3lzdGVtX2xvZyAoc2V2ZXJpdHksICIlcyVzIiwgbm9ubnVsbCAoY29udGV4dC0+bG9nX3ByZWZpeCwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKKyAgICB9CiB9CiAKIHZvaWQKQEAgLTE1MTAsMTEgKzE1MDMsNyBAQAogICoKICAqIHNlbmRlciBpcyB0aGUgc2VuZGVyIG9mIHRoZSBtZXNzYWdlLgogICoKLSAqIE5VTEwgZm9yIHNlbmRlciBkZWZpbml0ZWx5IG1lYW5zIHRoZSBidXMgZHJpdmVyLgotICoKLSAqIE5VTEwgZm9yIHByb3Bvc2VkX3JlY2lwaWVudCBtYXkgbWVhbiB0aGUgYnVzIGRyaXZlciwgb3IgbWF5IG1lYW4KLSAqIHdlIGFyZSBjaGVja2luZyB3aGV0aGVyIHNlcnZpY2UtYWN0aXZhdGlvbiBpcyBhbGxvd2VkIGFzIGEgZmlyc3QKLSAqIHBhc3MgYmVmb3JlIGFsbCBkZXRhaWxzIG9mIHRoZSBhY3RpdmF0ZWQgc2VydmljZSBhcmUga25vd24uCisgKiBOVUxMIGZvciBwcm9wb3NlZF9yZWNpcGllbnQgb3Igc2VuZGVyIGRlZmluaXRlbHkgbWVhbnMgdGhlIGJ1cyBkcml2ZXIuCiAgKgogICogTlVMTCBmb3IgYWRkcmVzc2VkX3JlY2lwaWVudCBtYXkgbWVhbiB0aGUgYnVzIGRyaXZlciwgb3IgbWF5IG1lYW4KICAqIG5vIGRlc3RpbmF0aW9uIHdhcyBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UgKGUuZy4gYSBzaWduYWwpLgpAQCAtMTUyNiw3ICsxNTE1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Nvbm5lY3Rpb24gKmFkZHJlc3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNDb25uZWN0aW9uICpwcm9wb3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNBY3RpdmF0aW9uRW50cnkgKmFjdGl2YXRpb25fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICplcnJvcikKIHsKICAgY29uc3QgY2hhciAqc3JjLCAqZGVzdDsKQEAgLTE1NDcsNyArMTUzNSw2IEBACiAgICAgICAgICAgICAgICAgKHNlbmRlciA9PSBOVUxMICYmICFidXNfY29ubmVjdGlvbl9pc19hY3RpdmUgKHByb3Bvc2VkX3JlY2lwaWVudCkpKTsKICAgX2RidXNfYXNzZXJ0ICh0eXBlID09IERCVVNfTUVTU0FHRV9UWVBFX1NJR05BTCB8fAogICAgICAgICAgICAgICAgIGFkZHJlc3NlZF9yZWNpcGllbnQgIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgIGFjdGl2YXRpb25fZW50cnkgIT0gTlVMTCB8fAogICAgICAgICAgICAgICAgIHN0cmNtcCAoZGVzdCwgREJVU19TRVJWSUNFX0RCVVMpID09IDApOwogCiAgIHN3aXRjaCAodHlwZSkKQEAgLTE2MTMsOSArMTYwMCw3IEBACiAJCQkJICAgIGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlIChtZXNzYWdlKSwKIAkJCQkgICAgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIgKG1lc3NhZ2UpLAogCQkJCSAgICBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKG1lc3NhZ2UpLAotCQkJCSAgICBkZXN0ID8gZGVzdCA6IERCVVNfU0VSVklDRV9EQlVTLAotCQkJCSAgICBhY3RpdmF0aW9uX2VudHJ5LAotCQkJCSAgICBlcnJvcikpCisJCQkJICAgIGRlc3QgPyBkZXN0IDogREJVU19TRVJWSUNFX0RCVVMsIGVycm9yKSkKICAgICAgICAgewogICAgICAgICAgIGlmIChlcnJvciAhPSBOVUxMICYmICFkYnVzX2Vycm9yX2lzX3NldCAoZXJyb3IpKQogICAgICAgICAgICAgewpAQCAtMTY0NCw3ICsxNjI5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKG1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPyBkZXN0IDogREJVU19TRVJWSUNFX0RCVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID8gc3JjIDogREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbl9lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIApAQCAtMTcwOCw3ICsxNjkyLDcgQEAKICAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiYSBtZXNzYWdlIHdhcyBzb21laG93IHNlbnQgdG8gYW4gaW5hY3RpdmUgcmVjaXBpZW50IGZyb20gYSBzb3VyY2Ugb3RoZXIgdGhhbiB0aGUgbWVzc2FnZSBidXMiKTsKKyAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJhIG1lc3NhZ2Ugd2FzIHNvbWVob3cgc2VudCB0byBhbiBpbmFjdGl2ZSByZWNpcGllbnQgZnJvbSBhIHNvdXJjZSBvdGhlciB0aGFuIHRoZSBtZXNzYWdlIGJ1c1xuIik7CiAgICAgICAgICAgcmVjaXBpZW50X3BvbGljeSA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzc3LDEwICsxNzYxLDYgQEAKICAgLyogUmVjb3JkIHRoYXQgd2Ugd2lsbCBhbGxvdyBhIHJlcGx5IGhlcmUgaW4gdGhlIGZ1dHVyZSAoZG9uJ3QKICAgICogYm90aGVyIGlmIHRoZSByZWNpcGllbnQgaXMgdGhlIGJ1cyBvciB0aGlzIGlzIGFuIGVhdmVzZHJvcHBpbmcKICAgICogY29ubmVjdGlvbikuIE9ubHkgdGhlIGFkZHJlc3NlZCByZWNpcGllbnQgbWF5IHJlcGx5LgotICAgKgotICAgKiBUaGlzIGlzbid0IGRvbmUgZm9yIGFjdGl2YXRpb24gYXR0ZW1wdHMgYmVjYXVzZSB0aGV5IGhhdmUgbm8gYWRkcmVzc2VkCi0gICAqIG9yIHByb3Bvc2VkIHJlY2lwaWVudDsgd2hlbiB3ZSBjaGVjayB3aGV0aGVyIHRvIGFjdHVhbGx5IGRlbGl2ZXIgdGhlCi0gICAqIG1lc3NhZ2UsIGxhdGVyLCB3ZSdsbCByZWNvcmQgdGhlIHJlcGx5IGV4cGVjdGF0aW9uIGF0IHRoYXQgcG9pbnQuCiAgICAqLwogICBpZiAodHlwZSA9PSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCAmJgogICAgICAgc2VuZGVyICYmCmRpZmYgLS1naXQgYS9idXMvYnVzLmggYi9idXMvYnVzLmgKaW5kZXggMmUwZGU4Mi4uM2ZhYjU5ZiAxMDA2NDQKLS0tIGEvYnVzL2J1cy5oCisrKyBiL2J1cy9idXMuaApAQCAtNDQsNyArNDQsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgQnVzVHJhbnNhY3Rpb24gICBCdXNUcmFuc2FjdGlvbjsKIHR5cGVkZWYgc3RydWN0IEJ1c01hdGNobWFrZXIgICAgQnVzTWF0Y2htYWtlcjsKIHR5cGVkZWYgc3RydWN0IEJ1c01hdGNoUnVsZSAgICAgQnVzTWF0Y2hSdWxlOwotdHlwZWRlZiBzdHJ1Y3QgQnVzQWN0aXZhdGlvbkVudHJ5IEJ1c0FjdGl2YXRpb25FbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTczLDEwICs3Miw3IEBACiAgIEJVU19DT05URVhUX0ZMQUdfRk9SS19BTFdBWVMgPSAoMSA8PCAxKSwKICAgQlVTX0NPTlRFWFRfRkxBR19GT1JLX05FVkVSID0gKDEgPDwgMiksCiAgIEJVU19DT05URVhUX0ZMQUdfV1JJVEVfUElEX0ZJTEUgPSAoMSA8PCAzKSwKLSAgQlVTX0NPTlRFWFRfRkxBR19TWVNURU1EX0FDVElWQVRJT04gPSAoMSA8PCA0KSwKLSAgQlVTX0NPTlRFWFRfRkxBR19TWVNMT0dfQUxXQVlTID0gKDEgPDwgNSksCi0gIEJVU19DT05URVhUX0ZMQUdfU1lTTE9HX05FVkVSID0gKDEgPDwgNiksCi0gIEJVU19DT05URVhUX0ZMQUdfU1lTTE9HX09OTFkgPSAoMSA8PCA3KQorICBCVVNfQ09OVEVYVF9GTEFHX1NZU1RFTURfQUNUSVZBVElPTiA9ICgxIDw8IDQpCiB9IEJ1c0NvbnRleHRGbGFnczsKIAogQnVzQ29udGV4dCogICAgICAgYnVzX2NvbnRleHRfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgREJ1c1N0cmluZyAqY29uZmlnX2ZpbGUsCkBAIC0xMjIsNyArMTE4LDYgQEAKIGludCAgICAgICAgICAgICAgIGJ1c19jb250ZXh0X2dldF9tYXhfcmVwbGllc19wZXJfY29ubmVjdGlvbiAgICAgKEJ1c0NvbnRleHQgICAgICAgKmNvbnRleHQpOwogaW50ICAgICAgICAgICAgICAgYnVzX2NvbnRleHRfZ2V0X3JlcGx5X3RpbWVvdXQgICAgICAgICAgICAgICAgICAoQnVzQ29udGV4dCAgICAgICAqY29udGV4dCk7CiBEQnVzUkxpbWl0ICogICAgICBidXNfY29udGV4dF9nZXRfaW5pdGlhbF9mZF9saW1pdCAgICAgICAgICAgICAgIChCdXNDb250ZXh0ICAgICAgICpjb250ZXh0KTsKLWRidXNfYm9vbF90ICAgICAgIGJ1c19jb250ZXh0X2dldF91c2luZ19zeXNsb2cgICAgICAgICAgICAgICAgICAgKEJ1c0NvbnRleHQgICAgICAgKmNvbnRleHQpOwogdm9pZCAgICAgICAgICAgICAgYnVzX2NvbnRleHRfbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQnVzQ29udGV4dCAgICAgICAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNTeXN0ZW1Mb2dTZXZlcml0eSBzZXZlcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgKm1zZywKQEAgLTE0Miw3ICsxMzcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Nvbm5lY3Rpb24gICAqYWRkcmVzc2VkX3JlY2lwaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNDb25uZWN0aW9uICAgKnByb3Bvc2VkX3JlY2lwaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNBY3RpdmF0aW9uRW50cnkgKmFjdGl2YXRpb25fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICplcnJvcik7CiB2b2lkICAgICAgICAgICAgICBidXNfY29udGV4dF9jaGVja19hbGxfd2F0Y2hlcyAgICAgICAgICAgICAgICAgIChCdXNDb250ZXh0ICAgICAgICpjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvYnVzL2NvbmZpZy1sb2FkZXItZXhwYXQuYyBiL2J1cy9jb25maWctbG9hZGVyLWV4cGF0LmMKaW5kZXggNmNiZDM3ZS4uYjU3MWZkYSAxMDA2NDQKLS0tIGEvYnVzL2NvbmZpZy1sb2FkZXItZXhwYXQuYworKysgYi9idXMvY29uZmlnLWxvYWRlci1leHBhdC5jCkBAIC0yMDMsMjAgKzIwMyw2IEBACiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CiAKLSAgLyogV2UgZG8gbm90IG5lZWQgcHJvdGVjdGlvbiBhZ2FpbnN0IGhhc2ggY29sbGlzaW9ucyAoQ1ZFLTIwMTItMDg3NikKLSAgICogYmVjYXVzZSB3ZSBhcmUgb25seSBwYXJzaW5nIHRydXN0ZWQgWE1MOyBhbmQgaWYgd2UgbGV0IEV4cGF0IGJsb2NrCi0gICAqIHdhaXRpbmcgZm9yIHRoZSBDU1BSTkcgdG8gYmUgaW5pdGlhbGl6ZWQsIGFzIGl0IGRvZXMgYnkgZGVmYXVsdCB0bwotICAgKiBkZWZlYXQgQ1ZFLTIwMTItMDg3NiwgaXQgY2FuIGNhdXNlIHRpbWVvdXRzIGR1cmluZyBlYXJseSBib290IG9uCi0gICAqIGVudHJvcHktc3RhcnZlZCBlbWJlZGRlZCBkZXZpY2VzLgotICAgKgotICAgKiBUT0RPOiBXaGVuIEV4cGF0IGdldHMgYSBtb3JlIGV4cGxpY2l0IEFQSSBmb3IgdGhpcyB0aGFuCi0gICAqIFhNTF9TZXRIYXNoU2FsdCwgY2hlY2sgZm9yIHRoYXQgdG9vLCBhbmQgdXNlIGl0IHByZWZlcmVudGlhbGx5LgotICAgKiBodHRwczovL2dpdGh1Yi5jb20vbGliZXhwYXQvbGliZXhwYXQvaXNzdWVzLzkxICovCi0jaWYgZGVmaW5lZChIQVZFX1hNTF9TRVRIQVNIU0FMVCkKLSAgLyogQW55IG5vbnplcm8gbnVtYmVyIHdpbGwgZG8uIGh0dHBzOi8veGtjZC5jb20vMjIxLyAqLwotICBYTUxfU2V0SGFzaFNhbHQgKGV4cGF0LCA0KTsKLSNlbmRpZgotCiAgIGlmICghX2RidXNfc3RyaW5nX2dldF9kaXJuYW1lIChmaWxlLCAmZGlybmFtZSkpCiAgICAgewogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7CkBAIC0yNTYsNyArMjQyLDcgQEAKIAogICAgIGRhdGFfc3RyID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZGF0YSk7CiAKLSAgICBpZiAoWE1MX1BhcnNlIChleHBhdCwgZGF0YV9zdHIsIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmZGF0YSksIFRSVUUpID09IFhNTF9TVEFUVVNfRVJST1IpCisgICAgaWYgKCFYTUxfUGFyc2UgKGV4cGF0LCBkYXRhX3N0ciwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZkYXRhKSwgVFJVRSkpCiAgICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LmVycm9yICE9IE5VTEwgJiYKICAgICAgICAgICAgICFkYnVzX2Vycm9yX2lzX3NldCAoY29udGV4dC5lcnJvcikpCkBAIC0yNjgsMTMgKzI1NCwxMCBAQAogICAgICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLCBOVUxMKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBpbiBmaWxlICVzLCBsaW5lICVsdSwgY29sdW1uICVsdTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgaW4gZmlsZSAlcywgbGluZSAlZCwgY29sdW1uICVkOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIFhNTF9TaXplIHR5cGUgdmFyaWVzIGFjY29yZGluZyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnVpbGQgb3B0aW9ucywgc28gY2FzdCB0byBzb21ldGhpbmcgd2UgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjb3BlIHdpdGguICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyIChleHBhdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgWE1MX0dldEN1cnJlbnRDb2x1bW5OdW1iZXIgKGV4cGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9HZXRDdXJyZW50TGluZU51bWJlciAoZXhwYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0dldEN1cnJlbnRDb2x1bW5OdW1iZXIgKGV4cGF0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FcnJvclN0cmluZyAoZSkpOwogICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYnVzL2NvbmZpZy1wYXJzZXItY29tbW9uLmMgYi9idXMvY29uZmlnLXBhcnNlci1jb21tb24uYwppbmRleCBjMWM0MTkxLi41ZGI2YjI4IDEwMDY0NAotLS0gYS9idXMvY29uZmlnLXBhcnNlci1jb21tb24uYworKysgYi9idXMvY29uZmlnLXBhcnNlci1jb21tb24uYwpAQCAtMTg3LDkgKzE4NywxMCBAQAogICAgICAgcmV0dXJuICJhbGxvd19hbm9ueW1vdXMiOwogICAgIGNhc2UgRUxFTUVOVF9BUFBBUk1PUjoKICAgICAgIHJldHVybiAiYXBwYXJtb3IiOwotICAgIGRlZmF1bHQ6Ci0gICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJiYWQgZWxlbWVudCB0eXBlIik7Ci0gICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiYmFkIGVsZW1lbnQgdHlwZSIpOworCisgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9idXMvY29uZmlnLXBhcnNlci10cml2aWFsLmMgYi9idXMvY29uZmlnLXBhcnNlci10cml2aWFsLmMKaW5kZXggZGQ2NWM2ZC4uMDNhZDgzOCAxMDA2NDQKLS0tIGEvYnVzL2NvbmZpZy1wYXJzZXItdHJpdmlhbC5jCisrKyBiL2J1cy9jb25maWctcGFyc2VyLXRyaXZpYWwuYwpAQCAtMTYyLDcgKzE2Miw2IEBACiAKICAgc3dpdGNoIChwYXJzZXItPnR5cGUpCiAgICAgewotICAgIGNhc2UgRUxFTUVOVF9TRVJWSUNFRElSOgogICAgIGNhc2UgRUxFTUVOVF9TRVJWSUNFSEVMUEVSOgogICAgIGNhc2UgRUxFTUVOVF9VU0VSOgogICAgIGNhc2UgRUxFTUVOVF9DT05GSUdUWVBFOgpAQCAtMTg2LDI2ICsxODUsNiBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KIAotICAgIGNhc2UgRUxFTUVOVF9OT05FOgotICAgIGNhc2UgRUxFTUVOVF9CVVNDT05GSUc6Ci0gICAgY2FzZSBFTEVNRU5UX0lOQ0xVREU6Ci0gICAgY2FzZSBFTEVNRU5UX0xJU1RFTjoKLSAgICBjYXNlIEVMRU1FTlRfQVVUSDoKLSAgICBjYXNlIEVMRU1FTlRfUE9MSUNZOgotICAgIGNhc2UgRUxFTUVOVF9MSU1JVDoKLSAgICBjYXNlIEVMRU1FTlRfQUxMT1c6Ci0gICAgY2FzZSBFTEVNRU5UX0RFTlk6Ci0gICAgY2FzZSBFTEVNRU5UX0ZPUks6Ci0gICAgY2FzZSBFTEVNRU5UX1BJREZJTEU6Ci0gICAgY2FzZSBFTEVNRU5UX0lOQ0xVREVESVI6Ci0gICAgY2FzZSBFTEVNRU5UX1NFTElOVVg6Ci0gICAgY2FzZSBFTEVNRU5UX0FTU09DSUFURToKLSAgICBjYXNlIEVMRU1FTlRfU1RBTkRBUkRfU0VTU0lPTl9TRVJWSUNFRElSUzoKLSAgICBjYXNlIEVMRU1FTlRfS0VFUF9VTUFTSzoKLSAgICBjYXNlIEVMRU1FTlRfU1lTTE9HOgotICAgIGNhc2UgRUxFTUVOVF9BTExPV19BTk9OWU1PVVM6Ci0gICAgY2FzZSBFTEVNRU5UX0FQUEFSTU9SOgotICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgZGVmYXVsdDoKICAgICAgIHsKICAgICAgICAgLyogd2UgcmVhbGx5IGRvbid0IGNhcmUgYWJvdXQgdGhlIG90aGVycy4uLiAqLwpAQCAtMzA3LDI4ICsyODYsNiBAQAogICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBFTEVNRU5UX05PTkU6Ci0gICAgY2FzZSBFTEVNRU5UX0JVU0NPTkZJRzoKLSAgICBjYXNlIEVMRU1FTlRfSU5DTFVERToKLSAgICBjYXNlIEVMRU1FTlRfTElTVEVOOgotICAgIGNhc2UgRUxFTUVOVF9BVVRIOgotICAgIGNhc2UgRUxFTUVOVF9QT0xJQ1k6Ci0gICAgY2FzZSBFTEVNRU5UX0xJTUlUOgotICAgIGNhc2UgRUxFTUVOVF9BTExPVzoKLSAgICBjYXNlIEVMRU1FTlRfREVOWToKLSAgICBjYXNlIEVMRU1FTlRfRk9SSzoKLSAgICBjYXNlIEVMRU1FTlRfUElERklMRToKLSAgICBjYXNlIEVMRU1FTlRfSU5DTFVERURJUjoKLSAgICBjYXNlIEVMRU1FTlRfU0VMSU5VWDoKLSAgICBjYXNlIEVMRU1FTlRfQVNTT0NJQVRFOgotICAgIGNhc2UgRUxFTUVOVF9TVEFOREFSRF9TRVNTSU9OX1NFUlZJQ0VESVJTOgotICAgIGNhc2UgRUxFTUVOVF9TVEFOREFSRF9TWVNURU1fU0VSVklDRURJUlM6Ci0gICAgY2FzZSBFTEVNRU5UX0tFRVBfVU1BU0s6Ci0gICAgY2FzZSBFTEVNRU5UX1NZU0xPRzoKLSAgICBjYXNlIEVMRU1FTlRfQUxMT1dfQU5PTllNT1VTOgotICAgIGNhc2UgRUxFTUVOVF9BUFBBUk1PUjoKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICB7CiAgICAgICAgIC8qIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG90aGVycy4uLiByZWFsbHkgKi8KQEAgLTM2NywxMSArMzI0LDggQEAKICAgcmV0dXJuIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnBhcnNlci0+YnVzX3R5cGUpOwogfQogCi0vKgotICogQHJldHVybnMgQSBsaXN0IG9mIHN0cmluZ3MsIG93bmVkIGJ5IHRoZSBCdXNDb25maWdQYXJzZXIKLSAqLwogREJ1c0xpc3QqKgotYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfcGF0aHMgKEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyKQorYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfZGlycyAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIpCiB7CiAgIHJldHVybiAmcGFyc2VyLT5zZXJ2aWNlX2RpcnM7CiB9CkBAIC00MTYsMTQgKzM3MCwxNCBAQAogICB1c2VyID0gYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3VzZXIgKHBhcnNlcik7CiAgIGlmICh1c2VyID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlVzZXIgd2FzIE5VTEwhIik7CisgICAgICBfZGJ1c193YXJuICgiVXNlciB3YXMgTlVMTCFcbiIpOwogICAgICAgZ290byBmaW5pc2g7CiAgICAgfQogI2lmIDAKICAgLyogdGhlIHVzZXJuYW1lIGNhbiBiZSBjb25maWd1cmVkIGluIGNvbmZpZ3VyZS5pbiBzbyB0aGlzIHRlc3QgZG9lc24ndCB3b3JrICovCiAgIGlmIChzdHJjbXAgKHVzZXIsICJkYnVzIikgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiVXNlciB3YXMgaW52YWxpZDsgJyVzJyEiLCB1c2VyKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJVc2VyIHdhcyBpbnZhbGlkOyAnJXMnIVxuIiwgdXNlcik7CiAgICAgICBnb3RvIGZpbmlzaDsKICAgICB9CiAgIHByaW50ZiAoIiAgICA8dXNlcj5kYnVzPC91c2VyPiBPS0FZIVxuIik7ICAKQEAgLTQzMywyMSArMzg3LDIxIEBACiAgIHR5cGUgPSBidXNfY29uZmlnX3BhcnNlcl9nZXRfdHlwZSAocGFyc2VyKTsKICAgaWYgKHR5cGUgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiVHlwZSB3YXMgTlVMTCEiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJUeXBlIHdhcyBOVUxMIVxuIik7CiAgICAgICBnb3RvIGZpbmlzaDsKICAgICB9CiAgIGlmIChzdHJjbXAgKHR5cGUsICJzeXN0ZW0iKSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJUeXBlIHdhcyBpbnZhbGlkOyAnJXMnISIsIHVzZXIpOworICAgICAgX2RidXNfd2FybiAoIlR5cGUgd2FzIGludmFsaWQ7ICclcychXG4iLCB1c2VyKTsKICAgICAgIGdvdG8gZmluaXNoOwogICAgIH0KICAgcHJpbnRmICgiICAgIDx0eXBlPnN5c3RlbTwvdHlwZT4gT0tBWSFcbiIpOwogCiAgIC8qIGNoZWNrIGRpcnMgcmV0dXJuIHZhbHVlIGlzIG9rYXkgKi8KLSAgZGlycyA9IGJ1c19jb25maWdfcGFyc2VyX2dldF9zZXJ2aWNlX3BhdGhzIChwYXJzZXIpOworICBkaXJzID0gYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfZGlycyAocGFyc2VyKTsKICAgaWYgKGRpcnMgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiU2VydmljZSBkaXJzIGFyZSBOVUxMISIpOworICAgICAgX2RidXNfd2FybiAoIlNlcnZpY2UgZGlycyBhcmUgTlVMTCFcbiIpOwogICAgICAgZ290byBmaW5pc2g7CiAgICAgfQogICBwcmludGYgKCIgICAgPHN0YW5kYXJkX3N5c3RlbV9zZXJ2aWNlX2RpcnMvPiBPS0FZIVxuIik7CkBAIC00ODYsNyArNDQwLDcgQEAKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAodmFsaWRpdHkgPT0gVkFMSUQpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIGxvYWQgdmFsaWQgZmlsZSBidXQgc3RpbGwgaGFkIG1lbW9yeTogJXMiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gbG9hZCB2YWxpZCBmaWxlIGJ1dCBzdGlsbCBoYWQgbWVtb3J5OiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKIAogICAgICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKQEAgLTUwNiw3ICs0NjAsNyBAQAogCiAgICAgICBpZiAodmFsaWRpdHkgPT0gSU5WQUxJRCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJBY2NlcHRlZCBpbnZhbGlkIGZpbGUiKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiQWNjZXB0ZWQgaW52YWxpZCBmaWxlXG4iKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KIApAQCAtNTQzLDcgKzQ5Nyw3IEBACiAgIGRpciA9IE5VTEw7CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnRlc3RfZGlyZWN0b3J5KSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgdGVzdF9kaXJlY3RvcnkiKTsKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgdGVzdF9kaXJlY3RvcnlcbiIpOwogCiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZmlsZW5hbWUsIHN1YmRpcik7CiAKQEAgLTU1NiwxMyArNTEwLDEzIEBACiAKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZmaWxlbmFtZSk7CiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZmaWxlbmFtZSkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGFsbG9jYXRlIGZpbGVuYW1lIHN0cmluZyIpOworICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRpZG4ndCBhbGxvY2F0ZSBmaWxlbmFtZSBzdHJpbmdcbiIpOwogCiAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKICAgZGlyID0gX2RidXNfZGlyZWN0b3J5X29wZW4gKCZ0ZXN0X2RpcmVjdG9yeSwgJmVycm9yKTsKICAgaWYgKGRpciA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3Qgb3BlbiAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnRlc3RfZGlyZWN0b3J5KSwKICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwpAQCAtNjIyLDcgKzU3Niw3IEBACiAKICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgZ2V0IG5leHQgZmlsZSBpbiAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBnZXQgbmV4dCBmaWxlIGluICVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnRlc3RfZGlyZWN0b3J5KSwKICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwpkaWZmIC0tZ2l0IGEvYnVzL2NvbmZpZy1wYXJzZXItdHJpdmlhbC5oIGIvYnVzL2NvbmZpZy1wYXJzZXItdHJpdmlhbC5oCmluZGV4IGFiZTQxZmQuLjMxZGRlZjYgMTAwNjQ0Ci0tLSBhL2J1cy9jb25maWctcGFyc2VyLXRyaXZpYWwuaAorKysgYi9idXMvY29uZmlnLXBhcnNlci10cml2aWFsLmgKQEAgLTU5LDcgKzU5LDcgQEAKIC8qIEZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyB0aGUgcGFyc2UgcmVzdWx0cyAqLwogY29uc3QgY2hhciogYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3VzZXIgICAgICAgICAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIpOwogY29uc3QgY2hhciogYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3R5cGUgICAgICAgICAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIpOwotREJ1c0xpc3QqKiAgYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfcGF0aHMgKEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyKTsKK0RCdXNMaXN0KiogIGJ1c19jb25maWdfcGFyc2VyX2dldF9zZXJ2aWNlX2RpcnMgKEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyKTsKIAogLyogTG9hZGVyIGZ1bmN0aW9ucyAoYmFja2VuZGVkIG9mZiBvbmUgb2YgdGhlIFhNTCBwYXJzZXJzKS4gIFJldHVybnMgYQogICogZmluaXNoZWQgQ29uZmlnUGFyc2VyLgpkaWZmIC0tZ2l0IGEvYnVzL2NvbmZpZy1wYXJzZXIuYyBiL2J1cy9jb25maWctcGFyc2VyLmMKaW5kZXggYmUyN2QzOC4uZDlmNjA0MiAxMDA2NDQKLS0tIGEvYnVzL2NvbmZpZy1wYXJzZXIuYworKysgYi9idXMvY29uZmlnLXBhcnNlci5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICBEQnVzTGlzdCAqbWVjaGFuaXNtczsgLyoqPCBBdXRoIG1lY2hhbmlzbXMgKi8KIAotICBEQnVzTGlzdCAqc2VydmljZV9kaXJzOyAvKio8IEJ1c0NvbmZpZ1NlcnZpY2VEaXJzIHRvIGxvb2sgZm9yIHNlc3Npb24gc2VydmljZXMgaW4gKi8KKyAgREJ1c0xpc3QgKnNlcnZpY2VfZGlyczsgLyoqPCBEaXJlY3RvcmllcyB0byBsb29rIGZvciBzZXNzaW9uIHNlcnZpY2VzIGluICovCiAKICAgREJ1c0xpc3QgKmNvbmZfZGlyczsgICAvKio8IERpcmVjdG9yaWVzIHRvIGxvb2sgZm9yIHBvbGljeSBjb25maWd1cmF0aW9uIGluICovCiAKQEAgLTIzMiwzMyArMjMyLDcgQEAKICAgcmV0dXJuIEZBTFNFOwogfQogCi0vKgotICogQ3JlYXRlIGEgbmV3IEJ1c0NvbmZpZ1NlcnZpY2VEaXIuIFRha2VzIG93bmVyc2hpcCBvZiBwYXRoIGlmICNUUlVFIGlzIHJldHVybmVkLgotICoKLSAqIEByZXR1cm5zICNGQUxTRSBvbiBPT00KLSAqLwotc3RhdGljIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKgotYnVzX2NvbmZpZ19zZXJ2aWNlX2Rpcl9uZXdfdGFrZSAoY2hhciAqcGF0aCwKLSAgICBCdXNTZXJ2aWNlRGlyRmxhZ3MgZmxhZ3MpCi17Ci0gIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKnNlbGYgPSBkYnVzX25ldzAgKEJ1c0NvbmZpZ1NlcnZpY2VEaXIsIDEpOwotCi0gIGlmIChzZWxmID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgc2VsZi0+cGF0aCA9IHBhdGg7IC8qIHRha2Ugb3duZXJzaGlwICovCi0gIHNlbGYtPmZsYWdzID0gZmxhZ3M7Ci0gIHJldHVybiBzZWxmOwotfQotCi1zdGF0aWMgdm9pZAotYnVzX2NvbmZpZ19zZXJ2aWNlX2Rpcl9mcmVlIChCdXNDb25maWdTZXJ2aWNlRGlyICpzZWxmKQotewotICBkYnVzX2ZyZWUgKHNlbGYtPnBhdGgpOwotICBkYnVzX2ZyZWUgKHNlbGYpOwotfQotCi1zdGF0aWMgQnVzQ29uZmlnU2VydmljZURpciAqCitzdGF0aWMgZGJ1c19ib29sX3QKIHNlcnZpY2VfZGlyc19maW5kX2RpciAoREJ1c0xpc3QgKipzZXJ2aWNlX2RpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpcikKIHsKQEAgLTI2OCw4MSArMjQyLDQyIEBACiAKICAgZm9yIChsaW5rID0gKnNlcnZpY2VfZGlyczsgbGluazsgbGluayA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayhzZXJ2aWNlX2RpcnMsIGxpbmspKQogICAgIHsKLSAgICAgIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKmxpbmtfZGlyID0gbGluay0+ZGF0YTsKLQotICAgICAgaWYgKHN0cmNtcCAoZGlyLCBsaW5rX2Rpci0+cGF0aCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIGxpbmtfZGlyOworICAgICAgY29uc3QgY2hhciAqbGlua19kaXI7CisgICAgICAKKyAgICAgIGxpbmtfZGlyID0gKGNvbnN0IGNoYXIgKilsaW5rLT5kYXRhOworICAgICAgaWYgKHN0cmNtcCAoZGlyLCBsaW5rX2RpcikgPT0gMCkKKyAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCi0gIHJldHVybiBOVUxMOworICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgZGJ1c19ib29sX3QKK3NlcnZpY2VfZGlyc19hcHBlbmRfdW5pcXVlX29yX2ZyZWUgKERCdXNMaXN0ICoqc2VydmljZV9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGlyKQoreworICBpZiAoIXNlcnZpY2VfZGlyc19maW5kX2RpciAoc2VydmljZV9kaXJzLCBkaXIpKQorICAgIHJldHVybiBfZGJ1c19saXN0X2FwcGVuZCAoc2VydmljZV9kaXJzLCBkaXIpOyAgCisKKyAgZGJ1c19mcmVlIChkaXIpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgCiBzZXJ2aWNlX2RpcnNfYXBwZW5kX2xpbmtfdW5pcXVlX29yX2ZyZWUgKERCdXNMaXN0ICoqc2VydmljZV9kaXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTGlzdCAqZGlyX2xpbmspCiB7Ci0gIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKmRpciA9IGRpcl9saW5rLT5kYXRhOwotICBCdXNDb25maWdTZXJ2aWNlRGlyICphbHJlYWR5ID0gc2VydmljZV9kaXJzX2ZpbmRfZGlyIChzZXJ2aWNlX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpci0+cGF0aCk7Ci0KLSAgaWYgKGFscmVhZHkgPT0gTlVMTCkKKyAgaWYgKCFzZXJ2aWNlX2RpcnNfZmluZF9kaXIgKHNlcnZpY2VfZGlycywgZGlyX2xpbmstPmRhdGEpKQogICAgIHsKICAgICAgIF9kYnVzX2xpc3RfYXBwZW5kX2xpbmsgKHNlcnZpY2VfZGlycywgZGlyX2xpbmspOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIC8qIEJ1c1NlcnZpY2VEaXJGbGFncyBhcmUgY2hvc2VuIHN1Y2ggdGhhdCB0aGUgY29tcGF0aWJsZSB0aGluZyB0byBkbwotICAgICAgICogaXMgdG8gImFuZCIgdGhlIGZsYWdzLiBGb3IgZXhhbXBsZSwgaWYgYSBkaXJlY3RvcnkgaXMgZXhwbGljaXRseQotICAgICAgICogYWRkZWQgYXMgYSA8c2VydmljZWRpcj4gKHdoaWNoIGlzIHdhdGNoZWQgd2l0aCBpbm90aWZ5KSBhbmQgaXMgYWxzbwotICAgICAgICogdGhlIHRyYW5zaWVudCBzZXJ2aWNlIGRpcmVjdG9yeSAod2hpY2ggc2hvdWxkIG5vdCBiZSB3YXRjaGVkKSwKLSAgICAgICAqIHRoZSBjb21wYXRpYmxlIHRoaW5nIHRvIGRvIGlzIHRvIHdhdGNoIGl0LiAqLwotICAgICAgYWxyZWFkeS0+ZmxhZ3MgJj0gZGlyLT5mbGFnczsKLSAgICAgIGJ1c19jb25maWdfc2VydmljZV9kaXJfZnJlZSAoZGlyX2xpbmstPmRhdGEpOworICAgICAgZGJ1c19mcmVlIChkaXJfbGluay0+ZGF0YSk7CiAgICAgICBfZGJ1c19saXN0X2ZyZWVfbGluayAoZGlyX2xpbmspOwogICAgIH0KIH0KIAotLyoKLSAqIENvbnN1bWUgbGlua3MgZnJvbSBkaXJzIChhIGxpc3Qgb2YgcGF0aHMpLCBjb252ZXJ0aW5nIHRoZW0gaW50byBsaW5rcyBpbgotICogc2VydmljZV9kaXJzIChhIGxpc3Qgb2YgdW5pcXVlIEJ1c1NlcnZpY2VEaXIpLgotICoKLSAqIE9uIHN1Y2Nlc3MsIHJldHVybiBUUlVFLiBkaXJzIHdpbGwgYmUgZW1wdHksIGFuZCBldmVyeSBvcmlnaW5hbCBlbnRyeSBpbgotICogZGlycyB3aWxsIGhhdmUgYSBjb3JyZXNwb25kaW5nIHNlcnZpY2VfZGlycyBlbnRyeS4KLSAqCi0gKiBPbiBPT00sIHJldHVybiBGQUxTRS4gRWFjaCBvcmlnaW5hbCBlbnRyeSBvZiBkaXJzIGhhcyBlaXRoZXIgYmVlbgotICogYXBwZW5kZWQgdG8gc2VydmljZV9kaXJzIG9yIGxlZnQgaW4gZGlycy4KLSAqLwotc3RhdGljIGRidXNfYm9vbF90Ci1zZXJ2aWNlX2RpcnNfYWJzb3JiX3N0cmluZ19saXN0IChEQnVzTGlzdCAgICAgICAgICAgKipzZXJ2aWNlX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTGlzdCAgICAgICAgICAgKipkaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzU2VydmljZURpckZsYWdzICAgZmxhZ3MpCi17Ci0gIERCdXNMaXN0ICpsaW5rOwotCi0gIF9kYnVzX2Fzc2VydCAoc2VydmljZV9kaXJzICE9IE5VTEwpOwotICBfZGJ1c19hc3NlcnQgKGRpcnMgIT0gTlVMTCk7Ci0KLSAgd2hpbGUgKChsaW5rID0gX2RidXNfbGlzdF9wb3BfZmlyc3RfbGluayAoZGlycykpKQotICAgIHsKLSAgICAgIGNoYXIgKnBhdGggPSBsaW5rLT5kYXRhOwotICAgICAgQnVzQ29uZmlnU2VydmljZURpciAqZGlyID0gYnVzX2NvbmZpZ19zZXJ2aWNlX2Rpcl9uZXdfdGFrZSAocGF0aCwgZmxhZ3MpOwotCi0gICAgICBpZiAoZGlyID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBPT00gLSByb2xsIGJhY2sgKHRoaXMgZG9lcyBub3QgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkpICovCi0gICAgICAgICAgX2RidXNfbGlzdF9wcmVwZW5kX2xpbmsgKHNlcnZpY2VfZGlycywgbGluayk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgIC8qIE93bmVyc2hpcCBvZiBwYXRoIGhhcyBiZWVuIHRha2VuIGJ5IGRpciAqLwotICAgICAgbGluay0+ZGF0YSA9IGRpcjsKLSAgICAgIHNlcnZpY2VfZGlyc19hcHBlbmRfbGlua191bmlxdWVfb3JfZnJlZSAoc2VydmljZV9kaXJzLCBsaW5rKTsKLSAgICB9Ci0KLSAgX2RidXNfYXNzZXJ0ICgqZGlycyA9PSBOVUxMKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KIHN0YXRpYyBkYnVzX2Jvb2xfdAogbWVyZ2VfaW5jbHVkZWQgKEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyLAogICAgICAgICAgICAgICAgIEJ1c0NvbmZpZ1BhcnNlciAqaW5jbHVkZWQsCkBAIC01ODAsNyArNTE1LDcgQEAKICAgICAgIF9kYnVzX2xpc3RfY2xlYXIgKCZwYXJzZXItPmxpc3Rlbl9vbik7CiAKICAgICAgIF9kYnVzX2xpc3RfZm9yZWFjaCAoJnBhcnNlci0+c2VydmljZV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoREJ1c0ZvcmVhY2hGdW5jdGlvbikgYnVzX2NvbmZpZ19zZXJ2aWNlX2Rpcl9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoREJ1c0ZvcmVhY2hGdW5jdGlvbikgZGJ1c19mcmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogICAgICAgX2RidXNfbGlzdF9jbGVhciAoJnBhcnNlci0+c2VydmljZV9kaXJzKTsKQEAgLTg5Nyw4ICs4MzIsOSBAQAogICAgIH0KICAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09IEVMRU1FTlRfU1RBTkRBUkRfU0VTU0lPTl9TRVJWSUNFRElSUykKICAgICB7Ci0gICAgICBEQnVzRXJyb3IgbG9jYWxfZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gICAgICBEQnVzTGlzdCAqZGlycyA9IE5VTEw7CisgICAgICBEQnVzTGlzdCAqbGluazsKKyAgICAgIERCdXNMaXN0ICpkaXJzOworICAgICAgZGlycyA9IE5VTEw7CiAKICAgICAgIGlmICghY2hlY2tfbm9fYXR0cmlidXRlcyAocGFyc2VyLCAic3RhbmRhcmRfc2Vzc2lvbl9zZXJ2aWNlZGlycyIsIGF0dHJpYnV0ZV9uYW1lcywgYXR0cmlidXRlX3ZhbHVlcywgZXJyb3IpKQogICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC05MDksNTQgKzg0NSwyMCBAQAogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogCi0gICAgICBpZiAoX2RidXNfc2V0X3VwX3RyYW5zaWVudF9zZXNzaW9uX3NlcnZpY2VkaXJzICgmZGlycywgJmxvY2FsX2Vycm9yKSkKLSAgICAgICAgewotICAgICAgICAgIGlmICghc2VydmljZV9kaXJzX2Fic29yYl9zdHJpbmdfbGlzdCAoJnBhcnNlci0+c2VydmljZV9kaXJzLCAmZGlycywKLSAgICAgICAgICAgICAgICBCVVNfU0VSVklDRV9ESVJfRkxBR1NfTk9fV0FUQ0ggfAotICAgICAgICAgICAgICAgIEJVU19TRVJWSUNFX0RJUl9GTEFHU19TVFJJQ1RfTkFNSU5HKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKLSAgICAgICAgICAgICAgX2RidXNfbGlzdF9mb3JlYWNoICgmZGlycywgKERCdXNGb3JlYWNoRnVuY3Rpb24pIGRidXNfZnJlZSwKLSAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgICBfZGJ1c19saXN0X2NsZWFyICgmZGlycyk7Ci0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgLyogRmFpbGluZyB0byBzZXQgdGhlc2UgdXAgaXNuJ3QgZmF0YWwgKi8KLSAgICAgICAgICBfZGJ1c193YXJuICgiVW5hYmxlIHRvIHNldCB1cCB0cmFuc2llbnQgc2VydmljZSBkaXJlY3Rvcnk6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9lcnJvci5tZXNzYWdlKTsKLSAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZsb2NhbF9lcnJvcik7Ci0gICAgICAgIH0KLQotICAgICAgX2RidXNfYXNzZXJ0IChkaXJzID09IE5VTEwpOwotCiAgICAgICBpZiAoIV9kYnVzX2dldF9zdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzICgmZGlycykpCiAgICAgICAgIHsKICAgICAgICAgICBCVVNfU0VUX09PTSAoZXJyb3IpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogCi0gICAgICAvKiBXZSBoYXZlIHRyYWRpdGlvbmFsbHkgd2F0Y2hlZCB0aGUgc3RhbmRhcmQgc2Vzc2lvbiBzZXJ2aWNlCi0gICAgICAgKiBkaXJlY3RvcmllcyB3aXRoIGlub3RpZnksIGFuZCBhbGxvd2VkIHNlcnZpY2UgZmlsZXMgd2hvc2UgbmFtZXMgZG8gbm90Ci0gICAgICAgKiBtYXRjaCB0aGUgYnVzIG5hbWUgKi8KLSAgICAgIGlmICghc2VydmljZV9kaXJzX2Fic29yYl9zdHJpbmdfbGlzdCAoJnBhcnNlci0+c2VydmljZV9kaXJzLCAmZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PTkUpKQotICAgICAgICB7Ci0gICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKLSAgICAgICAgICBfZGJ1c19saXN0X2ZvcmVhY2ggKCZkaXJzLCAoREJ1c0ZvcmVhY2hGdW5jdGlvbikgZGJ1c19mcmVlLAotICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgICBfZGJ1c19saXN0X2NsZWFyICgmZGlycyk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgIF9kYnVzX2Fzc2VydCAoZGlycyA9PSBOVUxMKTsKKyAgICAgICAgd2hpbGUgKChsaW5rID0gX2RidXNfbGlzdF9wb3BfZmlyc3RfbGluayAoJmRpcnMpKSkKKyAgICAgICAgICBzZXJ2aWNlX2RpcnNfYXBwZW5kX2xpbmtfdW5pcXVlX29yX2ZyZWUgKCZwYXJzZXItPnNlcnZpY2VfZGlycywgbGluayk7CiAKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09IEVMRU1FTlRfU1RBTkRBUkRfU1lTVEVNX1NFUlZJQ0VESVJTKQogICAgIHsKKyAgICAgIERCdXNMaXN0ICpsaW5rOwogICAgICAgREJ1c0xpc3QgKmRpcnM7CiAgICAgICBkaXJzID0gTlVMTDsKIApAQCAtOTc1LDE5ICs4NzcsOCBAQAogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogCi0gICAgICAvKiBXZSBoYXZlIHRyYWRpdGlvbmFsbHkgd2F0Y2hlZCB0aGUgc3RhbmRhcmQgc3lzdGVtIHNlcnZpY2UKLSAgICAgICAqIGRpcmVjdG9yaWVzIHdpdGggaW5vdGlmeSwgYW5kIGFsbG93ZWQgc2VydmljZSBmaWxlcyB3aG9zZSBuYW1lcyBkbyBub3QKLSAgICAgICAqIG1hdGNoIHRoZSBidXMgbmFtZSAodGhlIHNlcnZpY2VoZWxwZXIgd29uJ3Qgc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlCi0gICAgICAgKiB0aGVtLCBidXQgd2UgZG8gc3RpbGwgcGFyc2UgdGhlbSkgKi8KLSAgICAgIGlmICghc2VydmljZV9kaXJzX2Fic29yYl9zdHJpbmdfbGlzdCAoJnBhcnNlci0+c2VydmljZV9kaXJzLCAmZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PTkUpKQotICAgICAgICB7Ci0gICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKLSAgICAgICAgICBfZGJ1c19saXN0X2ZvcmVhY2ggKCZkaXJzLCAoREJ1c0ZvcmVhY2hGdW5jdGlvbikgZGJ1c19mcmVlLAotICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgICBfZGJ1c19saXN0X2NsZWFyICgmZGlycyk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9CisgICAgICAgIHdoaWxlICgobGluayA9IF9kYnVzX2xpc3RfcG9wX2ZpcnN0X2xpbmsgKCZkaXJzKSkpCisgICAgICAgICAgc2VydmljZV9kaXJzX2FwcGVuZF9saW5rX3VuaXF1ZV9vcl9mcmVlICgmcGFyc2VyLT5zZXJ2aWNlX2RpcnMsIGxpbmspOwogCiAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CkBAIC0xMTU4LDcgKzEwNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlLT5kLnBvbGljeS5naWRfdWlkX29yX2F0X2NvbnNvbGUpKQogICAgICAgICAgICAgZS0+ZC5wb2xpY3kudHlwZSA9IFBPTElDWV9VU0VSOwogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmtub3duIHVzZXJuYW1lIFwiJXNcIiBpbiBtZXNzYWdlIGJ1cyBjb25maWd1cmF0aW9uIGZpbGUiLAorICAgICAgICAgICAgX2RidXNfd2FybiAoIlVua25vd24gdXNlcm5hbWUgXCIlc1wiIGluIG1lc3NhZ2UgYnVzIGNvbmZpZ3VyYXRpb24gZmlsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIpOwogICAgICAgICB9CiAgICAgICBlbHNlIGlmIChncm91cCAhPSBOVUxMKQpAQCAtMTE3MCw3ICsxMDYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmUtPmQucG9saWN5LmdpZF91aWRfb3JfYXRfY29uc29sZSkpCiAgICAgICAgICAgICBlLT5kLnBvbGljeS50eXBlID0gUE9MSUNZX0dST1VQOwogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmtub3duIGdyb3VwIFwiJXNcIiBpbiBtZXNzYWdlIGJ1cyBjb25maWd1cmF0aW9uIGZpbGUiLAorICAgICAgICAgICAgX2RidXNfd2FybiAoIlVua25vd24gZ3JvdXAgXCIlc1wiIGluIG1lc3NhZ2UgYnVzIGNvbmZpZ3VyYXRpb24gZmlsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwKTsgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKGF0X2NvbnNvbGUgIT0gTlVMTCkKQEAgLTEyNzYsNDMgKzExNjcsNiBAQAogICAgIH0KIH0KIAotLyoKLSAqIFBhcnNlIGFuIGF0dHJpYnV0ZSBuYW1lZCBuYW1lLCB3aG9zZSBjb250ZW50IGlzIGNvbnRlbnQsIG9yIE5VTEwgaWYKLSAqIG1pc3NpbmcuIEl0IGlzIG1lYW50IHRvIGJlIGEgKGxvbmcpIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCBpbmNsdXNpdmUuCi0gKiBJZiBpdCBpcyBtaXNzaW5nLCB1c2UgZGVmIGFzIHRoZSBkZWZhdWx0IHZhbHVlICh3aGljaCBkb2VzIG5vdAotICogbmVjZXNzYXJpbHkgbmVlZCB0byBiZSBiZXR3ZWVuIG1pbiBhbmQgbWF4KS4KLSAqLwotc3RhdGljIGRidXNfYm9vbF90Ci1wYXJzZV9pbnRfYXR0cmlidXRlIChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgIG1pbiwKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgIG1heCwKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgIGRlZiwKLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAqZXJyb3IpCi17Ci0gIERCdXNTdHJpbmcgcGFyc2Vfc3RyaW5nOwotCi0gICp2YWx1ZSA9IGRlZjsKLQotICBpZiAoY29udGVudCA9PSBOVUxMKQotICAgIHJldHVybiBUUlVFOwotCi0gIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmcGFyc2Vfc3RyaW5nLCBjb250ZW50KTsKLQotICBpZiAoIV9kYnVzX3N0cmluZ19wYXJzZV9pbnQgKCZwYXJzZV9zdHJpbmcsIDAsIHZhbHVlLCBOVUxMKSB8fAotICAgICAgKnZhbHVlIDwgbWluIHx8ICp2YWx1ZSA+IG1heCkKLSAgICB7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICJCYWQgdmFsdWUgXCIlc1wiIGZvciAlcyBhdHRyaWJ1dGUsIG11c3QgYmUgYW4gIgotICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGluIHJhbmdlICVsZCB0byAlbGQgaW5jbHVzaXZlIiwKLSAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LCBuYW1lLCBtaW4sIG1heCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCiBzdGF0aWMgZGJ1c19ib29sX3QKIGFwcGVuZF9ydWxlX2Zyb21fZWxlbWVudCAoQnVzQ29uZmlnUGFyc2VyICAgKnBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmVsZW1lbnRfbmFtZSwKQEAgLTEzMjIsNDcgKzExNzYsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAgKmVycm9yKQogewogICBjb25zdCBjaGFyICpsb2c7Ci0KLSAgLyogR3JvdXA6IHNlbmRfIGF0dHJpYnV0ZXMgKi8KICAgY29uc3QgY2hhciAqc2VuZF9pbnRlcmZhY2U7CiAgIGNvbnN0IGNoYXIgKnNlbmRfbWVtYmVyOwogICBjb25zdCBjaGFyICpzZW5kX2Vycm9yOwogICBjb25zdCBjaGFyICpzZW5kX2Rlc3RpbmF0aW9uOwogICBjb25zdCBjaGFyICpzZW5kX3BhdGg7CiAgIGNvbnN0IGNoYXIgKnNlbmRfdHlwZTsKLSAgY29uc3QgY2hhciAqc2VuZF9yZXF1ZXN0ZWRfcmVwbHk7Ci0gIGNvbnN0IGNoYXIgKnNlbmRfYnJvYWRjYXN0OwotICAvKiBUUlVFIGlmIGFueSBzZW5kXyBhdHRyaWJ1dGUgaXMgcHJlc2VudCAqLwotICBkYnVzX2Jvb2xfdCBhbnlfc2VuZF9hdHRyaWJ1dGU7Ci0KLSAgLyogR3JvdXA6IHJlY2VpdmVfIGF0dHJpYnV0ZXMgKi8KICAgY29uc3QgY2hhciAqcmVjZWl2ZV9pbnRlcmZhY2U7CiAgIGNvbnN0IGNoYXIgKnJlY2VpdmVfbWVtYmVyOwogICBjb25zdCBjaGFyICpyZWNlaXZlX2Vycm9yOwogICBjb25zdCBjaGFyICpyZWNlaXZlX3NlbmRlcjsKICAgY29uc3QgY2hhciAqcmVjZWl2ZV9wYXRoOwogICBjb25zdCBjaGFyICpyZWNlaXZlX3R5cGU7Ci0gIGNvbnN0IGNoYXIgKnJlY2VpdmVfcmVxdWVzdGVkX3JlcGx5OwotICAvKiBUUlVFIGlmIGFueSByZWNlaXZlXyBhdHRyaWJ1dGUgaXMgcHJlc2VudCAqLwotICBkYnVzX2Jvb2xfdCBhbnlfcmVjZWl2ZV9hdHRyaWJ1dGU7Ci0KLSAgLyogR3JvdXA6IG1lc3NhZ2UtbWF0Y2hpbmcgbW9kaWZpZXJzIHRoYXQgY2FuIGdvIG9uIHNlbmRfIG9yIHJlY2VpdmVfICovCiAgIGNvbnN0IGNoYXIgKmVhdmVzZHJvcDsKLSAgY29uc3QgY2hhciAqbWF4X2Zkc19hdHRyOwotICBsb25nIG1heF9mZHMgPSBEQlVTX01BWElNVU1fTUVTU0FHRV9VTklYX0ZEUzsKLSAgY29uc3QgY2hhciAqbWluX2Zkc19hdHRyOwotICBsb25nIG1pbl9mZHMgPSAwOwotICAvKiBUUlVFIGlmIGFueSBtZXNzYWdlLW1hdGNoaW5nIG1vZGlmaWVyIGlzIHByZXNlbnQgKi8KLSAgZGJ1c19ib29sX3QgYW55X21lc3NhZ2VfYXR0cmlidXRlOwotCi0gIC8qIE5vbi1tZXNzYWdlLXJlbGF0ZWQgYXR0cmlidXRlcyAqLworICBjb25zdCBjaGFyICpzZW5kX3JlcXVlc3RlZF9yZXBseTsKKyAgY29uc3QgY2hhciAqcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHk7CiAgIGNvbnN0IGNoYXIgKm93bjsKICAgY29uc3QgY2hhciAqb3duX3ByZWZpeDsKICAgY29uc3QgY2hhciAqdXNlcjsKICAgY29uc3QgY2hhciAqZ3JvdXA7CiAKICAgQnVzUG9saWN5UnVsZSAqcnVsZTsKLQorICAKICAgaWYgKCFsb2NhdGVfYXR0cmlidXRlcyAocGFyc2VyLCBlbGVtZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlX3ZhbHVlcywKQEAgLTEzNzMsNyArMTIwOCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kX2Rlc3RpbmF0aW9uIiwgJnNlbmRfZGVzdGluYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kX3BhdGgiLCAmc2VuZF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZF90eXBlIiwgJnNlbmRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRfYnJvYWRjYXN0IiwgJnNlbmRfYnJvYWRjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjZWl2ZV9pbnRlcmZhY2UiLCAmcmVjZWl2ZV9pbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlX21lbWJlciIsICZyZWNlaXZlX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVfZXJyb3IiLCAmcmVjZWl2ZV9lcnJvciwKQEAgLTEzODEsOCArMTIxNSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlX3BhdGgiLCAmcmVjZWl2ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjZWl2ZV90eXBlIiwgJnJlY2VpdmVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImVhdmVzZHJvcCIsICZlYXZlc2Ryb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfZmRzIiwgJm1heF9mZHNfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbl9mZHMiLCAmbWluX2Zkc19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZF9yZXF1ZXN0ZWRfcmVwbHkiLCAmc2VuZF9yZXF1ZXN0ZWRfcmVwbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlX3JlcXVlc3RlZF9yZXBseSIsICZyZWNlaXZlX3JlcXVlc3RlZF9yZXBseSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm93biIsICZvd24sCkBAIC0xMzkzLDM1ICsxMjI1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQogICAgIHJldHVybiBGQUxTRTsKIAotICBhbnlfc2VuZF9hdHRyaWJ1dGUgPSAoc2VuZF9kZXN0aW5hdGlvbiAhPSBOVUxMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2Jyb2FkY2FzdCAhPSBOVUxMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3BhdGggIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF90eXBlICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfaW50ZXJmYWNlICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfbWVtYmVyICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfZXJyb3IgIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9yZXF1ZXN0ZWRfcmVwbHkgIT0gTlVMTCk7Ci0gIGFueV9yZWNlaXZlX2F0dHJpYnV0ZSA9IChyZWNlaXZlX3NlbmRlciAhPSBOVUxMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3BhdGggIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV90eXBlICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfaW50ZXJmYWNlICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfbWVtYmVyICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfZXJyb3IgIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHkgIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPGFsbG93IGVhdmVzZHJvcD0idHJ1ZSIvPiBtZWFucyB0aGUgc2FtZSBhcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPGFsbG93IHJlY2VpdmVfc2VuZGVyPSIqIiBlYXZlc2Ryb3A9InRydWUiLz4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidXQgPGFsbG93IHNlbmRfYW55dGhpbmc9ImFueXRoaW5nIi8+IGNhbiBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0YWtlIHRoZSBlYXZlc2Ryb3AgYXR0cmlidXRlIGFuZCBzdGlsbCBjb3VudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFzIGEgc2VuZCBydWxlLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFhbnlfc2VuZF9hdHRyaWJ1dGUgJiYgZWF2ZXNkcm9wICE9IE5VTEwpKTsKLSAgYW55X21lc3NhZ2VfYXR0cmlidXRlID0gKGFueV9zZW5kX2F0dHJpYnV0ZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3JlY2VpdmVfYXR0cmlidXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBlYXZlc2Ryb3AgIT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Zkc19hdHRyICE9IE5VTEwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9mZHNfYXR0ciAhPSBOVUxMKTsKLQotICBpZiAoIShhbnlfc2VuZF9hdHRyaWJ1dGUgfHwKLSAgICAgICAgYW55X3JlY2VpdmVfYXR0cmlidXRlIHx8CisgIGlmICghKHNlbmRfaW50ZXJmYWNlIHx8IHNlbmRfbWVtYmVyIHx8IHNlbmRfZXJyb3IgfHwgc2VuZF9kZXN0aW5hdGlvbiB8fAorICAgICAgICBzZW5kX3R5cGUgfHwgc2VuZF9wYXRoIHx8CisgICAgICAgIHJlY2VpdmVfaW50ZXJmYWNlIHx8IHJlY2VpdmVfbWVtYmVyIHx8IHJlY2VpdmVfZXJyb3IgfHwgcmVjZWl2ZV9zZW5kZXIgfHwKKyAgICAgICAgcmVjZWl2ZV90eXBlIHx8IHJlY2VpdmVfcGF0aCB8fCBlYXZlc2Ryb3AgfHwKKyAgICAgICAgc2VuZF9yZXF1ZXN0ZWRfcmVwbHkgfHwgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHkgfHwKICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwgdXNlciB8fCBncm91cCkpCiAgICAgewogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0ZBSUxFRCwKQEAgLTE0NDcsNTYgKzEyNTUsMTEzIEBACiAgICAqICAgICBpbnRlcmZhY2UgKyBtZW1iZXIKICAgICogICAgIGVycm9yCiAgICAqIAotICAgKiAgIGJhc2Ugc2VuZF8gY2FuIGNvbWJpbmUgd2l0aCBzZW5kX2Rlc3RpbmF0aW9uLCBzZW5kX3BhdGgsIHNlbmRfdHlwZSwgc2VuZF9yZXF1ZXN0ZWRfcmVwbHksIHNlbmRfYnJvYWRjYXN0LCBlYXZlc2Ryb3AKKyAgICogICBiYXNlIHNlbmRfIGNhbiBjb21iaW5lIHdpdGggc2VuZF9kZXN0aW5hdGlvbiwgc2VuZF9wYXRoLCBzZW5kX3R5cGUsIHNlbmRfcmVxdWVzdGVkX3JlcGx5CiAgICAqICAgYmFzZSByZWNlaXZlXyB3aXRoIHJlY2VpdmVfc2VuZGVyLCByZWNlaXZlX3BhdGgsIHJlY2VpdmVfdHlwZSwgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHksIGVhdmVzZHJvcAogICAgKgogICAgKiAgIHVzZXIsIGdyb3VwLCBvd24sIG93bl9wcmVmaXggbXVzdCBvY2N1ciBhbG9uZQorICAgKgorICAgKiBQcmV0dHkgc3VyZSB0aGUgYmVsb3cgc3R1ZmYgaXMgYnJva2VuLCBGSVhNRSB0aGluayBhYm91dCBpdCBtb3JlLgogICAgKi8KIAotICBpZiAoYW55X21lc3NhZ2VfYXR0cmlidXRlICsKLSAgICAgICgob3duICE9IE5VTEwpICsKLSAgICAgICAob3duX3ByZWZpeCAhPSBOVUxMKSArCi0gICAgICAgKHVzZXIgIT0gTlVMTCkgKwotICAgICAgIChncm91cCAhPSBOVUxMKSkgPiAxKQorICBpZiAoKHNlbmRfaW50ZXJmYWNlICYmIChzZW5kX2Vycm9yIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfaW50ZXJmYWNlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfbWVtYmVyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfZXJyb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9zZW5kZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChzZW5kX21lbWJlciAmJiAoc2VuZF9lcnJvciB8fAorICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX2ludGVyZmFjZSB8fAorICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX21lbWJlciB8fAorICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX2Vycm9yIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfc2VuZGVyIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfcmVxdWVzdGVkX3JlcGx5IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG93biB8fCBvd25fcHJlZml4IHx8CisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXApKSB8fAorCisgICAgICAoc2VuZF9lcnJvciAmJiAocmVjZWl2ZV9pbnRlcmZhY2UgfHwKKyAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX21lbWJlciB8fAorICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfZXJyb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3NlbmRlciB8fAorICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfcmVxdWVzdGVkX3JlcGx5IHx8CisgICAgICAgICAgICAgICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHx8CisgICAgICAgICAgICAgICAgICAgICAgZ3JvdXApKSB8fAorCisgICAgICAoc2VuZF9kZXN0aW5hdGlvbiAmJiAocmVjZWl2ZV9pbnRlcmZhY2UgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX21lbWJlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfZXJyb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3NlbmRlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfcmVxdWVzdGVkX3JlcGx5IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXApKSB8fAorCisgICAgICAoc2VuZF90eXBlICYmIChyZWNlaXZlX2ludGVyZmFjZSB8fAorICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9tZW1iZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfZXJyb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfc2VuZGVyIHx8CisgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3JlcXVlc3RlZF9yZXBseSB8fAorICAgICAgICAgICAgICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgIHVzZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgIGdyb3VwKSkgfHwKKworICAgICAgKHNlbmRfcGF0aCAmJiAocmVjZWl2ZV9pbnRlcmZhY2UgfHwKKyAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfbWVtYmVyIHx8CisgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX2Vycm9yIHx8CisgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3NlbmRlciB8fAorICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHkgfHwKKyAgICAgICAgICAgICAgICAgICAgIG93biB8fCBvd25fcHJlZml4IHx8CisgICAgICAgICAgICAgICAgICAgICB1c2VyIHx8CisgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChzZW5kX3JlcXVlc3RlZF9yZXBseSAmJiAocmVjZWl2ZV9pbnRlcmZhY2UgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9tZW1iZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9lcnJvciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3NlbmRlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX3JlcXVlc3RlZF9yZXBseSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd24gfHwgb3duX3ByZWZpeCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwKSkgfHwKKworICAgICAgKHJlY2VpdmVfaW50ZXJmYWNlICYmIChyZWNlaXZlX2Vycm9yIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93biB8fCBvd25fcHJlZml4IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXApKSB8fAorCisgICAgICAocmVjZWl2ZV9tZW1iZXIgJiYgKHJlY2VpdmVfZXJyb3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChyZWNlaXZlX2Vycm9yICYmIChvd24gfHwgb3duX3ByZWZpeCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChlYXZlc2Ryb3AgJiYgKG93biB8fCBvd25fcHJlZml4IHx8CisgICAgICAgICAgICAgICAgICAgICB1c2VyIHx8CisgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChyZWNlaXZlX3JlcXVlc3RlZF9yZXBseSAmJiAob3duIHx8IG93bl9wcmVmaXggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCkpIHx8CisKKyAgICAgIChvd24gJiYgKG93bl9wcmVmaXggfHwgdXNlciB8fCBncm91cCkpIHx8CisKKyAgICAgIChvd25fcHJlZml4ICYmIChvd24gfHwgdXNlciB8fCBncm91cCkpIHx8CisKKyAgICAgICh1c2VyICYmIGdyb3VwKSkKICAgICB7CiAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgb24gZWxlbWVudCA8JXM+OiAiCi0gICAgICAgICAgICAgICAgICAgICAgIm93biwgb3duX3ByZWZpeCwgdXNlciwgZ3JvdXAgYW5kIHRoZSBtZXNzYWdlLXJlbGF0ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGVzIGNhbm5vdCBiZSBjb21iaW5lZCIsCisgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBvbiBlbGVtZW50IDwlcz4iLAogICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfbmFtZSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotCi0gIGlmIChhbnlfc2VuZF9hdHRyaWJ1dGUgJiYgYW55X3JlY2VpdmVfYXR0cmlidXRlKQotICAgIHsKLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBvbiBlbGVtZW50IDwlcz46ICIKLSAgICAgICAgICAgICAgICAgICAgICAic2VuZCBhbmQgcmVjZWl2ZSBhdHRyaWJ1dGVzIGNhbm5vdCBiZSBjb21iaW5lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9uYW1lKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgaWYgKChzZW5kX21lbWJlciAhPSBOVUxMIHx8IHNlbmRfaW50ZXJmYWNlICE9IE5VTEwpICYmIHNlbmRfZXJyb3IgIT0gTlVMTCkKLSAgICB7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgb24gZWxlbWVudCA8JXM+OiAiCi0gICAgICAgICAgICAgICAgICAgICAgInNlbmRfZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggc2VuZF9tZW1iZXIgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICJzZW5kX2ludGVyZmFjZSIsCi0gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9uYW1lKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgaWYgKChyZWNlaXZlX21lbWJlciAhPSBOVUxMIHx8IHJlY2VpdmVfaW50ZXJmYWNlICE9IE5VTEwpICYmCi0gICAgICByZWNlaXZlX2Vycm9yICE9IE5VTEwpCi0gICAgewotICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzIG9uIGVsZW1lbnQgPCVzPjogIgotICAgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlX2Vycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHJlY2VpdmVfbWVtYmVyICIKLSAgICAgICAgICAgICAgICAgICAgICAib3IgcmVjZWl2ZV9pbnRlcmZhY2UiLAotICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfbmFtZSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCisgIAogICBydWxlID0gTlVMTDsKIAogICAvKiBJbiBCdXNQb2xpY3lSdWxlLCBOVUxMIHJlcHJlc2VudHMgd2lsZGNhcmQuCkBAIC0xNTA0LDcgKzEzNjksOCBAQAogICAgKi8KICNkZWZpbmUgSVNfV0lMRENBUkQoc3RyKSAoKHN0cikgJiYgKChzdHIpWzBdKSA9PSAnKicgJiYgKChzdHIpWzFdKSA9PSAnXDAnKQogCi0gIGlmIChhbnlfc2VuZF9hdHRyaWJ1dGUpCisgIGlmIChzZW5kX2ludGVyZmFjZSB8fCBzZW5kX21lbWJlciB8fCBzZW5kX2Vycm9yIHx8IHNlbmRfZGVzdGluYXRpb24gfHwKKyAgICAgIHNlbmRfcGF0aCB8fCBzZW5kX3R5cGUgfHwgc2VuZF9yZXF1ZXN0ZWRfcmVwbHkpCiAgICAgewogICAgICAgaW50IG1lc3NhZ2VfdHlwZTsKICAgICAgIApAQCAtMTU0NCwyOSArMTQxMCw2IEBACiAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAKLSAgICAgIGlmIChzZW5kX2Jyb2FkY2FzdCAmJgotICAgICAgICAgICEoc3RyY21wIChzZW5kX2Jyb2FkY2FzdCwgInRydWUiKSA9PSAwIHx8Ci0gICAgICAgICAgICBzdHJjbXAgKHNlbmRfYnJvYWRjYXN0LCAiZmFsc2UiKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJCYWQgdmFsdWUgXCIlc1wiIGZvciAlcyBhdHRyaWJ1dGUsIG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnJvYWRjYXN0LCAic2VuZF9icm9hZGNhc3QiKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgaWYgKHNlbmRfZGVzdGluYXRpb24gIT0gTlVMTCAmJgotICAgICAgICAgIHNlbmRfYnJvYWRjYXN0ICE9IE5VTEwgJiYKLSAgICAgICAgICBzdHJjbXAgKHNlbmRfYnJvYWRjYXN0LCAidHJ1ZSIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBCcm9hZGNhc3QgbWVzc2FnZXMgaGF2ZSBubyBkZXN0aW5hdGlvbiwgc28gdGhpcyBjYW5ub3QKLSAgICAgICAgICAgKiBwb3NzaWJseSBtYXRjaCAqLwotICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJSdWxlIHdpdGggc2VuZF9icm9hZGNhc3Q9XCJ0cnVlXCIgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRfZGVzdGluYXRpb249XCIlc1wiIGNhbm5vdCBtYXRjaCBhbnl0aGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfZGVzdGluYXRpb24pOwotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotCiAgICAgICBpZiAoc2VuZF9yZXF1ZXN0ZWRfcmVwbHkgJiYKICAgICAgICAgICAhKHN0cmNtcCAoc2VuZF9yZXF1ZXN0ZWRfcmVwbHksICJ0cnVlIikgPT0gMCB8fAogICAgICAgICAgICAgc3RyY21wIChzZW5kX3JlcXVlc3RlZF9yZXBseSwgImZhbHNlIikgPT0gMCkpCkBAIC0xNTc2LDE5ICsxNDE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRfcmVxdWVzdGVkX3JlcGx5Iiwgc2VuZF9yZXF1ZXN0ZWRfcmVwbHkpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQotCi0gICAgICAvKiBNYXRjaGluZyBvbmx5IG1lc3NhZ2VzIHdpdGggREJVU19NQVhJTVVNX01FU1NBR0VfVU5JWF9GRFMgb3IgZmV3ZXIKLSAgICAgICAqIGZkcyBpcyB0aGUgc2FtZSBhcyBtYXRjaGluZyBhbGwgbWVzc2FnZXMsIHNvIHdlIGFsd2F5cyBzZXQgYSBtYXhpbXVtLAotICAgICAgICogYnV0IHBlcmhhcHMgYW4gdW5yZWFsaXN0aWNhbGx5IGhpZ2ggb25lLiAqLwotICAgICAgaWYgKCFwYXJzZV9pbnRfYXR0cmlidXRlICgibWF4X2ZkcyIsIG1heF9mZHNfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgREJVU19NQVhJTVVNX01FU1NBR0VfVU5JWF9GRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfTUFYSU1VTV9NRVNTQUdFX1VOSVhfRkRTLCAmbWF4X2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpIHx8Ci0gICAgICAgICAgIXBhcnNlX2ludF9hdHRyaWJ1dGUgKCJtaW5fZmRzIiwgbWluX2Zkc19hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBEQlVTX01BWElNVU1fTUVTU0FHRV9VTklYX0ZEUywgMCwgJm1pbl9mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCisgICAgICAKICAgICAgIHJ1bGUgPSBidXNfcG9saWN5X3J1bGVfbmV3IChCVVNfUE9MSUNZX1JVTEVfU0VORCwgYWxsb3cpOyAKICAgICAgIGlmIChydWxlID09IE5VTEwpCiAgICAgICAgIGdvdG8gbm9tZW07CkBAIC0xNjAyLDI3ICsxNDMzLDEyIEBACiAgICAgICBpZiAoc2VuZF9yZXF1ZXN0ZWRfcmVwbHkpCiAgICAgICAgIHJ1bGUtPmQuc2VuZC5yZXF1ZXN0ZWRfcmVwbHkgPSAoc3RyY21wIChzZW5kX3JlcXVlc3RlZF9yZXBseSwgInRydWUiKSA9PSAwKTsKIAotICAgICAgaWYgKHNlbmRfYnJvYWRjYXN0KQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKHN0cmNtcCAoc2VuZF9icm9hZGNhc3QsICJ0cnVlIikgPT0gMCkKLSAgICAgICAgICAgIHJ1bGUtPmQuc2VuZC5icm9hZGNhc3QgPSBCVVNfUE9MSUNZX1RSSVNUQVRFX1RSVUU7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcnVsZS0+ZC5zZW5kLmJyb2FkY2FzdCA9IEJVU19QT0xJQ1lfVFJJU1RBVEVfRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHJ1bGUtPmQuc2VuZC5icm9hZGNhc3QgPSBCVVNfUE9MSUNZX1RSSVNUQVRFX0FOWTsKLSAgICAgICAgfQotCiAgICAgICBydWxlLT5kLnNlbmQubWVzc2FnZV90eXBlID0gbWVzc2FnZV90eXBlOwogICAgICAgcnVsZS0+ZC5zZW5kLnBhdGggPSBfZGJ1c19zdHJkdXAgKHNlbmRfcGF0aCk7CiAgICAgICBydWxlLT5kLnNlbmQuaW50ZXJmYWNlID0gX2RidXNfc3RyZHVwIChzZW5kX2ludGVyZmFjZSk7CiAgICAgICBydWxlLT5kLnNlbmQubWVtYmVyID0gX2RidXNfc3RyZHVwIChzZW5kX21lbWJlcik7CiAgICAgICBydWxlLT5kLnNlbmQuZXJyb3IgPSBfZGJ1c19zdHJkdXAgKHNlbmRfZXJyb3IpOwogICAgICAgcnVsZS0+ZC5zZW5kLmRlc3RpbmF0aW9uID0gX2RidXNfc3RyZHVwIChzZW5kX2Rlc3RpbmF0aW9uKTsKLSAgICAgIHJ1bGUtPmQuc2VuZC5tYXhfZmRzID0gbWF4X2ZkczsKLSAgICAgIHJ1bGUtPmQuc2VuZC5taW5fZmRzID0gbWluX2ZkczsKLQogICAgICAgaWYgKHNlbmRfcGF0aCAmJiBydWxlLT5kLnNlbmQucGF0aCA9PSBOVUxMKQogICAgICAgICBnb3RvIG5vbWVtOwogICAgICAgaWYgKHNlbmRfaW50ZXJmYWNlICYmIHJ1bGUtPmQuc2VuZC5pbnRlcmZhY2UgPT0gTlVMTCkKQEAgLTE2MzQsNyArMTQ1MCw4IEBACiAgICAgICBpZiAoc2VuZF9kZXN0aW5hdGlvbiAmJiBydWxlLT5kLnNlbmQuZGVzdGluYXRpb24gPT0gTlVMTCkKICAgICAgICAgZ290byBub21lbTsKICAgICB9Ci0gIGVsc2UgaWYgKGFueV9yZWNlaXZlX2F0dHJpYnV0ZSkKKyAgZWxzZSBpZiAocmVjZWl2ZV9pbnRlcmZhY2UgfHwgcmVjZWl2ZV9tZW1iZXIgfHwgcmVjZWl2ZV9lcnJvciB8fCByZWNlaXZlX3NlbmRlciB8fAorICAgICAgICAgICByZWNlaXZlX3BhdGggfHwgcmVjZWl2ZV90eXBlIHx8IGVhdmVzZHJvcCB8fCByZWNlaXZlX3JlcXVlc3RlZF9yZXBseSkKICAgICB7CiAgICAgICBpbnQgbWVzc2FnZV90eXBlOwogICAgICAgCkBAIC0xNjg0LDE2ICsxNTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVfcmVxdWVzdGVkX3JlcGx5IiwgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHkpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQotCi0gICAgICBpZiAoIXBhcnNlX2ludF9hdHRyaWJ1dGUgKCJtYXhfZmRzIiwgbWF4X2Zkc19hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBEQlVTX01BWElNVU1fTUVTU0FHRV9VTklYX0ZEUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19NQVhJTVVNX01FU1NBR0VfVU5JWF9GRFMsICZtYXhfZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikgfHwKLSAgICAgICAgICAhcGFyc2VfaW50X2F0dHJpYnV0ZSAoIm1pbl9mZHMiLCBtaW5fZmRzX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIERCVVNfTUFYSU1VTV9NRVNTQUdFX1VOSVhfRkRTLCAwLCAmbWluX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KKyAgICAgIAogICAgICAgcnVsZSA9IGJ1c19wb2xpY3lfcnVsZV9uZXcgKEJVU19QT0xJQ1lfUlVMRV9SRUNFSVZFLCBhbGxvdyk7IAogICAgICAgaWYgKHJ1bGUgPT0gTlVMTCkKICAgICAgICAgZ290byBub21lbTsKQEAgLTE3MTAsOCArMTUxOCw2IEBACiAgICAgICBydWxlLT5kLnJlY2VpdmUubWVtYmVyID0gX2RidXNfc3RyZHVwIChyZWNlaXZlX21lbWJlcik7CiAgICAgICBydWxlLT5kLnJlY2VpdmUuZXJyb3IgPSBfZGJ1c19zdHJkdXAgKHJlY2VpdmVfZXJyb3IpOwogICAgICAgcnVsZS0+ZC5yZWNlaXZlLm9yaWdpbiA9IF9kYnVzX3N0cmR1cCAocmVjZWl2ZV9zZW5kZXIpOwotICAgICAgcnVsZS0+ZC5yZWNlaXZlLm1heF9mZHMgPSBtYXhfZmRzOwotICAgICAgcnVsZS0+ZC5yZWNlaXZlLm1pbl9mZHMgPSBtaW5fZmRzOwogCiAgICAgICBpZiAocmVjZWl2ZV9wYXRoICYmIHJ1bGUtPmQucmVjZWl2ZS5wYXRoID09IE5VTEwpCiAgICAgICAgIGdvdG8gbm9tZW07CkBAIC0xNzc1LDcgKzE1ODEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIlVua25vd24gdXNlcm5hbWUgXCIlc1wiIG9uIGVsZW1lbnQgPCVzPiIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmtub3duIHVzZXJuYW1lIFwiJXNcIiBvbiBlbGVtZW50IDwlcz5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsIGVsZW1lbnRfbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4MDcsNyArMTYxMyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiVW5rbm93biBncm91cCBcIiVzXCIgb24gZWxlbWVudCA8JXM+IiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIlVua25vd24gZ3JvdXAgXCIlc1wiIG9uIGVsZW1lbnQgPCVzPlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAsIGVsZW1lbnRfbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4MjYsNyArMTYzMiw2IEBACiAgICAgICBzd2l0Y2ggKHBlLT5kLnBvbGljeS50eXBlKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgUE9MSUNZX0lHTk9SRUQ6Ci0gICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgLyogZHJvcCB0aGUgcnVsZSBvbiB0aGUgZmxvb3IgKi8KICAgICAgICAgICBicmVhazsKICAgICAgICAgICAKQEAgLTIyNTAsNyArMjA1NSw2IEBACiAgIHN3aXRjaCAoZS0+dHlwZSkKICAgICB7CiAgICAgY2FzZSBFTEVNRU5UX05PTkU6Ci0gICAgZGVmYXVsdDoKICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImVsZW1lbnQgaW4gc3RhY2sgaGFzIG5vIHR5cGUiKTsKICAgICAgIGJyZWFrOwogCkBAIC0yMzE4LDggKzIxMjIsNyBAQAogewogICBpZiAoX2RidXNfcGF0aF9pc19hYnNvbHV0ZSAoZmlsZW5hbWUpKQogICAgIHsKLSAgICAgIGlmICghX2RidXNfc3RyaW5nX2NvcHkgKGZpbGVuYW1lLCAwLCBmdWxsX3BhdGgsIDApKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICByZXR1cm4gX2RidXNfc3RyaW5nX2NvcHkgKGZpbGVuYW1lLCAwLCBmdWxsX3BhdGgsIDApOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAgLTIzMjgsMTIgKzIxMzEsOSBAQAogICAgICAgCiAgICAgICBpZiAoIV9kYnVzX2NvbmNhdF9kaXJfYW5kX2ZpbGUgKGZ1bGxfcGF0aCwgZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgIHJldHVybiBUUlVFOwogICAgIH0KLQotICBpZiAoIV9kYnVzX3JlcGxhY2VfaW5zdGFsbF9wcmVmaXggKGZ1bGxfcGF0aCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwogfQogCiBzdGF0aWMgZGJ1c19ib29sX3QKQEAgLTI1MDYsMTcgKzIzMDYsMTUgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0IChlcnJvcikpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyogV2UgdXNlIGJvdGggc3lzbG9nIGFuZCBzdGRlcnIgaGVyZSwgYmVjYXVzZSB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAvKiBXZSBsb2cgdG8gc3lzbG9nIHVuY29uZGl0aW9uYWxseSBoZXJlLCBiZWNhdXNlIHRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAqIHRoZSBjb25maWd1cmF0aW9uIHBhcnNlciwgc28gd2UgZG9uJ3QgeWV0IGtub3cgd2hldGhlcgotICAgICAgICAgICAgICAgICAgICogdGhpcyBidXMgaXMgZ29pbmcgdG8gd2FudCB0byB3cml0ZSB0byBzeXNsb2chIEVyciBvbgotICAgICAgICAgICAgICAgICAgICogdGhlIHNpZGUgb2YgbWFraW5nIHN1cmUgdGhlIG1lc3NhZ2UgZ2V0cyB0byB0aGUgc3lzYWRtaW4KLSAgICAgICAgICAgICAgICAgICAqIHNvbWVob3cuICovCi0gICAgICAgICAgICAgICAgICBfZGJ1c19pbml0X3N5c3RlbV9sb2cgKCJkYnVzLWRhZW1vbiIsCi0gICAgICAgICAgICAgICAgICAgICAgREJVU19MT0dfRkxBR1NfU1RERVJSIHwgREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRyk7Ci0gICAgICAgICAgICAgICAgICBfZGJ1c19sb2cgKERCVVNfU1lTVEVNX0xPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5jb3VudGVyZWQgZXJyb3IgJyVzJyB3aGlsZSBwYXJzaW5nICclcyciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZnVsbF9wYXRoKSk7CisgICAgICAgICAgICAgICAgICAgKiB0aGlzIGJ1cyBpcyBnb2luZyB0byB3YW50IHRvIHdyaXRlIHRvIHN5c2xvZyEgKFRoZXJlJ3MKKyAgICAgICAgICAgICAgICAgICAqIGFsc28gc29tZSBsYXllciBpbnZlcnNpb24gZ29pbmcgb24sIGlmIHdlIHdhbnQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgKiB0aGUgYnVzIGNvbnRleHQuKSAqLworICAgICAgICAgICAgICAgICAgX2RidXNfc3lzdGVtX2xvZyAoREJVU19TWVNURU1fTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5jb3VudGVyZWQgZXJyb3IgJyVzJyB3aGlsZSBwYXJzaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+bWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmZ1bGxfcGF0aCkpOwogICAgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlIChlcnJvcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjU5Miw3ICsyMzkwLDYgQEAKICAgc3dpdGNoICh0b3BfZWxlbWVudF90eXBlIChwYXJzZXIpKQogICAgIHsKICAgICBjYXNlIEVMRU1FTlRfTk9ORToKLSAgICBkZWZhdWx0OgogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZWxlbWVudCBhdCB0b3Agb2Ygc3RhY2sgaGFzIG5vIHR5cGUiKTsKICAgICAgIHJldHVybiBGQUxTRTsKIApAQCAtMjc5NywxMCArMjU5NCw4IEBACiAgICAgY2FzZSBFTEVNRU5UX1NFUlZJQ0VESVI6CiAgICAgICB7CiAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAgIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKmRpcjsKICAgICAgICAgREJ1c1N0cmluZyBmdWxsX3BhdGg7Ci0gICAgICAgIERCdXNMaXN0ICpsaW5rOwotCisgICAgICAgIAogICAgICAgICBlLT5oYWRfY29udGVudCA9IFRSVUU7CiAKICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmZ1bGxfcGF0aCkpCkBAIC0yODE4LDI5ICsyNjEzLDE0IEBACiAgICAgICAgICAgICBnb3RvIG5vbWVtOwogICAgICAgICAgIH0KIAotICAgICAgICAvKiA8c2VydmljZWRpci8+IGhhcyB0cmFkaXRpb25hbGx5IGltcGxpZWQgdGhhdCB3ZSB3YXRjaCB0aGUKLSAgICAgICAgICogZGlyZWN0b3J5IHdpdGggaW5vdGlmeSwgYW5kIGFsbG93IHNlcnZpY2UgZmlsZXMgd2hvc2UgbmFtZXMgZG8gbm90Ci0gICAgICAgICAqIG1hdGNoIHRoZSBidXMgbmFtZSAqLwotICAgICAgICBkaXIgPSBidXNfY29uZmlnX3NlcnZpY2VfZGlyX25ld190YWtlIChzLCBCVVNfU0VSVklDRV9ESVJfRkxBR1NfTk9ORSk7Ci0KLSAgICAgICAgaWYgKGRpciA9PSBOVUxMKQorICAgICAgICAvKiBfb25seV8gZXh0cmEgc2Vzc2lvbiBkaXJlY3RvcmllcyBjYW4gYmUgc3BlY2lmaWVkICovCisgICAgICAgIGlmICghc2VydmljZV9kaXJzX2FwcGVuZF91bmlxdWVfb3JfZnJlZSAoJnBhcnNlci0+c2VydmljZV9kaXJzLCBzKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZ1bGxfcGF0aCk7CiAgICAgICAgICAgICBkYnVzX2ZyZWUgKHMpOwogICAgICAgICAgICAgZ290byBub21lbTsKICAgICAgICAgICB9CiAKLSAgICAgICAgbGluayA9IF9kYnVzX2xpc3RfYWxsb2NfbGluayAoZGlyKTsKLQotICAgICAgICBpZiAobGluayA9PSBOVUxMKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZnVsbF9wYXRoKTsKLSAgICAgICAgICAgIGJ1c19jb25maWdfc2VydmljZV9kaXJfZnJlZSAoZGlyKTsKLSAgICAgICAgICAgIGdvdG8gbm9tZW07Ci0gICAgICAgICAgfQotCi0gICAgICAgIC8qIGNhbm5vdCBmYWlsICovCi0gICAgICAgIHNlcnZpY2VfZGlyc19hcHBlbmRfbGlua191bmlxdWVfb3JfZnJlZSAoJnBhcnNlci0+c2VydmljZV9kaXJzLCBsaW5rKTsKICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZmdWxsX3BhdGgpOwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC0zMDEwLDUxICsyNzkwLDYgQEAKICAgcmV0dXJuIHRhYmxlOwogfQogCi0vKgotICogUmV0dXJuIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCB3aXRoIGlub3RpZnksCi0gKiBhcyBzdHJpbmdzLiBUaGUgbGlzdCBtaWdodCBiZSBlbXB0eSBhbmQgaXMgaW4gYXJiaXRyYXJ5IG9yZGVyLgotICoKLSAqIFRoZSBsaXN0IG11c3QgYmUgZW1wdHkgb24gZW50cnkuIE9uIHN1Y2Nlc3MsIHRoZSBsaW5rcyBhcmUgb3duZWQgYnkgdGhlCi0gKiBjYWxsZXIgYW5kIG11c3QgYmUgZnJlZWQsIGJ1dCB0aGUgZGF0YSBpbiBlYWNoIGxpbmsgcmVtYWlucyBvd25lZCBieQotICogdGhlIEJ1c0NvbmZpZ1BhcnNlciBhbmQgbXVzdCBub3QgYmUgZnJlZWQ6IGluIEdPYmplY3QtSW50cm9zcGVjdGlvbgotICogbm90YXRpb24sIGl0IGlzICh0cmFuc2ZlciBjb250YWluZXIpLgotICovCi1kYnVzX2Jvb2xfdAotYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3dhdGNoZWRfZGlycyAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTGlzdCAqKndhdGNoZWRfZGlycykKLXsKLSAgREJ1c0xpc3QgKmxpbms7Ci0KLSAgX2RidXNfYXNzZXJ0ICgqd2F0Y2hlZF9kaXJzID09IE5VTEwpOwotCi0gIGZvciAobGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKCZwYXJzZXItPmNvbmZfZGlycyk7Ci0gICAgICAgbGluayAhPSBOVUxMOwotICAgICAgIGxpbmsgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZwYXJzZXItPmNvbmZfZGlycywgbGluaykpCi0gICAgewotICAgICAgaWYgKCFfZGJ1c19saXN0X2FwcGVuZCAod2F0Y2hlZF9kaXJzLCBsaW5rLT5kYXRhKSkKLSAgICAgICAgZ290byBvb207Ci0gICAgfQotCi0gIGZvciAobGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKCZwYXJzZXItPnNlcnZpY2VfZGlycyk7Ci0gICAgICAgbGluayAhPSBOVUxMOwotICAgICAgIGxpbmsgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZwYXJzZXItPnNlcnZpY2VfZGlycywgbGluaykpCi0gICAgewotICAgICAgQnVzQ29uZmlnU2VydmljZURpciAqZGlyID0gbGluay0+ZGF0YTsKLQotICAgICAgaWYgKGRpci0+ZmxhZ3MgJiBCVVNfU0VSVklDRV9ESVJfRkxBR1NfTk9fV0FUQ0gpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICh3YXRjaGVkX2RpcnMsIGRpci0+cGF0aCkpCi0gICAgICAgIGdvdG8gb29tOwotICAgIH0KLQotICByZXR1cm4gVFJVRTsKLQotb29tOgotICBfZGJ1c19saXN0X2NsZWFyICh3YXRjaGVkX2RpcnMpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KICNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKQEAgLTMwNjksNyArMjgwNCw3IEBACiBkb19jaGVja19vd25fcnVsZXMgKEJ1c1BvbGljeSAgKnBvbGljeSkKIHsKICAgY29uc3Qgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNoYXIgKm5hbWU7CiAgICAgZGJ1c19ib29sX3QgYWxsb3dlZDsKICAgfSBjaGVja3NbXSA9IHsKICAgICB7Im9yZy5mcmVlZGVza3RvcCIsIEZBTFNFfSwKQEAgLTMwOTksMTIgKzI4MzQsMTIgQEAKICAgICAgICAgICAgICAgcmV0ID8gImFsbG93ZWQiIDogIm5vdCBhbGxvd2VkIik7CiAgICAgICBpZiAoY2hlY2tzW2ldLmFsbG93ZWQgJiYgIXJldCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3Qgb3duICVzIiwgY2hlY2tzW2ldLm5hbWUpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3Qgb3duICVzXG4iLCBjaGVja3NbaV0ubmFtZSk7CiAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICBpZiAoIWNoZWNrc1tpXS5hbGxvd2VkICYmIHJldCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW4gb3duICVzIiwgY2hlY2tzW2ldLm5hbWUpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW4gb3duICVzXG4iLCBjaGVja3NbaV0ubmFtZSk7CiAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnNlcnZpY2VfbmFtZSk7CkBAIC0zMTQwLDcgKzI4NzUsNyBAQAogICAgICAgICB9CiAgICAgICBlbHNlIGlmICh2YWxpZGl0eSA9PSBWQUxJRCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gbG9hZCB2YWxpZCBmaWxlIGJ1dCBzdGlsbCBoYWQgbWVtb3J5OiAlcyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBsb2FkIHZhbGlkIGZpbGUgYnV0IHN0aWxsIGhhZCBtZW1vcnk6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogCiAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwpAQCAtMzE2NSw3ICsyOTAwLDcgQEAKIAogICAgICAgaWYgKHZhbGlkaXR5ID09IElOVkFMSUQpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiQWNjZXB0ZWQgaW52YWxpZCBmaWxlIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIkFjY2VwdGVkIGludmFsaWQgZmlsZVxuIik7CiAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAKQEAgLTMyMDMsNyArMjkzOCw3IEBACiAgIGRpciA9IE5VTEw7CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnRlc3RfZGlyZWN0b3J5KSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgdGVzdF9kaXJlY3RvcnkiKTsKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgdGVzdF9kaXJlY3RvcnlcbiIpOwogCiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZmlsZW5hbWUsIHN1YmRpcik7CiAKQEAgLTMyMTYsMTMgKzI5NTEsMTMgQEAKIAogICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZpbGVuYW1lKTsKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmZpbGVuYW1lKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgZmlsZW5hbWUgc3RyaW5nIik7CisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGFsbG9jYXRlIGZpbGVuYW1lIHN0cmluZ1xuIik7CiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogICBkaXIgPSBfZGJ1c19kaXJlY3Rvcnlfb3BlbiAoJnRlc3RfZGlyZWN0b3J5LCAmZXJyb3IpOwogICBpZiAoZGlyID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBvcGVuICVzOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmdGVzdF9kaXJlY3RvcnkpLAogICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CkBAIC0zMjg0LDcgKzMwMTksNyBAQAogCiAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IGdldCBuZXh0IGZpbGUgaW4gJXM6ICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgZ2V0IG5leHQgZmlsZSBpbiAlczogJXNcbiIsCiAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZ0ZXN0X2RpcmVjdG9yeSksCiAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKQEAgLTMzNTMsMjkgKzMwODgsOCBAQAogCXJldHVybiBGQUxTRTsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBFTEVNRU5UX05PTkU6Ci0gICAgY2FzZSBFTEVNRU5UX0JVU0NPTkZJRzoKLSAgICBjYXNlIEVMRU1FTlRfVVNFUjoKLSAgICBjYXNlIEVMRU1FTlRfTElTVEVOOgotICAgIGNhc2UgRUxFTUVOVF9BVVRIOgotICAgIGNhc2UgRUxFTUVOVF9BTExPVzoKLSAgICBjYXNlIEVMRU1FTlRfREVOWToKLSAgICBjYXNlIEVMRU1FTlRfRk9SSzoKLSAgICBjYXNlIEVMRU1FTlRfUElERklMRToKLSAgICBjYXNlIEVMRU1FTlRfU0VSVklDRURJUjoKLSAgICBjYXNlIEVMRU1FTlRfU0VSVklDRUhFTFBFUjoKLSAgICBjYXNlIEVMRU1FTlRfSU5DTFVERURJUjoKLSAgICBjYXNlIEVMRU1FTlRfQ09ORklHVFlQRToKLSAgICBjYXNlIEVMRU1FTlRfU0VMSU5VWDoKLSAgICBjYXNlIEVMRU1FTlRfQVNTT0NJQVRFOgotICAgIGNhc2UgRUxFTUVOVF9TVEFOREFSRF9TRVNTSU9OX1NFUlZJQ0VESVJTOgotICAgIGNhc2UgRUxFTUVOVF9TVEFOREFSRF9TWVNURU1fU0VSVklDRURJUlM6Ci0gICAgY2FzZSBFTEVNRU5UX0tFRVBfVU1BU0s6Ci0gICAgY2FzZSBFTEVNRU5UX1NZU0xPRzoKLSAgICBjYXNlIEVMRU1FTlRfQUxMT1dfQU5PTllNT1VTOgotICAgIGNhc2UgRUxFTUVOVF9BUFBBUk1PUjoKICAgICBkZWZhdWx0OgotICAgICAgLyogZG8gbm90aGluZzogbm90aGluZyBpbiB0aGUgRWxlbWVudCBzdHJ1Y3QgZm9yIHRoZXNlIHR5cGVzICovCisgICAgICAvKiBkbyBub3RoaW5nICovCiAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM0MjYsMzQgKzMxNDAsNiBAQAogfQogCiBzdGF0aWMgZGJ1c19ib29sX3QKLWxpc3RzX29mX3NlcnZpY2VfZGlyc19lcXVhbCAoREJ1c0xpc3QgKmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNMaXN0ICpiKQotewotICBEQnVzTGlzdCAqaWE7Ci0gIERCdXNMaXN0ICppYjsKLQotICBpYSA9IGE7Ci0gIGliID0gYjsKLQotICB3aGlsZSAoaWEgIT0gTlVMTCAmJiBpYiAhPSBOVUxMKQotICAgIHsKLSAgICAgIEJ1c0NvbmZpZ1NlcnZpY2VEaXIgKmRhID0gaWEtPmRhdGE7Ci0gICAgICBCdXNDb25maWdTZXJ2aWNlRGlyICpkYiA9IGliLT5kYXRhOwotCi0gICAgICBpZiAoc3RyY21wIChkYS0+cGF0aCwgZGItPnBhdGgpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgIGlmIChkYS0+ZmxhZ3MgIT0gZGItPmZsYWdzKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgIGlhID0gX2RidXNfbGlzdF9nZXRfbmV4dF9saW5rICgmYSwgaWEpOwotICAgICAgaWIgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZiLCBpYik7Ci0gICAgfQotCi0gIHJldHVybiBpYSA9PSBOVUxMICYmIGliID09IE5VTEw7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAogbGltaXRzX2VxdWFsIChjb25zdCBCdXNMaW1pdHMgKmEsCiAJICAgICAgY29uc3QgQnVzTGltaXRzICpiKQogewpAQCAtMzQ5Niw3ICszMTgyLDcgQEAKICAgaWYgKCFsaXN0c19vZl9jX3N0cmluZ3NfZXF1YWwgKGEtPm1lY2hhbmlzbXMsIGItPm1lY2hhbmlzbXMpKQogICAgIHJldHVybiBGQUxTRTsKIAotICBpZiAoIWxpc3RzX29mX3NlcnZpY2VfZGlyc19lcXVhbCAoYS0+c2VydmljZV9kaXJzLCBiLT5zZXJ2aWNlX2RpcnMpKQorICBpZiAoIWxpc3RzX29mX2Nfc3RyaW5nc19lcXVhbCAoYS0+c2VydmljZV9kaXJzLCBiLT5zZXJ2aWNlX2RpcnMpKQogICAgIHJldHVybiBGQUxTRTsKICAgCiAgIC8qIEZJWE1FOiBjb21wYXJlIHBvbGljeSAqLwpAQCAtMzU0NCw3ICszMjMwLDcgQEAKICAgZGlyID0gX2RidXNfZGlyZWN0b3J5X29wZW4gKHRhcmdldF9kaXJlY3RvcnksICZlcnJvcik7CiAgIGlmIChkaXIgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IG9wZW4gJXM6ICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIsCiAJCSAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICh0YXJnZXRfZGlyZWN0b3J5KSwKIAkJICBlcnJvci5tZXNzYWdlKTsKICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKQEAgLTM1ODEsNyArMzI2Nyw3IEBACiAKICAgICAgIGlmIChwYXJzZXIgPT0gTlVMTCkKIAl7Ci0JICBfZGJ1c193YXJuICgiQ291bGQgbm90IGxvYWQgZmlsZSAlczogJXMiLAorCSAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBsb2FkIGZpbGUgJXM6ICVzXG4iLAogCQkgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZmdWxsX3BhdGgpLAogCQkgICAgICBlcnJvci5tZXNzYWdlKTsKICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZ1bGxfcGF0aCk7CkBAIC0zNjUwLDcgKzMzMzYsNyBAQAogICBkaXIgPSBfZGJ1c19kaXJlY3Rvcnlfb3BlbiAoJnRlc3RfZGlyZWN0b3J5LCAmZXJyb3IpOwogICBpZiAoZGlyID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBvcGVuICVzOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iLAogCQkgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnRlc3RfZGlyZWN0b3J5KSwKIAkJICBlcnJvci5tZXNzYWdlKTsKICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKQEAgLTM2OTUsNzkgKzMzODEsNTIgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW10gPSAKICAgICAgICAgeworI2lmZGVmIERCVVNfVU5JWAorICAgICAgICAgIi90ZXN0aG9tZS9mb28vLnRlc3Rsb2NhbC90ZXN0c2hhcmUvZGJ1cy0xL3NlcnZpY2VzIiwKKyAgICAgICAgICIvdGVzdHVzci90ZXN0bG9jYWwvdGVzdHNoYXJlL2RidXMtMS9zZXJ2aWNlcyIsCisgICAgICAgICAiL3Rlc3R1c3IvdGVzdHNoYXJlL2RidXMtMS9zZXJ2aWNlcyIsCisgICAgICAgICBEQlVTX0RBVEFESVIiL2RidXMtMS9zZXJ2aWNlcyIsCisjZW5kaWYKIC8qIHdpbGwgYmUgZmlsbGVkIGluIHRlc3RfZGVmYXVsdF9zZXNzaW9uX3NlcnZpY2VkaXJzKCkgKi8KICNpZmRlZiBEQlVTX1dJTgotICAgICAgICAgTlVMTCwgLyogaW5zdGFsbCByb290LWJhc2VkICovCi0gICAgICAgICBOVUxMLCAvKiBDb21tb25Qcm9ncmFtRmlsZXMtYmFzZWQgKi8KLSNlbHNlCi0gICAgICAgICBOVUxMLCAvKiBYREdfUlVOVElNRV9ESVItYmFzZWQgKi8KLSAgICAgICAgIE5VTEwsIC8qIFhER19EQVRBX0hPTUUtYmFzZWQgKi8KLSAgICAgICAgIE5VTEwsIC8qIFhER19EQVRBX0RJUlMtYmFzZWQgKi8KLSAgICAgICAgIE5VTEwsIC8qIFhER19EQVRBX0RJUlMtYmFzZWQgKi8KLSAgICAgICAgIERCVVNfREFUQURJUiAiL2RidXMtMS9zZXJ2aWNlcyIsCisgICAgICAgICBOVUxMLAorICAgICAgICAgTlVMTCwKICNlbmRpZgogICAgICAgICAgTlVMTAogICAgICAgICB9OwogCiBzdGF0aWMgZGJ1c19ib29sX3QKLXRlc3RfZGVmYXVsdF9zZXNzaW9uX3NlcnZpY2VkaXJzIChjb25zdCBEQnVzU3RyaW5nICp0ZXN0X2Jhc2VfZGlyKQordGVzdF9kZWZhdWx0X3Nlc3Npb25fc2VydmljZWRpcnMgKHZvaWQpCiB7Ci0gIEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICBEQnVzTGlzdCAqKmRpcnM7Ci0gIERCdXNMaXN0ICp3YXRjaGVkX2RpcnMgPSBOVUxMOworICBEQnVzTGlzdCAqZGlyczsKICAgREJ1c0xpc3QgKmxpbms7Ci0gIERCdXNTdHJpbmcgdG1wOwotICBEQnVzU3RyaW5nIGZ1bGxfcGF0aDsKICAgREJ1c1N0cmluZyBwcm9nczsKICAgREJ1c1N0cmluZyBpbnN0YWxsX3Jvb3RfYmFzZWQ7Ci0gIERCdXNTdHJpbmcgcnVudGltZV9kaXJfYmFzZWQ7Ci0gIERCdXNTdHJpbmcgZGF0YV9ob21lX2Jhc2VkOwotICBEQnVzU3RyaW5nIGRhdGFfZGlyc19iYXNlZDsKLSAgREJ1c1N0cmluZyBkYXRhX2RpcnNfYmFzZWQyOwogICBpbnQgaTsKICAgZGJ1c19ib29sX3QgcmV0ID0gRkFMU0U7CiAjaWZkZWYgREJVU19XSU4KKyAgY29uc3QgY2hhciAqdG1wOwogICBjb25zdCBjaGFyICpjb21tb25fcHJvZ3M7Ci0jZWxzZQotICBjb25zdCBjaGFyICpkYnVzX3Rlc3RfYnVpbGRkaXI7Ci0gIGNvbnN0IGNoYXIgKnhkZ19kYXRhX2hvbWU7Ci0gIGNvbnN0IGNoYXIgKnhkZ19ydW50aW1lX2RpcjsKICNlbmRpZgogCi0gIC8qIE9uIGVhY2ggcGxhdGZvcm0gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGFsbCBvZiB0aGVzZSwgYnV0IGl0J3MgZWFzaWVyIHRvCi0gICAqIGhhbmRsZSB0aGUgZGVhbGxvY2F0aW9uIGlmIHdlIGFsd2F5cyBhbGxvY2F0ZSB0aGVtLCB3aGV0aGVyIG5lZWRlZCBvcgotICAgKiBub3QgKi8KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmZ1bGxfcGF0aCkgfHwKLSAgICAgICFfZGJ1c19zdHJpbmdfaW5pdCAoJnByb2dzKSB8fAotICAgICAgIV9kYnVzX3N0cmluZ19pbml0ICgmaW5zdGFsbF9yb290X2Jhc2VkKSB8fAotICAgICAgIV9kYnVzX3N0cmluZ19pbml0ICgmcnVudGltZV9kaXJfYmFzZWQpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2luaXQgKCZkYXRhX2hvbWVfYmFzZWQpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2luaXQgKCZkYXRhX2RpcnNfYmFzZWQpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2luaXQgKCZkYXRhX2RpcnNfYmFzZWQyKSkKKyAgLyogT24gVW5peCB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlc2UsIGJ1dCBpdCdzIGVhc2llciB0byBoYW5kbGUgdGhlCisgICAqIGRlYWxsb2NhdGlvbiBpZiB3ZSBhbHdheXMgYWxsb2NhdGUgdGhlbSwgd2hldGhlciBuZWVkZWQgb3Igbm90ICovCisgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZwcm9ncykgfHwKKyAgICAgICFfZGJ1c19zdHJpbmdfaW5pdCAoJmluc3RhbGxfcm9vdF9iYXNlZCkpCiAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiT09NIGFsbG9jYXRpbmcgc3RyaW5ncyIpOwogCi0gIGlmICghX2RidXNfc3RyaW5nX2NvcHkgKHRlc3RfYmFzZV9kaXIsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZmdWxsX3BhdGgsIDApKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkbid0IGNvcHkgdGVzdF9iYXNlX2RpciB0byBmdWxsX3BhdGgiKTsKLQotICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJnRtcCwgInZhbGlkLWNvbmZpZy1maWxlcyIpOwotCi0gIGlmICghX2RidXNfY29uY2F0X2Rpcl9hbmRfZmlsZSAoJmZ1bGxfcGF0aCwgJnRtcCkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGRuJ3QgYWxsb2NhdGUgZnVsbCBwYXRoIik7Ci0KLSAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZ0bXAsICJzdGFuZGFyZC1zZXNzaW9uLWRpcnMuY29uZiIpOwotCi0gIGlmICghX2RidXNfY29uY2F0X2Rpcl9hbmRfZmlsZSAoJmZ1bGxfcGF0aCwgJnRtcCkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGRuJ3QgYWxsb2NhdGUgZnVsbCBwYXRoIik7Ci0KICNpZmRlZiBEQlVTX1dJTgogICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZpbnN0YWxsX3Jvb3RfYmFzZWQsIERCVVNfREFUQURJUikgfHwKLSAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmaW5zdGFsbF9yb290X2Jhc2VkLCAiL2RidXMtMS9zZXJ2aWNlcyIpIHx8Ci0gICAgICAhX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoJmluc3RhbGxfcm9vdF9iYXNlZCkpCisgICAgICAhX2RidXNfc3RyaW5nX2FwcGVuZCAoJmluc3RhbGxfcm9vdF9iYXNlZCwgIi9kYnVzLTEvc2VydmljZXMiKSkKICAgICBnb3RvIG91dDsKIAotICBfZGJ1c19hc3NlcnQgKF9kYnVzX3BhdGhfaXNfYWJzb2x1dGUgKCZpbnN0YWxsX3Jvb3RfYmFzZWQpKTsKKyAgdG1wID0gX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoCisgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZpbnN0YWxsX3Jvb3RfYmFzZWQpKTsKKworICBpZiAodG1wID09IE5VTEwgfHwKKyAgICAgICFfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJmluc3RhbGxfcm9vdF9iYXNlZCwgMCkgfHwKKyAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmaW5zdGFsbF9yb290X2Jhc2VkLCB0bXApKQorICAgIGdvdG8gb3V0OwogCiAgIHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzWzBdID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgKICAgICAgICZpbnN0YWxsX3Jvb3RfYmFzZWQpOwpAQCAtMzc4NCwxNDMgKzM0NDMsNzIgQEAKIAogICAgICAgdGVzdF9zZXNzaW9uX3NlcnZpY2VfZGlyX21hdGNoZXNbMV0gPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEoJnByb2dzKTsKICAgICB9Ci0jZWxzZQotICBkYnVzX3Rlc3RfYnVpbGRkaXIgPSBfZGJ1c19nZXRlbnYgKCJEQlVTX1RFU1RfQlVJTERESVIiKTsKLSAgeGRnX2RhdGFfaG9tZSA9IF9kYnVzX2dldGVudiAoIlhER19EQVRBX0hPTUUiKTsKLSAgeGRnX3J1bnRpbWVfZGlyID0gX2RidXNfZ2V0ZW52ICgiWERHX1JVTlRJTUVfRElSIik7Ci0KLSAgaWYgKGRidXNfdGVzdF9idWlsZGRpciA9PSBOVUxMIHx8IHhkZ19kYXRhX2hvbWUgPT0gTlVMTCB8fAotICAgICAgeGRnX3J1bnRpbWVfZGlyID09IE5VTEwpCi0gICAgewotICAgICAgcHJpbnRmICgiTm90IHRlc3RpbmcgZGVmYXVsdCBzZXNzaW9uIHNlcnZpY2UgZGlyZWN0b3JpZXMgYmVjYXVzZSBhICIKLSAgICAgICAgICAgICAgImJ1aWxkLXRpbWUgdGVzdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0OiAiCi0gICAgICAgICAgICAgICJzZWUgQU1fVEVTVFNfRU5WSVJPTk1FTlQgaW4gdGVzdHMvTWFrZWZpbGUuYW1cbiIpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZkYXRhX2RpcnNfYmFzZWQsIGRidXNfdGVzdF9idWlsZGRpcikgfHwKLSAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmZGF0YV9kaXJzX2Jhc2VkLCAiL1hER19EQVRBX0RJUlMvZGJ1cy0xL3NlcnZpY2VzIikgfHwKLSAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmZGF0YV9kaXJzX2Jhc2VkMiwgZGJ1c190ZXN0X2J1aWxkZGlyKSB8fAotICAgICAgIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZkYXRhX2RpcnNfYmFzZWQyLCAiL1hER19EQVRBX0RJUlMyL2RidXMtMS9zZXJ2aWNlcyIpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2FwcGVuZCAoJnJ1bnRpbWVfZGlyX2Jhc2VkLCB4ZGdfcnVudGltZV9kaXIpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2FwcGVuZCAoJmRhdGFfaG9tZV9iYXNlZCwgeGRnX2RhdGFfaG9tZSkgfHwKLSAgICAgICFfZGJ1c19zdHJpbmdfYXBwZW5kICgmZGF0YV9ob21lX2Jhc2VkLCAiL2RidXMtMS9zZXJ2aWNlcyIpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIm91dCBvZiBtZW1vcnkiKTsKLQotICBpZiAoIV9kYnVzX2Vuc3VyZV9kaXJlY3RvcnkgKCZydW50aW1lX2Rpcl9iYXNlZCwgTlVMTCkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiVW5hYmxlIHRvIGNyZWF0ZSBmYWtlIFhER19SVU5USU1FX0RJUiIpOwotCi0gIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJnJ1bnRpbWVfZGlyX2Jhc2VkLCAiL2RidXMtMS9zZXJ2aWNlcyIpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIm91dCBvZiBtZW1vcnkiKTsKLQotICAvKiBTYW5pdHkgY2hlY2s6IHRoZSBNYWtlZmlsZSBzZXRzIHRoaXMgdXAuIFdlIGFzc3VtZSB0aGF0IGlmIHRoaXMgaXMKLSAgICogcmlnaHQsIHRoZSBYREdfREFUQV9ESVJTIHdpbGwgYmUgdG9vLiAqLwotICBpZiAoIV9kYnVzX3N0cmluZ19zdGFydHNfd2l0aF9jX3N0ciAoJmRhdGFfaG9tZV9iYXNlZCwgZGJ1c190ZXN0X2J1aWxkZGlyKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCIkWERHX0RBVEFfSE9NRSBzaG91bGQgc3RhcnQgd2l0aCAkREJVU19URVNUX0JVSUxERElSIik7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfc3RhcnRzX3dpdGhfY19zdHIgKCZydW50aW1lX2Rpcl9iYXNlZCwgZGJ1c190ZXN0X2J1aWxkZGlyKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCIkWERHX1JVTlRJTUVfRElSIHNob3VsZCBzdGFydCB3aXRoICREQlVTX1RFU1RfQlVJTERESVIiKTsKLQotICB0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1swXSA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoCi0gICAgICAmcnVudGltZV9kaXJfYmFzZWQpOwotICB0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1sxXSA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoCi0gICAgICAmZGF0YV9ob21lX2Jhc2VkKTsKLSAgdGVzdF9zZXNzaW9uX3NlcnZpY2VfZGlyX21hdGNoZXNbMl0gPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKAotICAgICAgJmRhdGFfZGlyc19iYXNlZCk7Ci0gIHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzWzNdID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgKLSAgICAgICZkYXRhX2RpcnNfYmFzZWQyKTsKICNlbmRpZgorICBkaXJzID0gTlVMTDsKIAotICBwYXJzZXIgPSBidXNfY29uZmlnX2xvYWQgKCZmdWxsX3BhdGgsIFRSVUUsIE5VTEwsICZlcnJvcik7CisgIHByaW50ZiAoIlRlc3RpbmcgcmV0cmlldmluZyB0aGUgZGVmYXVsdCBzZXNzaW9uIHNlcnZpY2UgZGlyZWN0b3JpZXNcbiIpOworICBpZiAoIV9kYnVzX2dldF9zdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzICgmZGlycykpCisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGRuJ3QgZ2V0IHN0YXJkYXJkIGRpcnMiKTsKIAotICBpZiAocGFyc2VyID09IE5VTEwpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkIChlcnJvci5tZXNzYWdlKTsKLQotICBkaXJzID0gYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3NlcnZpY2VfZGlycyAocGFyc2VyKTsKLQotICBmb3IgKGxpbmsgPSBfZGJ1c19saXN0X2dldF9maXJzdF9saW5rIChkaXJzKSwgaSA9IDA7Ci0gICAgICAgbGluayAhPSBOVUxMOwotICAgICAgIGxpbmsgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKGRpcnMsIGxpbmspLCBpKyspCisgIC8qIG1ha2Ugc3VyZSBvdXIgZGVmYXVsdHMgZW5kIHdpdGggc2hhcmUvZGJ1cy0xL3NlcnZpY2UgKi8KKyAgd2hpbGUgKChsaW5rID0gX2RidXNfbGlzdF9wb3BfZmlyc3RfbGluayAoJmRpcnMpKSkKICAgICB7Ci0gICAgICBCdXNDb25maWdTZXJ2aWNlRGlyICpkaXIgPSBsaW5rLT5kYXRhOwotICAgICAgQnVzU2VydmljZURpckZsYWdzIGV4cGVjdGVkID0gQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PTkU7Ci0KLSAgICAgIHByaW50ZiAoIiAgICB0ZXN0IHNlcnZpY2UgZGlyOiAnJXMnXG4iLCBkaXItPnBhdGgpOwotICAgICAgcHJpbnRmICgiICAgIGN1cnJlbnQgc3RhbmRhcmQgc2VydmljZSBkaXI6ICclcydcbiIsIHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldKTsKLSAgICAgIGlmICh0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1tpXSA9PSBOVUxMKQorICAgICAgREJ1c1N0cmluZyBwYXRoOworICAgICAgCisgICAgICBwcmludGYgKCIgICAgZGVmYXVsdCBzZXJ2aWNlIGRpcjogJXNcbiIsIChjaGFyICopbGluay0+ZGF0YSk7CisgICAgICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJnBhdGgsIChjaGFyICopbGluay0+ZGF0YSk7CisgICAgICBpZiAoIV9kYnVzX3N0cmluZ19lbmRzX3dpdGhfY19zdHIgKCZwYXRoLCAiZGJ1cy0xL3NlcnZpY2VzIikpCiAgICAgICAgIHsKLSAgICAgICAgICBwcmludGYgKCJtb3JlIGRpcmVjdG9yaWVzIHBhcnNlZCB0aGFuIGluIG1hdGNoIHNldFxuIik7CisgICAgICAgICAgcHJpbnRmICgiZXJyb3Igd2l0aCBkZWZhdWx0IHNlc3Npb24gc2VydmljZSBkaXJlY3Rvcmllc1xuIik7CisJICAgICAgZGJ1c19mcmVlIChsaW5rLT5kYXRhKTsKKyAgICAJICBfZGJ1c19saXN0X2ZyZWVfbGluayAobGluayk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KICAKLSAgICAgIGlmIChzdHJjbXAgKHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldLCBkaXItPnBhdGgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICBwcmludGYgKCInJXMnIGRpcmVjdG9yeSBkb2VzIG5vdCBtYXRjaCAnJXMnIGluIHRoZSBtYXRjaCBzZXRcbiIsCi0gICAgICAgICAgICAgICAgICBkaXItPnBhdGgsIHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldKTsKLSAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQorICAgICAgZGJ1c19mcmVlIChsaW5rLT5kYXRhKTsKKyAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKKyAgICB9CiAKLSNpZm5kZWYgREJVU19XSU4KLSAgICAgIC8qIE9uIFVuaXggd2UgZXhwZWN0IHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIHNlYXJjaCBwYXRoIHRvIGJlCi0gICAgICAgKiBpbiB0aGUgWERHX1JVTlRJTUVfRElSLCBhbmQgd2UgZXhwZWN0IGl0IHRvIGhhdmUgc3BlY2lhbCBmbGFncyAqLwotICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgZXhwZWN0ZWQgPSAoQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PX1dBVENIIHwKLSAgICAgICAgICAgICAgICAgICAgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX1NUUklDVF9OQU1JTkcpOworI2lmZGVmIERCVVNfVU5JWAorICBpZiAoIWRidXNfc2V0ZW52ICgiWERHX0RBVEFfSE9NRSIsICIvdGVzdGhvbWUvZm9vLy50ZXN0bG9jYWwvdGVzdHNoYXJlIikpCisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGRuJ3Qgc2V0ZW52IFhER19EQVRBX0hPTUUiKTsKKworICBpZiAoIWRidXNfc2V0ZW52ICgiWERHX0RBVEFfRElSUyIsICI6L3Rlc3R1c3IvdGVzdGxvY2FsL3Rlc3RzaGFyZTogOi90ZXN0dXNyL3Rlc3RzaGFyZToiKSkKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZG4ndCBzZXRlbnYgWERHX0RBVEFfRElSUyIpOwogI2VuZGlmCisgIGlmICghX2RidXNfZ2V0X3N0YW5kYXJkX3Nlc3Npb25fc2VydmljZWRpcnMgKCZkaXJzKSkKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZG4ndCBnZXQgc3RhcmRhcmQgZGlycyIpOwogCi0gICAgICBpZiAoZGlyLT5mbGFncyAhPSBleHBlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgIHByaW50ZiAoIiclcycgZGlyZWN0b3J5IGhhcyBmbGFncyAweCV4LCBzaG91bGQgYmUgMHgleFxuIiwKLSAgICAgICAgICAgICAgICAgIGRpci0+cGF0aCwgZGlyLT5mbGFncywgZXhwZWN0ZWQpOwotICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0gICAgfQotICAKLSAgaWYgKHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldICE9IE5VTEwpCi0gICAgewotICAgICAgcHJpbnRmICgiZXh0cmEgZGF0YSAlcyBpbiB0aGUgbWF0Y2ggc2V0IHdhcyBub3QgbWF0Y2hlZFxuIiwKLSAgICAgICAgICAgICAgdGVzdF9zZXNzaW9uX3NlcnZpY2VfZGlyX21hdGNoZXNbaV0pOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gIGlmICghYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X3dhdGNoZWRfZGlycyAocGFyc2VyLCAmd2F0Y2hlZF9kaXJzKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJvdXQgb2YgbWVtb3J5Iik7Ci0KLSNpZmRlZiBEQlVTX1dJTgotICAvKiBXZSBleHBlY3QgYWxsIGRpcmVjdG9yaWVzIHRvIGJlIHdhdGNoZWQgKG5vdCB0aGF0IGl0IG1hdHRlcnMgb24gV2luZG93cywKLSAgICogYmVjYXVzZSB3ZSBkb24ndCBrbm93IGhvdykgKi8KKyAgLyogbWFrZSBzdXJlIHdlIHJlYWQgYW5kIHBhcnNlIHRoZSBlbnYgdmFyaWFibGUgY29ycmVjdGx5ICovCiAgIGkgPSAwOwotI2Vsc2UKLSAgLyogV2UgZXhwZWN0IGFsbCBkaXJlY3RvcmllcyBleGNlcHQgdGhlIGZpcnN0IHRvIGJlIHdhdGNoZWQsIGJlY2F1c2UKLSAgICogdGhlIGZpcnN0IG9uZSBpcyB0cmFuc2llbnQgKi8KLSAgaSA9IDE7Ci0jZW5kaWYKLQotICBmb3IgKGxpbmsgPSBfZGJ1c19saXN0X2dldF9maXJzdF9saW5rICgmd2F0Y2hlZF9kaXJzKTsKLSAgICAgICBsaW5rICE9IE5VTEw7Ci0gICAgICAgbGluayA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayAoJndhdGNoZWRfZGlycywgbGluayksIGkrKykKKyAgd2hpbGUgKChsaW5rID0gX2RidXNfbGlzdF9wb3BfZmlyc3RfbGluayAoJmRpcnMpKSkKICAgICB7Ci0gICAgICBwcmludGYgKCIgICAgd2F0Y2hlZCBzZXJ2aWNlIGRpcjogJyVzJ1xuIiwgKGNvbnN0IGNoYXIgKikgbGluay0+ZGF0YSk7Ci0gICAgICBwcmludGYgKCIgICAgY3VycmVudCBzdGFuZGFyZCBzZXJ2aWNlIGRpcjogJyVzJ1xuIiwKLSAgICAgICAgICAgICAgdGVzdF9zZXNzaW9uX3NlcnZpY2VfZGlyX21hdGNoZXNbaV0pOwotCisgICAgICBwcmludGYgKCIgICAgdGVzdCBzZXJ2aWNlIGRpcjogJXNcbiIsIChjaGFyICopbGluay0+ZGF0YSk7CiAgICAgICBpZiAodGVzdF9zZXNzaW9uX3NlcnZpY2VfZGlyX21hdGNoZXNbaV0gPT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIHByaW50ZiAoIm1vcmUgZGlyZWN0b3JpZXMgcGFyc2VkIHRoYW4gaW4gbWF0Y2ggc2V0XG4iKTsKKyAgICAgICAgICBkYnVzX2ZyZWUgKGxpbmstPmRhdGEpOworICAgICAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQotCi0gICAgICBpZiAoc3RyY21wICh0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1tpXSwKLSAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIGxpbmstPmRhdGEpICE9IDApCisgCisgICAgICBpZiAoc3RyY21wICh0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1tpXSwgCisgICAgICAgICAgICAgICAgICAoY2hhciAqKWxpbmstPmRhdGEpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBwcmludGYgKCInJXMnIGRpcmVjdG9yeSBkb2VzIG5vdCBtYXRjaCAnJXMnIGluIHRoZSBtYXRjaCBzZXRcbiIsCi0gICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBsaW5rLT5kYXRhLAorICAgICAgICAgIHByaW50ZiAoIiVzIGRpcmVjdG9yeSBkb2VzIG5vdCBtYXRjaCAlcyBpbiB0aGUgbWF0Y2ggc2V0XG4iLCAKKyAgICAgICAgICAgICAgICAgIChjaGFyICopbGluay0+ZGF0YSwKICAgICAgICAgICAgICAgICAgIHRlc3Rfc2Vzc2lvbl9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldKTsKKyAgICAgICAgICBkYnVzX2ZyZWUgKGxpbmstPmRhdGEpOworICAgICAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQotICAgIH0KIAorICAgICAgKytpOworCisgICAgICBkYnVzX2ZyZWUgKGxpbmstPmRhdGEpOworICAgICAgX2RidXNfbGlzdF9mcmVlX2xpbmsgKGxpbmspOworICAgIH0KKyAgCiAgIGlmICh0ZXN0X3Nlc3Npb25fc2VydmljZV9kaXJfbWF0Y2hlc1tpXSAhPSBOVUxMKQogICAgIHsKICAgICAgIHByaW50ZiAoImV4dHJhIGRhdGEgJXMgaW4gdGhlIG1hdGNoIHNldCB3YXMgbm90IG1hdGNoZWRcbiIsCkBAIC0zOTMxLDI3ICszNTE5LDI1IEBACiAgIHJldCA9IFRSVUU7CiAKIG91dDoKLSAgaWYgKHBhcnNlciAhPSBOVUxMKQotICAgIGJ1c19jb25maWdfcGFyc2VyX3VucmVmIChwYXJzZXIpOwotCi0gIF9kYnVzX2xpc3RfY2xlYXIgKCZ3YXRjaGVkX2RpcnMpOwotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZ1bGxfcGF0aCk7CiAgIF9kYnVzX3N0cmluZ19mcmVlICgmaW5zdGFsbF9yb290X2Jhc2VkKTsKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZwcm9ncyk7Ci0gIF9kYnVzX3N0cmluZ19mcmVlICgmcnVudGltZV9kaXJfYmFzZWQpOwotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmRhdGFfaG9tZV9iYXNlZCk7Ci0gIF9kYnVzX3N0cmluZ19mcmVlICgmZGF0YV9kaXJzX2Jhc2VkKTsKLSAgX2RidXNfc3RyaW5nX2ZyZWUgKCZkYXRhX2RpcnNfYmFzZWQyKTsKICAgcmV0dXJuIHJldDsKIH0KIAotI2lmbmRlZiBEQlVTX1dJTgogc3RhdGljIGNvbnN0IGNoYXIgKnRlc3Rfc3lzdGVtX3NlcnZpY2VfZGlyX21hdGNoZXNbXSA9IAogICAgICAgICB7CisjaWZkZWYgREJVU19VTklYCiAgICAgICAgICAiL3Vzci9sb2NhbC9zaGFyZS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIiwKICAgICAgICAgICIvdXNyL3NoYXJlL2RidXMtMS9zeXN0ZW0tc2VydmljZXMiLAorI2VuZGlmCiAgICAgICAgICBEQlVTX0RBVEFESVIiL2RidXMtMS9zeXN0ZW0tc2VydmljZXMiLAorI2lmZGVmIERCVVNfVU5JWAogICAgICAgICAgIi9saWIvZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyIsCisjZW5kaWYKKworI2lmZGVmIERCVVNfV0lOCisgICAgICAgICBOVUxMLAorI2VuZGlmCiAgICAgICAgICBOVUxMCiAgICAgICAgIH07CiAKQEAgLTM5NjAsMTAgKzM1NDYsNjkgQEAKIHsKICAgREJ1c0xpc3QgKmRpcnM7CiAgIERCdXNMaXN0ICpsaW5rOworICBEQnVzU3RyaW5nIHByb2dzOworI2lmbmRlZiBEQlVTX1VOSVgKKyAgY29uc3QgY2hhciAqY29tbW9uX3Byb2dzOworI2VuZGlmCiAgIGludCBpOwogCisgIC8qIE9uIFVuaXggd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoaXMgdmFyaWFibGUsIGJ1dCBpdCdzIGVhc2llciB0byBoYW5kbGUgdGhlCisgICAqIGRlYWxsb2NhdGlvbiBpZiB3ZSBhbHdheXMgYWxsb2NhdGUgaXQsIHdoZXRoZXIgbmVlZGVkIG9yIG5vdCAqLworICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmcHJvZ3MpKQorICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIk9PTSBhbGxvY2F0aW5nIHByb2dzIik7CisKKyNpZm5kZWYgREJVU19VTklYCisgIGNvbW1vbl9wcm9ncyA9IF9kYnVzX2dldGVudiAoIkNvbW1vblByb2dyYW1GaWxlcyIpOworCisgIGlmIChjb21tb25fcHJvZ3MpIAorICAgIHsKKyAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJnByb2dzLCBjb21tb25fcHJvZ3MpKSAKKyAgICAgICAgeworICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcHJvZ3MpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZwcm9ncywgIi9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIikpIAorICAgICAgICB7CisgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZwcm9ncyk7CisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICB0ZXN0X3N5c3RlbV9zZXJ2aWNlX2Rpcl9tYXRjaGVzWzFdID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhKCZwcm9ncyk7CisgICAgfQorI2VuZGlmCiAgIGRpcnMgPSBOVUxMOwogCisgIHByaW50ZiAoIlRlc3RpbmcgcmV0cmlldmluZyB0aGUgZGVmYXVsdCBzeXN0ZW0gc2VydmljZSBkaXJlY3Rvcmllc1xuIik7CisgIGlmICghX2RidXNfZ2V0X3N0YW5kYXJkX3N5c3RlbV9zZXJ2aWNlZGlycyAoJmRpcnMpKQorICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkbid0IGdldCBzdGFyZGFyZCBkaXJzIik7CisKKyAgLyogbWFrZSBzdXJlIG91ciBkZWZhdWx0cyBlbmQgd2l0aCBzaGFyZS9kYnVzLTEvc3lzdGVtLXNlcnZpY2UgKi8KKyAgd2hpbGUgKChsaW5rID0gX2RidXNfbGlzdF9wb3BfZmlyc3RfbGluayAoJmRpcnMpKSkKKyAgICB7CisgICAgICBEQnVzU3RyaW5nIHBhdGg7CisgICAgICAKKyAgICAgIHByaW50ZiAoIiAgICBkZWZhdWx0IHNlcnZpY2UgZGlyOiAlc1xuIiwgKGNoYXIgKilsaW5rLT5kYXRhKTsKKyAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmcGF0aCwgKGNoYXIgKilsaW5rLT5kYXRhKTsKKyAgICAgIGlmICghX2RidXNfc3RyaW5nX2VuZHNfd2l0aF9jX3N0ciAoJnBhdGgsICJkYnVzLTEvc3lzdGVtLXNlcnZpY2VzIikpCisgICAgICAgIHsKKyAgICAgICAgICBwcmludGYgKCJlcnJvciB3aXRoIGRlZmF1bHQgc3lzdGVtIHNlcnZpY2UgZGlyZWN0b3JpZXNcbiIpOworCSAgICAgIGRidXNfZnJlZSAobGluay0+ZGF0YSk7CisgICAgCSAgX2RidXNfbGlzdF9mcmVlX2xpbmsgKGxpbmspOworICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcHJvZ3MpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorIAorICAgICAgZGJ1c19mcmVlIChsaW5rLT5kYXRhKTsKKyAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKKyAgICB9CisKKyNpZmRlZiBEQlVTX1VOSVgKKyAgaWYgKCFkYnVzX3NldGVudiAoIlhER19EQVRBX0hPTUUiLCAiL3Rlc3Rob21lL2Zvby8udGVzdGxvY2FsL3Rlc3RzaGFyZSIpKQorICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkbid0IHNldGVudiBYREdfREFUQV9IT01FIik7CisKKyAgaWYgKCFkYnVzX3NldGVudiAoIlhER19EQVRBX0RJUlMiLCAiOi90ZXN0dXNyL3Rlc3Rsb2NhbC90ZXN0c2hhcmU6IDovdGVzdHVzci90ZXN0c2hhcmU6IikpCisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGRuJ3Qgc2V0ZW52IFhER19EQVRBX0RJUlMiKTsKKyNlbmRpZgogICBpZiAoIV9kYnVzX2dldF9zdGFuZGFyZF9zeXN0ZW1fc2VydmljZWRpcnMgKCZkaXJzKSkKICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZG4ndCBnZXQgc3RhcmRhcmQgZGlycyIpOwogCkBAIC0zOTc3LDYgKzM2MjIsNyBAQAogICAgICAgICAgIHByaW50ZiAoIm1vcmUgZGlyZWN0b3JpZXMgcGFyc2VkIHRoYW4gaW4gbWF0Y2ggc2V0XG4iKTsKICAgICAgICAgICBkYnVzX2ZyZWUgKGxpbmstPmRhdGEpOwogICAgICAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKKyAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnByb2dzKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAKQEAgLTM5ODgsNiArMzYzNCw3IEBACiAgICAgICAgICAgICAgICAgICB0ZXN0X3N5c3RlbV9zZXJ2aWNlX2Rpcl9tYXRjaGVzW2ldKTsKICAgICAgICAgICBkYnVzX2ZyZWUgKGxpbmstPmRhdGEpOwogICAgICAgICAgIF9kYnVzX2xpc3RfZnJlZV9saW5rIChsaW5rKTsKKyAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnByb2dzKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KIApAQCAtNDAwMiwxMiArMzY0OSwxMyBAQAogICAgICAgcHJpbnRmICgiZXh0cmEgZGF0YSAlcyBpbiB0aGUgbWF0Y2ggc2V0IHdhcyBub3QgbWF0Y2hlZFxuIiwKICAgICAgICAgICAgICAgdGVzdF9zeXN0ZW1fc2VydmljZV9kaXJfbWF0Y2hlc1tpXSk7CiAKKyAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcHJvZ3MpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICAKKyAgX2RidXNfc3RyaW5nX2ZyZWUgKCZwcm9ncyk7CiAgIHJldHVybiBUUlVFOwogfQotI2VuZGlmCiAJCSAgIAogZGJ1c19ib29sX3QKIGJ1c19jb25maWdfcGFyc2VyX3Rlc3QgKGNvbnN0IERCdXNTdHJpbmcgKnRlc3RfZGF0YV9kaXIpCkBAIC00MDE5LDcgKzM2NjcsNyBAQAogICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCi0gIGlmICghdGVzdF9kZWZhdWx0X3Nlc3Npb25fc2VydmljZWRpcnMgKHRlc3RfZGF0YV9kaXIpKQorICBpZiAoIXRlc3RfZGVmYXVsdF9zZXNzaW9uX3NlcnZpY2VkaXJzKCkpCiAgICAgcmV0dXJuIEZBTFNFOwogCiAjaWZkZWYgREJVU19XSU4KZGlmZiAtLWdpdCBhL2J1cy9jb25maWctcGFyc2VyLmggYi9idXMvY29uZmlnLXBhcnNlci5oCmluZGV4IGEyNGU3NGIuLmJhNWJmNzQgMTAwNjQ0Ci0tLSBhL2J1cy9jb25maWctcGFyc2VyLmgKKysrIGIvYnVzL2NvbmZpZy1wYXJzZXIuaApAQCAtNzMsOCArNzMsNiBAQAogQnVzUG9saWN5KiAgYnVzX2NvbmZpZ19wYXJzZXJfc3RlYWxfcG9saWN5ICAgICAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIpOwogdm9pZCAgICAgICAgYnVzX2NvbmZpZ19wYXJzZXJfZ2V0X2xpbWl0cyAgICAgICAoQnVzQ29uZmlnUGFyc2VyICpwYXJzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNMaW1pdHMgICAgICAgKmxpbWl0cyk7Ci1kYnVzX2Jvb2xfdCBidXNfY29uZmlnX3BhcnNlcl9nZXRfd2F0Y2hlZF9kaXJzIChCdXNDb25maWdQYXJzZXIgICpwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTGlzdCAgICAgICAgKip3YXRjaGVkX2RpcnMpOwogCiBEQnVzSGFzaFRhYmxlKiBidXNfY29uZmlnX3BhcnNlcl9zdGVhbF9zZXJ2aWNlX2NvbnRleHRfdGFibGUgKEJ1c0NvbmZpZ1BhcnNlciAqcGFyc2VyKTsKIApAQCAtODYsMjMgKzg0LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdXNDb25maWdQYXJzZXIgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgICAgKmVycm9yKTsKIAotLyoKLSAqIFRoZXNlIGFyZSBjaG9zZW4gc3VjaCB0aGF0IGlmIHdlIGNvbmZpZ3VyZSBhIGRpcmVjdG9yeSB0d2ljZSB3aXRoIGRpZmZlcmVudAotICogZmxhZ3MsIHdlIGhhdmUgdG8gZG8gYW4gImFuZCIgb3BlcmF0aW9uIG9uIHRoZSBmbGFncyAtIHRoZSBjb21wYXRpYmxlCi0gKiB0aGluZyB0byBkbyBpcyB0byBoYXZlIG5vIGZsYWdzLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PX1dBVENIID0gKDEgPDwgMCksCi0gIEJVU19TRVJWSUNFX0RJUl9GTEFHU19TVFJJQ1RfTkFNSU5HID0gKDEgPDwgMSksCi0gIC8qIEtlZXAgdGhpcyBvbmUgYXQgdGhlIGVuZCB0byByZWR1Y2UgZGlmZnMgd2hlbiBhZGRpbmcgbmV3IGVudHJpZXMgKi8KLSAgQlVTX1NFUlZJQ0VfRElSX0ZMQUdTX05PTkUgPSAwCi19IEJ1c1NlcnZpY2VEaXJGbGFnczsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgQnVzU2VydmljZURpckZsYWdzIGZsYWdzOwotICBjaGFyICpwYXRoOwotfSBCdXNDb25maWdTZXJ2aWNlRGlyOwotCiAjZW5kaWYgLyogQlVTX0NPTkZJR19QQVJTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYnVzL2Nvbm5lY3Rpb24uYyBiL2J1cy9jb25uZWN0aW9uLmMKaW5kZXggYjM1ODM0My4uOTVlMjBhNiAxMDA2NDQKLS0tIGEvYnVzL2Nvbm5lY3Rpb24uYworKysgYi9idXMvY29ubmVjdGlvbi5jCkBAIC00NDEsNiArNDQxLDkgQEAKICAgaWYgKGQtPnBvbGljeSkKICAgICBidXNfY2xpZW50X3BvbGljeV91bnJlZiAoZC0+cG9saWN5KTsKIAorICBpZiAoZC0+c2VsaW51eF9pZCkKKyAgICBidXNfc2VsaW51eF9pZF91bnJlZiAoZC0+c2VsaW51eF9pZCk7CisKICAgaWYgKGQtPmFwcGFybW9yX2NvbmZpbmVtZW50KQogICAgIGJ1c19hcHBhcm1vcl9jb25maW5lbWVudF91bnJlZiAoZC0+YXBwYXJtb3JfY29uZmluZW1lbnQpOwogICAKQEAgLTQ3NCw3ICs0NzcsNyBAQAogICBpZiAoY29ubmVjdGlvbnMtPmV4cGlyZV90aW1lb3V0ID09IE5VTEwpCiAgICAgZ290byBmYWlsZWRfMzsKIAotICBfZGJ1c190aW1lb3V0X2Rpc2FibGUgKGNvbm5lY3Rpb25zLT5leHBpcmVfdGltZW91dCk7CisgIF9kYnVzX3RpbWVvdXRfc2V0X2VuYWJsZWQgKGNvbm5lY3Rpb25zLT5leHBpcmVfdGltZW91dCwgRkFMU0UpOwogCiAgIGNvbm5lY3Rpb25zLT5wZW5kaW5nX3JlcGxpZXMgPSBidXNfZXhwaXJlX2xpc3RfbmV3IChidXNfY29udGV4dF9nZXRfbG9vcCAoY29udGV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY29udGV4dF9nZXRfcmVwbHlfdGltZW91dCAoY29udGV4dCksCkBAIC01MzcsNiArNTQwLDkgQEAKIAogICAgICAgX2RidXNfYXNzZXJ0IChjb25uZWN0aW9ucy0+bl9pbmNvbXBsZXRlID09IDApOwogCisgICAgICAvKiBkcm9wIGFsbCBtb25pdG9ycyAqLworICAgICAgX2RidXNfbGlzdF9jbGVhciAoJmNvbm5lY3Rpb25zLT5tb25pdG9ycyk7CisKICAgICAgIC8qIGRyb3AgYWxsIHJlYWwgY29ubmVjdGlvbnMgKi8KICAgICAgIHdoaWxlIChjb25uZWN0aW9ucy0+Y29tcGxldGVkICE9IE5VTEwpCiAgICAgICAgIHsKQEAgLTU1MiwxMCArNTU4LDYgQEAKIAogICAgICAgX2RidXNfYXNzZXJ0IChjb25uZWN0aW9ucy0+bl9jb21wbGV0ZWQgPT0gMCk7CiAKLSAgICAgIC8qIGRpc2Nvbm5lY3RpbmcgYWxsIHRoZSBjb25uZWN0aW9ucyBzaG91bGQgaGF2ZSBlbXB0aWVkIHRoZSBsaXN0IG9mCi0gICAgICAgKiBtb25pdG9ycyAoZWFjaCBsaW5rIGlzIHJlbW92ZWQgaW4gYnVzX2Nvbm5lY3Rpb25fZGlzY29ubmVjdGVkKSAqLwotICAgICAgX2RidXNfYXNzZXJ0IChjb25uZWN0aW9ucy0+bW9uaXRvcnMgPT0gTlVMTCk7Ci0KICAgICAgIGJ1c19leHBpcmVfbGlzdF9mcmVlIChjb25uZWN0aW9ucy0+cGVuZGluZ19yZXBsaWVzKTsKICAgICAgIAogICAgICAgX2RidXNfbG9vcF9yZW1vdmVfdGltZW91dCAoYnVzX2NvbnRleHRfZ2V0X2xvb3AgKGNvbm5lY3Rpb25zLT5jb250ZXh0KSwKQEAgLTU4Miw3ICs1ODQsNyBAQAogICBEQnVzU3RyaW5nIGxvZ2luZm9fYnVmOwogICB1bnNpZ25lZCBsb25nIHVpZDsKICAgdW5zaWduZWQgbG9uZyBwaWQ7Ci0gIGNoYXIgKndpbmRvd3Nfc2lkID0gTlVMTCwgKnNlY3VyaXR5X2xhYmVsID0gTlVMTDsKKyAgY2hhciAqd2luZG93c19zaWQ7CiAgIGRidXNfYm9vbF90IHByZXZfYWRkZWQ7CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmxvZ2luZm9fYnVmKSkKQEAgLTYxMSw0OCArNjEzLDE2IEBACiAgICAgICBfZGJ1c19jb21tYW5kX2Zvcl9waWQgKHBpZCwgJmxvZ2luZm9fYnVmLCBNQVhfTE9HX0NPTU1BTkRfTEVOLCBOVUxMKTsKICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9ieXRlICgmbG9naW5mb19idWYsICciJykpCiAgICAgICAgIGdvdG8gb29tOwotICAgICAgZWxzZQotICAgICAgICBwcmV2X2FkZGVkID0gVFJVRTsKICAgICB9CiAKICAgaWYgKGRidXNfY29ubmVjdGlvbl9nZXRfd2luZG93c191c2VyIChjb25uZWN0aW9uLCAmd2luZG93c19zaWQpKQogICAgIHsKICAgICAgIGRidXNfYm9vbF90IGRpZF9hcHBlbmQ7Ci0KLSAgICAgIGlmIChwcmV2X2FkZGVkKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKCZsb2dpbmZvX2J1ZiwgJyAnKSkKLSAgICAgICAgICAgIGdvdG8gb29tOwotICAgICAgICB9Ci0KICAgICAgIGRpZF9hcHBlbmQgPSBfZGJ1c19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoJmxvZ2luZm9fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lkPVwiJXNcIiIsIHdpbmRvd3Nfc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZD1cIiVzXCIgIiwgd2luZG93c19zaWQpOwogICAgICAgZGJ1c19mcmVlICh3aW5kb3dzX3NpZCk7Ci0gICAgICB3aW5kb3dzX3NpZCA9IE5VTEw7CiAgICAgICBpZiAoIWRpZF9hcHBlbmQpCiAgICAgICAgIGdvdG8gb29tOwotICAgICAgZWxzZQotICAgICAgICBwcmV2X2FkZGVkID0gVFJVRTsKLSAgICB9Ci0KLSAgaWYgKF9kYnVzX2Nvbm5lY3Rpb25fZ2V0X2xpbnV4X3NlY3VyaXR5X2xhYmVsIChjb25uZWN0aW9uLCAmc2VjdXJpdHlfbGFiZWwpKQotICAgIHsKLSAgICAgIGRidXNfYm9vbF90IGRpZF9hcHBlbmQ7Ci0KLSAgICAgIGlmIChwcmV2X2FkZGVkKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKCZsb2dpbmZvX2J1ZiwgJyAnKSkKLSAgICAgICAgICAgIGdvdG8gb29tOwotICAgICAgICB9Ci0KLSAgICAgIGRpZF9hcHBlbmQgPSBfZGJ1c19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoJmxvZ2luZm9fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWw9XCIlc1wiIiwgc2VjdXJpdHlfbGFiZWwpOwotICAgICAgZGJ1c19mcmVlIChzZWN1cml0eV9sYWJlbCk7Ci0gICAgICBzZWN1cml0eV9sYWJlbCA9IE5VTEw7Ci0gICAgICBpZiAoIWRpZF9hcHBlbmQpCi0gICAgICAgIGdvdG8gb29tOwotICAgICAgZWxzZQotICAgICAgICBwcmV2X2FkZGVkID0gVFJVRTsKICAgICB9CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfc3RlYWxfZGF0YSAoJmxvZ2luZm9fYnVmLCAmKGQtPmNhY2hlZF9sb2dpbmZvX3N0cmluZykpKQpAQCAtNjYzLDExICs2MzMsNiBAQAogICByZXR1cm4gVFJVRTsKIG9vbToKICAgIF9kYnVzX3N0cmluZ19mcmVlICgmbG9naW5mb19idWYpOwotICAgaWYgKHNlY3VyaXR5X2xhYmVsICE9IE5VTEwpCi0gICAgIGRidXNfZnJlZSAoc2VjdXJpdHlfbGFiZWwpOwotICAgaWYgKHdpbmRvd3Nfc2lkICE9IE5VTEwpCi0gICAgIGRidXNfZnJlZSAod2luZG93c19zaWQpOwotCiAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTY4OCwxMyArNjUzLDE0IEBACiAKICAgaWYgKG5fcGVuZGluZ191bml4X2Zkc19vbGQgPT0gMCAmJiBuX3BlbmRpbmdfdW5peF9mZHNfbmV3ID4gMCkKICAgICB7Ci0gICAgICBfZGJ1c190aW1lb3V0X3Jlc3RhcnQgKGQtPnBlbmRpbmdfdW5peF9mZHNfdGltZW91dCwKKyAgICAgIF9kYnVzX3RpbWVvdXRfc2V0X2ludGVydmFsIChkLT5wZW5kaW5nX3VuaXhfZmRzX3RpbWVvdXQsCiAgICAgICAgICAgICAgIGJ1c19jb250ZXh0X2dldF9wZW5kaW5nX2ZkX3RpbWVvdXQgKGQtPmNvbm5lY3Rpb25zLT5jb250ZXh0KSk7CisgICAgICBfZGJ1c190aW1lb3V0X3NldF9lbmFibGVkIChkLT5wZW5kaW5nX3VuaXhfZmRzX3RpbWVvdXQsIFRSVUUpOwogICAgIH0KIAogICBpZiAobl9wZW5kaW5nX3VuaXhfZmRzX29sZCA+IDAgJiYgbl9wZW5kaW5nX3VuaXhfZmRzX25ldyA9PSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3RpbWVvdXRfZGlzYWJsZSAoZC0+cGVuZGluZ191bml4X2Zkc190aW1lb3V0KTsKKyAgICAgIF9kYnVzX3RpbWVvdXRfc2V0X2VuYWJsZWQgKGQtPnBlbmRpbmdfdW5peF9mZHNfdGltZW91dCwgRkFMU0UpOwogICAgIH0KIAogCkBAIC03MDUsMTggKzY3MSw2IEBACiBwZW5kaW5nX3VuaXhfZmRzX3RpbWVvdXRfY2IgKHZvaWQgKmRhdGEpCiB7CiAgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uID0gZGF0YTsKLSAgQnVzQ29ubmVjdGlvbkRhdGEgKmQgPSBCVVNfQ09OTkVDVElPTl9EQVRBIChjb25uZWN0aW9uKTsKLSAgaW50IGxpbWl0OwotCi0gIF9kYnVzX2Fzc2VydCAoZCAhPSBOVUxMKTsKLSAgbGltaXQgPSBidXNfY29udGV4dF9nZXRfcGVuZGluZ19mZF90aW1lb3V0IChkLT5jb25uZWN0aW9ucy0+Y29udGV4dCk7Ci0gIGJ1c19jb250ZXh0X2xvZyAoZC0+Y29ubmVjdGlvbnMtPmNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAotICAgICAgIkNvbm5lY3Rpb24gXCIlc1wiICglcykgaGFzIGhhZCBVbml4IGZkcyBwZW5kaW5nIGZvciB0b28gbG9uZywgIgotICAgICAgImNsb3NpbmcgaXQgKHBlbmRpbmdfZmRfdGltZW91dD0lZCBtcykiLAotICAgICAgZC0+bmFtZSAhPSBOVUxMID8gZC0+bmFtZSA6ICIobnVsbCkiLAotICAgICAgYnVzX2Nvbm5lY3Rpb25fZ2V0X2xvZ2luZm8gKGNvbm5lY3Rpb24pLAotICAgICAgbGltaXQpOwotCiAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoY29ubmVjdGlvbik7CiAgIHJldHVybiBUUlVFOwogfQpAQCAtNzI2LDEzICs2ODAsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbikKIHsKIAotICBCdXNDb25uZWN0aW9uRGF0YSAqZCA9IE5VTEw7CisgIEJ1c0Nvbm5lY3Rpb25EYXRhICpkOworICBkYnVzX2Jvb2xfdCByZXR2YWw7CiAgIERCdXNFcnJvciBlcnJvcjsKIAorICAKICAgZCA9IGRidXNfbmV3MCAoQnVzQ29ubmVjdGlvbkRhdGEsIDEpOwogICAKICAgaWYgKGQgPT0gTlVMTCkKLSAgICBnb3RvIG9vbTsKKyAgICByZXR1cm4gRkFMU0U7CiAKICAgZC0+Y29ubmVjdGlvbnMgPSBjb25uZWN0aW9uczsKICAgZC0+Y29ubmVjdGlvbiA9IGNvbm5lY3Rpb247CkBAIC03NDYsMzUgKzcwMiwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9kYXRhX3Nsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLCBmcmVlX2Nvbm5lY3Rpb25fZGF0YSkpCiAgICAgewotICAgICAgLyogV2UgaGF2ZSB0byBmcmVlIGQgZXhwbGljaXRseSwgYmVjYXVzZSB0aGlzIGlzIHRoZSBvbmx5IGNvZGUKLSAgICAgICAqIHBhdGggd2hlcmUgaXQncyBub24tTlVMTCBidXQgZGJ1c19jb25uZWN0aW9uX3NldF9kYXRhKCkgaGFzbid0Ci0gICAgICAgKiB0YWtlbiByZXNwb25zaWJpbGl0eSBmb3IgZnJlZWluZyBpdC4gKi8KICAgICAgIGRidXNfZnJlZSAoZCk7Ci0gICAgICBkID0gTlVMTDsKLSAgICAgIGdvdG8gb29tOworICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICBkYnVzX2Nvbm5lY3Rpb25fc2V0X3JvdXRlX3BlZXJfbWVzc2FnZXMgKGNvbm5lY3Rpb24sIFRSVUUpOworICAKKyAgcmV0dmFsID0gRkFMU0U7CiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogICBkLT5zZWxpbnV4X2lkID0gYnVzX3NlbGludXhfaW5pdF9jb25uZWN0aW9uX2lkIChjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpOwogICBpZiAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCiAgICAgewotICAgICAgYnVzX2NvbnRleHRfbG9nIChjb25uZWN0aW9ucy0+Y29udGV4dCwgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gc2V0IHVwIG5ldyBjb25uZWN0aW9uOiAlcyIsIGVycm9yLm1lc3NhZ2UpOworICAgICAgLyogVGhpcyBpcyBhIGJpdCBib2d1cyBiZWNhdXNlIHdlIHByZXRlbmQgYWxsIGVycm9ycworICAgICAgICogYXJlIE9PTTsgdGhpcyBpcyBkb25lIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGluIGJ1cy5jCisgICAgICAgKiBhbiBPT00gZXJyb3IgZGlzY29ubmVjdHMgdGhlIGNvbm5lY3Rpb24sIHdoaWNoIGlzCisgICAgICAgKiB0aGUgc2FtZSB0aGluZyB3ZSB3YW50IG9uIGFueSBvdGhlciBlcnJvci4KKyAgICAgICAqLwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotICAgICAgZ290byBlcnJvcjsKKyAgICAgIGdvdG8gb3V0OwogICAgIH0KIAogICBkLT5hcHBhcm1vcl9jb25maW5lbWVudCA9IGJ1c19hcHBhcm1vcl9pbml0X2Nvbm5lY3Rpb25fY29uZmluZW1lbnQgKGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKTsKICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQogICAgIHsKLSAgICAgIGJ1c19jb250ZXh0X2xvZyAoY29ubmVjdGlvbnMtPmNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIHNldCB1cCBuZXcgY29ubmVjdGlvbjogJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIC8qIFRoaXMgaXMgYSBiaXQgYm9ndXMgYmVjYXVzZSB3ZSBwcmV0ZW5kIGFsbCBlcnJvcnMKKyAgICAgICAqIGFyZSBPT007IHRoaXMgaXMgZG9uZSBiZWNhdXNlIHdlIGtub3cgdGhhdCBpbiBidXMuYworICAgICAgICogYW4gT09NIGVycm9yIGRpc2Nvbm5lY3RzIHRoZSBjb25uZWN0aW9uLCB3aGljaCBpcworICAgICAgICogdGhlIHNhbWUgdGhpbmcgd2Ugd2FudCBvbiBhbnkgb3RoZXIgZXJyb3IuCisgICAgICAgKi8KICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLSAgICAgIGdvdG8gZXJyb3I7CisgICAgICBnb3RvIG91dDsKICAgICB9CiAKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2V0X3dhdGNoX2Z1bmN0aW9ucyAoY29ubmVjdGlvbiwKQEAgLTc4MywxNCArNzQzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZV9jb25uZWN0aW9uX3dhdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKLSAgICBnb3RvIG9vbTsKKyAgICBnb3RvIG91dDsKICAgCiAgIGlmICghZGJ1c19jb25uZWN0aW9uX3NldF90aW1lb3V0X2Z1bmN0aW9ucyAoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfY29ubmVjdGlvbl90aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25uZWN0aW9uX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLCBOVUxMKSkKLSAgICBnb3RvIG9vbTsKKyAgICBnb3RvIG91dDsKIAogICAvKiBGb3Igbm93IHdlIGRvbid0IG5lZWQgdG8gc2V0IGEgV2luZG93cyB1c2VyIGZ1bmN0aW9uIGJlY2F1c2UKICAgICogdGhlcmUgYXJlIG5vIHBvbGljaWVzIGluIHRoZSBjb25maWcgZmlsZSBjb250cm9sbGluZyB3aGF0CkBAIC04MDgsMTggKzc2OCwxOCBAQAogCiAgIGQtPmxpbmtfaW5fY29ubmVjdGlvbl9saXN0ID0gX2RidXNfbGlzdF9hbGxvY19saW5rIChjb25uZWN0aW9uKTsKICAgaWYgKGQtPmxpbmtfaW5fY29ubmVjdGlvbl9saXN0ID09IE5VTEwpCi0gICAgZ290byBvb207CisgICAgZ290byBvdXQ7CiAgIAogICAvKiBTZXR1cCB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBkaXNwYXRjaGVyICovCiAgIGlmICghYnVzX2Rpc3BhdGNoX2FkZF9jb25uZWN0aW9uIChjb25uZWN0aW9uKSkKLSAgICBnb3RvIG9vbTsKKyAgICBnb3RvIG91dDsKIAogICBpZiAoZGJ1c19jb25uZWN0aW9uX2dldF9kaXNwYXRjaF9zdGF0dXMgKGNvbm5lY3Rpb24pICE9IERCVVNfRElTUEFUQ0hfQ09NUExFVEUpCiAgICAgewogICAgICAgaWYgKCFfZGJ1c19sb29wX3F1ZXVlX2Rpc3BhdGNoIChidXNfY29udGV4dF9nZXRfbG9vcCAoY29ubmVjdGlvbnMtPmNvbnRleHQpLCBjb25uZWN0aW9uKSkKICAgICAgICAgewogICAgICAgICAgIGJ1c19kaXNwYXRjaF9yZW1vdmVfY29ubmVjdGlvbiAoY29ubmVjdGlvbik7Ci0gICAgICAgICAgZ290byBvb207CisgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgyOCwxMiArNzg4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX3VuaXhfZmRzX3RpbWVvdXRfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLCBOVUxMKTsKICAgaWYgKGQtPnBlbmRpbmdfdW5peF9mZHNfdGltZW91dCA9PSBOVUxMKQotICAgIGdvdG8gb29tOworICAgIGdvdG8gb3V0OwogCi0gIF9kYnVzX3RpbWVvdXRfZGlzYWJsZSAoZC0+cGVuZGluZ191bml4X2Zkc190aW1lb3V0KTsKKyAgX2RidXNfdGltZW91dF9zZXRfZW5hYmxlZCAoZC0+cGVuZGluZ191bml4X2Zkc190aW1lb3V0LCBGQUxTRSk7CiAgIGlmICghX2RidXNfbG9vcF9hZGRfdGltZW91dCAoYnVzX2NvbnRleHRfZ2V0X2xvb3AgKGNvbm5lY3Rpb25zLT5jb250ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5wZW5kaW5nX3VuaXhfZmRzX3RpbWVvdXQpKQotICAgIGdvdG8gb29tOworICAgIGdvdG8gb3V0OwogCiAgIF9kYnVzX2Nvbm5lY3Rpb25fc2V0X3BlbmRpbmdfZmRzX2Z1bmN0aW9uIChjb25uZWN0aW9uLAogICAgICAgICAgIChEQnVzUGVuZGluZ0Zkc0NoYW5nZUZ1bmN0aW9uKSBjaGVja19wZW5kaW5nX2Zkc19jYiwKQEAgLTg1NiwxNSArODE2LDEzIEBACiAgICAqIHN0b3AgYWNjZXB0KClpbmcgYW55IG1vcmUsIHRvIGF2ZXJ0IGEgRG9TLiBTZWUgZmQubyAjODA5MTkgKi8KICAgYnVzX2NvbnRleHRfY2hlY2tfYWxsX3dhdGNoZXMgKGQtPmNvbm5lY3Rpb25zLT5jb250ZXh0KTsKICAgCi0gIHJldHVybiBUUlVFOworICByZXR2YWwgPSBUUlVFOwogCi1vb206Ci0gIGJ1c19jb250ZXh0X2xvZyAoY29ubmVjdGlvbnMtPmNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICJObyBtZW1vcnkgdG8gc2V0IHVwIG5ldyBjb25uZWN0aW9uIik7Ci0gIC8qIGZhbGwgdGhyb3VnaCAqLwotZXJyb3I6Ci0gIGlmIChkICE9IE5VTEwpCisgb3V0OgorICBpZiAoIXJldHZhbCkKICAgICB7CisgICAgICBpZiAoZC0+c2VsaW51eF9pZCkKKyAgICAgICAgYnVzX3NlbGludXhfaWRfdW5yZWYgKGQtPnNlbGludXhfaWQpOwogICAgICAgZC0+c2VsaW51eF9pZCA9IE5VTEw7CiAKICAgICAgIGlmIChkLT5hcHBhcm1vcl9jb25maW5lbWVudCkKQEAgLTkxNSw3ICs4NzMsNyBAQAogICAgICAgLyogImQiIGhhcyBub3cgYmVlbiBmcmVlZCAqLwogICAgIH0KICAgCi0gIHJldHVybiBGQUxTRTsKKyAgcmV0dXJuIHJldHZhbDsKIH0KIAogdm9pZApAQCAtMTY3NSwyMyArMTYzMywxMyBAQAogZGJ1c19ib29sX3QKIGJ1c19jb25uZWN0aW9uc19jaGVja19saW1pdHMgKEJ1c0Nvbm5lY3Rpb25zICAqY29ubmVjdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAgKnJlcXVlc3RpbmdfY29tcGxldGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICoqbGltaXRfbmFtZV9vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgKmxpbWl0X291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAqZXJyb3IpCiB7CiAgIHVuc2lnbmVkIGxvbmcgdWlkOwotICBpbnQgbGltaXQ7CiAKLSAgbGltaXQgPSBidXNfY29udGV4dF9nZXRfbWF4X2NvbXBsZXRlZF9jb25uZWN0aW9ucyAoY29ubmVjdGlvbnMtPmNvbnRleHQpOwotCi0gIGlmIChjb25uZWN0aW9ucy0+bl9jb21wbGV0ZWQgPj0gbGltaXQpCisgIGlmIChjb25uZWN0aW9ucy0+bl9jb21wbGV0ZWQgPj0KKyAgICAgIGJ1c19jb250ZXh0X2dldF9tYXhfY29tcGxldGVkX2Nvbm5lY3Rpb25zIChjb25uZWN0aW9ucy0+Y29udGV4dCkpCiAgICAgewotICAgICAgaWYgKGxpbWl0X25hbWVfb3V0ICE9IE5VTEwpCi0gICAgICAgICpsaW1pdF9uYW1lX291dCA9ICJtYXhfY29tcGxldGVkX2Nvbm5lY3Rpb25zIjsKLQotICAgICAgaWYgKGxpbWl0X291dCAhPSBOVUxMKQotICAgICAgICAqbGltaXRfb3V0ID0gbGltaXQ7Ci0KICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQsCiAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbnMgaGFzIGJlZW4gcmVhY2hlZCIpOwogICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5OSwxNiArMTY0Nyw5IEBACiAgIAogICBpZiAoZGJ1c19jb25uZWN0aW9uX2dldF91bml4X3VzZXIgKHJlcXVlc3RpbmdfY29tcGxldGlvbiwgJnVpZCkpCiAgICAgewotICAgICAgbGltaXQgPSBidXNfY29udGV4dF9nZXRfbWF4X2Nvbm5lY3Rpb25zX3Blcl91c2VyIChjb25uZWN0aW9ucy0+Y29udGV4dCk7Ci0KLSAgICAgIGlmIChnZXRfY29ubmVjdGlvbnNfZm9yX3VpZCAoY29ubmVjdGlvbnMsIHVpZCkgPj0gbGltaXQpCisgICAgICBpZiAoZ2V0X2Nvbm5lY3Rpb25zX2Zvcl91aWQgKGNvbm5lY3Rpb25zLCB1aWQpID49CisgICAgICAgICAgYnVzX2NvbnRleHRfZ2V0X21heF9jb25uZWN0aW9uc19wZXJfdXNlciAoY29ubmVjdGlvbnMtPmNvbnRleHQpKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKGxpbWl0X25hbWVfb3V0ICE9IE5VTEwpCi0gICAgICAgICAgICAqbGltaXRfbmFtZV9vdXQgPSAibWF4X2Nvbm5lY3Rpb25zX3Blcl91c2VyIjsKLQotICAgICAgICAgIGlmIChsaW1pdF9vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgICpsaW1pdF9vdXQgPSBsaW1pdDsKLQogICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGNvbm5lY3Rpb25zIGZvciBVSUQgJWx1IGhhcyBiZWVuIHJlYWNoZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1aWQpOwpAQCAtMTkyOCw3ICsxODY5LDYgQEAKICAgREJ1c0xpc3QgKmxpbms7CiAgIENhbmNlbFBlbmRpbmdSZXBseURhdGEgKmNwcmQ7CiAgIGludCBjb3VudDsKLSAgaW50IGxpbWl0OwogCiAgIF9kYnVzX2Fzc2VydCAod2lsbF9nZXRfcmVwbHkgIT0gTlVMTCk7CiAgIF9kYnVzX2Fzc2VydCAod2lsbF9zZW5kX3JlcGx5ICE9IE5VTEwpOwpAQCAtMTk1OSwxOSArMTg5OSwxMCBAQAogICAgICAgaWYgKHBlbmRpbmctPndpbGxfZ2V0X3JlcGx5ID09IHdpbGxfZ2V0X3JlcGx5KQogICAgICAgICArK2NvdW50OwogICAgIH0KLQotICBsaW1pdCA9IGJ1c19jb250ZXh0X2dldF9tYXhfcmVwbGllc19wZXJfY29ubmVjdGlvbiAoY29ubmVjdGlvbnMtPmNvbnRleHQpOwotCi0gIGlmIChjb3VudCA+PSBsaW1pdCkKKyAgCisgIGlmIChjb3VudCA+PQorICAgICAgYnVzX2NvbnRleHRfZ2V0X21heF9yZXBsaWVzX3Blcl9jb25uZWN0aW9uIChjb25uZWN0aW9ucy0+Y29udGV4dCkpCiAgICAgewotICAgICAgYnVzX2NvbnRleHRfbG9nIChjb25uZWN0aW9ucy0+Y29udGV4dCwgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyByZXBsaWVzIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgKCVzKSBoYXMgYmVlbiByZWFjaGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgIihtYXhfcmVwbGllc19wZXJfY29ubmVjdGlvbj0lZCkiLAotICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbmFtZSAod2lsbF9nZXRfcmVwbHkpLAotICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbG9naW5mbyAod2lsbF9nZXRfcmVwbHkpLAotICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCk7Ci0KICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQsCiAJCSAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyByZXBsaWVzIHBlciBjb25uZWN0aW9uIGhhcyBiZWVuIHJlYWNoZWQiKTsKICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTIyNTEsNyArMjE4Miw2IEBACiBkYnVzX2Jvb2xfdAogYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKEJ1c1RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAqc2VuZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNDb25uZWN0aW9uICphZGRyZXNzZWRfcmVjaXBpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICptZXNzYWdlKQogewogICBCdXNDb25uZWN0aW9ucyAqY29ubmVjdGlvbnM7CkBAIC0yMjcxLDggKzIyMDEsOCBAQAogICAgKiBUaGVyZSdzIGxpdHRsZSBwb2ludCwgc2luY2UgdGhlcmUgaXMgdXAgdG8gMSBwZXIgcHJvY2Vzcy4gKi8KICAgX2RidXNfYXNzZXJ0IChtbSAhPSBOVUxMKTsKIAotICBpZiAoIWJ1c19tYXRjaG1ha2VyX2dldF9yZWNpcGllbnRzIChtbSwgY29ubmVjdGlvbnMsIHNlbmRlciwKLSAgICAgICAgYWRkcmVzc2VkX3JlY2lwaWVudCwgbWVzc2FnZSwgJnJlY2lwaWVudHMpKQorICBpZiAoIWJ1c19tYXRjaG1ha2VyX2dldF9yZWNpcGllbnRzIChtbSwgY29ubmVjdGlvbnMsIHNlbmRlciwgTlVMTCwgbWVzc2FnZSwKKyAgICAgICAgJnJlY2lwaWVudHMpKQogICAgIGdvdG8gb3V0OwogCiAgIGZvciAobGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKCZyZWNpcGllbnRzKTsKQEAgLTIyOTQsNyArMjIyNCw2IEBACiAKIGRidXNfYm9vbF90CiBidXNfdHJhbnNhY3Rpb25fY2FwdHVyZV9lcnJvcl9yZXBseSAoQnVzVHJhbnNhY3Rpb24gICp0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAgKmFkZHJlc3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c0Vycm9yICplcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAgKmluX3JlcGx5X3RvKQogewpAQCAtMjMyMSw3ICsyMjUwLDcgQEAKICAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X3NlbmRlciAocmVwbHksIERCVVNfU0VSVklDRV9EQlVTKSkKICAgICBnb3RvIG91dDsKIAotICByZXQgPSBidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIE5VTEwsIGFkZHJlc3NlZF9yZWNpcGllbnQsIHJlcGx5KTsKKyAgcmV0ID0gYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBOVUxMLCByZXBseSk7CiAKIG91dDoKICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CkBAIC0yMzYzLDcgKzIyOTIsNyBAQAogICAvKiBDYXB0dXJlIGl0IGZvciBtb25pdG9ycywgZXZlbiBpZiB0aGUgcmVhbCByZWNpcGllbnQncyByZWNlaXZlIHBvbGljeQogICAgKiBkb2VzIG5vdCBhbGxvdyBpdCB0byByZWNlaXZlIHRoaXMgbWVzc2FnZSBmcm9tIHVzICh3aGljaCB3b3VsZCBiZSBvZGQpLgogICAgKi8KLSAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIE5VTEwsIGNvbm5lY3Rpb24sIG1lc3NhZ2UpKQorICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlICh0cmFuc2FjdGlvbiwgTlVMTCwgbWVzc2FnZSkpCiAgICAgcmV0dXJuIEZBTFNFOwogCiAgIC8qIElmIHNlY3VyaXR5IHBvbGljeSBkb2Vzbid0IGFsbG93IHRoZSBtZXNzYWdlLCB3ZSB3b3VsZCBzaWxlbnRseQpAQCAtMjM3MywxMSArMjMwMiw5IEBACiAgICAqLwogICBpZiAoIWJ1c19jb250ZXh0X2NoZWNrX3NlY3VyaXR5X3BvbGljeSAoYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGNvbm5lY3Rpb24sIGNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBOVUxMLCAmZXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY29ubmVjdGlvbiwgY29ubmVjdGlvbiwgbWVzc2FnZSwgJmVycm9yKSkKICAgICB7Ci0gICAgICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlX2Vycm9yX3JlcGx5ICh0cmFuc2FjdGlvbiwgY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciwgbWVzc2FnZSkpCisgICAgICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlX2Vycm9yX3JlcGx5ICh0cmFuc2FjdGlvbiwgJmVycm9yLCBtZXNzYWdlKSkKICAgICAgICAgewogICAgICAgICAgIGJ1c19jb250ZXh0X2xvZyAodHJhbnNhY3Rpb24tPmNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2UgZnJvbSBkYnVzLWRhZW1vbiByZWplY3RlZCBidXQgbm90IGVub3VnaCAiCmRpZmYgLS1naXQgYS9idXMvY29ubmVjdGlvbi5oIGIvYnVzL2Nvbm5lY3Rpb24uaAppbmRleCA5ZTI1M2FlLi44YzY4ZDBhIDEwMDY0NAotLS0gYS9idXMvY29ubmVjdGlvbi5oCisrKyBiL2J1cy9jb25uZWN0aW9uLmgKQEAgLTU3LDggKzU3LDYgQEAKIEJ1c0FwcEFybW9yQ29uZmluZW1lbnQqIGJ1c19jb25uZWN0aW9uX2R1cF9hcHBhcm1vcl9jb25maW5lbWVudCAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24pOwogZGJ1c19ib29sX3QgICAgIGJ1c19jb25uZWN0aW9uc19jaGVja19saW1pdHMgICAgICAoQnVzQ29ubmVjdGlvbnMgICAgICAgICAgICAgICAqY29ubmVjdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAgICAgICAgICAgICAgICpyZXF1ZXN0aW5nX2NvbXBsZXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKipsaW1pdF9uYW1lX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKmxpbWl0X291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgICAgICAgICAgICAgKmVycm9yKTsKIHZvaWQgICAgICAgICAgICBidXNfY29ubmVjdGlvbnNfZXhwaXJlX2luY29tcGxldGUgKEJ1c0Nvbm5lY3Rpb25zICAgICAgICAgICAgICAgKmNvbm5lY3Rpb25zKTsKIApAQCAtMTM2LDEwICsxMzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAgICAgICAgICAgICAgICptZXNzYWdlKTsKIGRidXNfYm9vbF90ICAgICBidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAgICAgICAgICAoQnVzVHJhbnNhY3Rpb24gICAgICAgICAgICAgICAqdHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNDb25uZWN0aW9uICAgICAgICAgICAgICAgKmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNDb25uZWN0aW9uICAgICAgICAgICAgICAgKmFkZHJlc3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICAgICAgICAgICAgICAgKm1lc3NhZ2UpOwogZGJ1c19ib29sX3QgICAgIGJ1c190cmFuc2FjdGlvbl9jYXB0dXJlX2Vycm9yX3JlcGx5IChCdXNUcmFuc2FjdGlvbiAgICAgICAgICAgICp0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Nvbm5lY3Rpb24gICAgICAgICAgICAgICAqYWRkcmVzc2VkX3JlY2lwaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c0Vycm9yICAgICAgICAgICAgICAqZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICAgICAgICAgICAgICAgKmluX3JlcGx5X3RvKTsKIGRidXNfYm9vbF90ICAgICBidXNfdHJhbnNhY3Rpb25fc2VuZF9mcm9tX2RyaXZlciAoQnVzVHJhbnNhY3Rpb24gICAgICAgICAgICAgICAqdHJhbnNhY3Rpb24sCmRpZmYgLS1naXQgYS9idXMvZGJ1cy5zZXJ2aWNlLmluIGIvYnVzL2RidXMuc2VydmljZS5pbgppbmRleCBjYTBiN2U5Li4zYmM0NzI2IDEwMDY0NAotLS0gYS9idXMvZGJ1cy5zZXJ2aWNlLmluCisrKyBiL2J1cy9kYnVzLnNlcnZpY2UuaW4KQEAgLTQsNiArNCw2IEBACiBSZXF1aXJlcz1kYnVzLnNvY2tldAogCiBbU2VydmljZV0KLUV4ZWNTdGFydD1ARVhQQU5ERURfQklORElSQC9kYnVzLWRhZW1vbiAtLXN5c3RlbSAtLWFkZHJlc3M9c3lzdGVtZDogLS1ub2ZvcmsgLS1ub3BpZGZpbGUgLS1zeXN0ZW1kLWFjdGl2YXRpb24gLS1zeXNsb2ctb25seQorRXhlY1N0YXJ0PUBFWFBBTkRFRF9CSU5ESVJAL2RidXMtZGFlbW9uIC0tc3lzdGVtIC0tYWRkcmVzcz1zeXN0ZW1kOiAtLW5vZm9yayAtLW5vcGlkZmlsZSAtLXN5c3RlbWQtYWN0aXZhdGlvbgogRXhlY1JlbG9hZD1ARVhQQU5ERURfQklORElSQC9kYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLXN5c3RlbSAtLXR5cGU9bWV0aG9kX2NhbGwgLS1kZXN0PW9yZy5mcmVlZGVza3RvcC5EQnVzIC8gb3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVsb2FkQ29uZmlnCiBPT01TY29yZUFkanVzdD0tOTAwCmRpZmYgLS1naXQgYS9idXMvZGVza3RvcC1maWxlLmMgYi9idXMvZGVza3RvcC1maWxlLmMKaW5kZXggZmQ0ZjBkMy4uYmZlYjcyZSAxMDA2NDQKLS0tIGEvYnVzL2Rlc2t0b3AtZmlsZS5jCisrKyBiL2J1cy9kZXNrdG9wLWZpbGUuYwpAQCAtODgsNyArODgsNyBAQAogfTsKIAogc3RhdGljIHZvaWQgcmVwb3J0X2Vycm9yIChCdXNEZXNrdG9wRmlsZVBhcnNlciAqcGFyc2VyLAotCQkJICBjb25zdCBjaGFyICAgICAgICAgICAqbWVzc2FnZSwKKwkJCSAgY2hhciAgICAgICAgICAgICAgICAgKm1lc3NhZ2UsCiAJCQkgIGNvbnN0IGNoYXIgICAgICAgICAgICplcnJvcl9uYW1lLAogCQkJICBEQnVzRXJyb3IgICAgICAgICAgICAqZXJyb3IpOwogCkBAIC0zNzgsMTYgKzM3OCwxMiBAQAogc3RhdGljIGRidXNfYm9vbF90CiBpc192YWxpZF9zZWN0aW9uX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gIC8qIDUuIEdyb3VwIG5hbWVzIG1heSBjb250YWluIGFsbCBBU0NJSSBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCAnWycgYW5kICddJy4KLSAgICoKLSAgICogV2UgZG9uJ3QgdXNlIGlzcHJpbnQoKSBoZXJlIGJlY2F1c2UgaXQncyBsb2NhbGUtZGVwZW5kZW50LiBBU0NJSQotICAgKiBjaGFyYWN0ZXJzIDw9IDB4MWYgYW5kIDB4N2YgYXJlIGNvbnRyb2wgY2hhcmFjdGVycywgYW5kIGJ5dGVzIHdpdGgKLSAgICogdmFsdWVzID49IDB4ODAgYXJlbid0IEFTQ0lJLiAweDIwIGlzIGEgc3BhY2UsIHdoaWNoIHdlIG11c3QgYWxsb3csCi0gICAqIG5vdCBsZWFzdCBiZWNhdXNlIERCVVNfU0VSVklDRV9TRUNUSU9OIGNvbnRhaW5zIG9uZS4gKi8KKyAgLyogNS4gR3JvdXAgbmFtZXMgbWF5IGNvbnRhaW4gYWxsIEFTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0IGZvciBjb250cm9sIGNoYXJhY3RlcnMgYW5kICdbJyBhbmQgJ10nLiAqLwogCiAgIHdoaWxlICgqbmFtZSkKICAgICB7Ci0gICAgICBpZiAoKm5hbWUgPD0gMHgxZiB8fCAqbmFtZSA+PSAweDdmIHx8ICpuYW1lICA9PSAnWycgfHwgKm5hbWUgPT0gJ10nKQorICAgICAgaWYgKCEoKCpuYW1lID49ICdBJyAmJiAqbmFtZSA8PSAnWicpIHx8ICgqbmFtZSA+PSAnYScgfHwgKm5hbWUgPD0gJ3onKSB8fAorCSAgICAqbmFtZSA9PSAnXG4nIHx8ICpuYW1lID09ICdcdCcpKQogCXJldHVybiBGQUxTRTsKICAgICAgIAogICAgICAgbmFtZSsrOwpAQCAtNTgzLDcgKzU3OSw3IEBACiAKIHN0YXRpYyB2b2lkCiByZXBvcnRfZXJyb3IgKEJ1c0Rlc2t0b3BGaWxlUGFyc2VyICpwYXJzZXIsCi0JICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKm1lc3NhZ2UsCisJICAgICAgY2hhciAgICAgICAgICAgICAgICAgKm1lc3NhZ2UsCiAJICAgICAgY29uc3QgY2hhciAgICAgICAgICAgKmVycm9yX25hbWUsCiAJICAgICAgREJ1c0Vycm9yICAgICAgICAgICAgKmVycm9yKQogewpkaWZmIC0tZ2l0IGEvYnVzL2Rlc2t0b3AtZmlsZS5oIGIvYnVzL2Rlc2t0b3AtZmlsZS5oCmluZGV4IDE0NDc3MzguLmU0MDU2MjUgMTAwNjQ0Ci0tLSBhL2J1cy9kZXNrdG9wLWZpbGUuaAorKysgYi9idXMvZGVza3RvcC1maWxlLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNkZWZpbmUgREJVU19TRVJWSUNFX0VYRUMgICAgICJFeGVjIgogI2RlZmluZSBEQlVTX1NFUlZJQ0VfVVNFUiAgICAgIlVzZXIiCiAjZGVmaW5lIERCVVNfU0VSVklDRV9TWVNURU1EX1NFUlZJQ0UgIlN5c3RlbWRTZXJ2aWNlIgotI2RlZmluZSBEQlVTX1NFUlZJQ0VfQVNTVU1FRF9BUFBBUk1PUl9MQUJFTCAiQXNzdW1lZEFwcEFybW9yTGFiZWwiCiAKIHR5cGVkZWYgc3RydWN0IEJ1c0Rlc2t0b3BGaWxlIEJ1c0Rlc2t0b3BGaWxlOwogCmRpZmYgLS1naXQgYS9idXMvZGlyLXdhdGNoLWlub3RpZnkuYyBiL2J1cy9kaXItd2F0Y2gtaW5vdGlmeS5jCmluZGV4IDQ0N2RjMmQuLmNlMTlmZGMgMTAwNjQ0Ci0tLSBhL2J1cy9kaXItd2F0Y2gtaW5vdGlmeS5jCisrKyBiL2J1cy9kaXItd2F0Y2gtaW5vdGlmeS5jCkBAIC01OSw5ICs1OSw3IEBACiB7CiAgIGNoYXIgYnVmZmVyW0lOT1RJRllfQlVGX0xFTl07CiAgIHNzaXplX3QgcmV0ID0gMDsKLSNpZmRlZiBEQlVTX0VOQUJMRV9WRVJCT1NFX01PREUKICAgaW50IGkgPSAwOwotI2VuZGlmCiAKICAgcmV0ID0gcmVhZCAoaW5vdGlmeV9mZCwgYnVmZmVyLCBJTk9USUZZX0JVRl9MRU4pOwogICBpZiAocmV0IDwgMCkKQEAgLTE1Nyw3ICsxNTUsNyBAQAogICAgICAgICAgICAgICAvKiBOb3QgYWxsIHNlcnZpY2UgZGlyZWN0b3JpZXMgbmVlZCB0byBleGlzdC4gKi8KICAgICAgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgiQ2Fubm90IHNldHVwIGlub3RpZnkgZm9yICclcyc7IGVycm9yICclcyciLCBuZXdfZGlyc1tpXSwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgiQ2Fubm90IHNldHVwIGlub3RpZnkgZm9yICclcyc7IGVycm9yICclcydcbiIsIG5ld19kaXJzW2ldLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQpAQCAtMjM2LDcgKzIzNCw3IEBACiAjZW5kaWYKICAgICAgIGlmIChpbm90aWZ5X2ZkIDw9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiQ2Fubm90IGluaXRpYWxpemUgaW5vdGlmeSIpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3QgaW5pdGlhbGl6ZSBpbm90aWZ5XG4iKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQogCkBAIC0yNTIsNyArMjUwLDcgQEAKIAogICAgICAgaWYgKHdhdGNoID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiVW5hYmxlIHRvIGNyZWF0ZSBpbm90aWZ5IHdhdGNoIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBjcmVhdGUgaW5vdGlmeSB3YXRjaFxuIik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYnVzL2Rpci13YXRjaC1rcXVldWUuYyBiL2J1cy9kaXItd2F0Y2gta3F1ZXVlLmMKaW5kZXggOWIxNzg0ZS4uYzFlODMyNCAxMDA2NDQKLS0tIGEvYnVzL2Rpci13YXRjaC1rcXVldWUuYworKysgYi9idXMvZGlyLXdhdGNoLWtxdWV1ZS5jCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgIGtxID0ga3F1ZXVlICgpOwogICAgICAgaWYgKGtxIDwgMCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3QgY3JlYXRlIGtxdWV1ZTsgZXJyb3IgJyVzJyIsIF9kYnVzX3N0cmVycm9yIChlcnJubykpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3QgY3JlYXRlIGtxdWV1ZTsgZXJyb3IgJyVzJ1xuIiwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAKICAgICAgIGlmICh3YXRjaCA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBjcmVhdGUga3F1ZXVlIHdhdGNoIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBjcmVhdGUga3F1ZXVlIHdhdGNoXG4iKTsKICAgICAgICAgICBnb3RvIG91dDE7CiAgICAgICAgIH0KIApAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkNhbm5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnOyBlcnJvciAnJXMnIiwgbmV3X2RpcnNbaV0sIF9kYnVzX3N0cmVycm9yIChlcnJubykpOworICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkNhbm5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnOyBlcnJvciAnJXMnXG4iLCBuZXdfZGlyc1tpXSwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICAgICAgICAgICAgTk9URV9ERUxFVEUgfCBOT1RFX0VYVEVORCB8IE5PVEVfV1JJVEUgfCBOT1RFX1JFTkFNRSwgMCwgMCk7CiAgICAgICAgICAgaWYgKGtldmVudCAoa3EsICZldiwgMSwgTlVMTCwgMCwgTlVMTCkgPT0gLTEpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3Qgc2V0dXAgYSBrZXZlbnQgZm9yICclcyc7IGVycm9yICclcyciLCBuZXdfZGlyc1tpXSwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJDYW5ub3Qgc2V0dXAgYSBrZXZlbnQgZm9yICclcyc7IGVycm9yICclcydcbiIsIG5ld19kaXJzW2ldLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9idXMvZGlzcGF0Y2guYyBiL2J1cy9kaXNwYXRjaC5jCmluZGV4IDE5MjI4YmUuLmVkZmExYjQgMTAwNjQ0Ci0tLSBhL2J1cy9kaXNwYXRjaC5jCisrKyBiL2J1cy9kaXNwYXRjaC5jCkBAIC03MCwxMSArNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhY2tfZXJyb3IpKQogICAgIHsKLSAgICAgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmVfZXJyb3JfcmVwbHkgKHRyYW5zYWN0aW9uLCBzZW5kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhY2tfZXJyb3IsIG1lc3NhZ2UpKQorICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZV9lcnJvcl9yZXBseSAodHJhbnNhY3Rpb24sICZzdGFja19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UpKQogICAgICAgICB7CiAgICAgICAgICAgYnVzX2NvbnRleHRfbG9nIChjb250ZXh0LCBEQlVTX1NZU1RFTV9MT0dfV0FSTklORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicm9hZGNhc3QgcmVqZWN0ZWQsIGJ1dCBub3QgZW5vdWdoICIKQEAgLTk0LDggKzkzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbmFtZSAoY29ubmVjdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgYnVzX2Nvbm5lY3Rpb25fZ2V0X2xvZ2luZm8gKGNvbm5lY3Rpb24pKTsKIAotICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZV9lcnJvcl9yZXBseSAodHJhbnNhY3Rpb24sIHNlbmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFja19lcnJvciwgbWVzc2FnZSkpCisgICAgICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlX2Vycm9yX3JlcGx5ICh0cmFuc2FjdGlvbiwgJnN0YWNrX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSkpCiAgICAgICAgIHsKICAgICAgICAgICBidXNfY29udGV4dF9sb2cgKGNvbnRleHQsIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyb2FkY2FzdCB3aXRoIFVuaXggZmQgbm90IGRlbGl2ZXJlZCwgYnV0IG5vdCAiCkBAIC0xNDgsNyArMTQ3LDcgQEAKICAgICAgIGlmICghYnVzX2NvbnRleHRfY2hlY2tfc2VjdXJpdHlfcG9saWN5IChjb250ZXh0LCB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXIsIGFkZHJlc3NlZF9yZWNpcGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VkX3JlY2lwaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBOVUxMLCBlcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgZXJyb3IpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICAgIGlmIChkYnVzX21lc3NhZ2VfY29udGFpbnNfdW5peF9mZHMgKG1lc3NhZ2UpICYmCkBAIC0zNzEsMTggKzM3MCwxNyBAQAogICAgKi8KICAgc2VydmljZV9uYW1lID0gZGJ1c19tZXNzYWdlX2dldF9kZXN0aW5hdGlvbiAobWVzc2FnZSk7CiAKKyAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24sIG1lc3NhZ2UpKQorICAgIHsKKyAgICAgIEJVU19TRVRfT09NICgmZXJyb3IpOworICAgICAgZ290byBvdXQ7CisgICAgfQorCiAgIGlmIChzZXJ2aWNlX25hbWUgJiYKICAgICAgIHN0cmNtcCAoc2VydmljZV9uYW1lLCBEQlVTX1NFUlZJQ0VfREJVUykgPT0gMCkgLyogdG8gYnVzIGRyaXZlciAqLwogICAgIHsKLSAgICAgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uLCBOVUxMLCBtZXNzYWdlKSkKLSAgICAgICAgewotICAgICAgICAgIEJVU19TRVRfT09NICgmZXJyb3IpOwotICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KICAgICAgIGlmICghYnVzX2NvbnRleHRfY2hlY2tfc2VjdXJpdHlfcG9saWN5IChjb250ZXh0LCB0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLCBOVUxMLCBOVUxMLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZlcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiwgTlVMTCwgTlVMTCwgbWVzc2FnZSwgJmVycm9yKSkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJTZWN1cml0eSBwb2xpY3kgcmVqZWN0ZWQgbWVzc2FnZVxuIik7CiAgICAgICAgICAgZ290byBvdXQ7CkBAIC0zOTQsMTIgKzM5Miw2IEBACiAgICAgfQogICBlbHNlIGlmICghYnVzX2Nvbm5lY3Rpb25faXNfYWN0aXZlIChjb25uZWN0aW9uKSkgLyogY2xpZW50cyBtdXN0IHRhbGsgdG8gYnVzIGRyaXZlciBmaXJzdCAqLwogICAgIHsKLSAgICAgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uLCBOVUxMLCBtZXNzYWdlKSkKLSAgICAgICAgewotICAgICAgICAgIEJVU19TRVRfT09NICgmZXJyb3IpOwotICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJSZWNlaXZlZCBtZXNzYWdlIGZyb20gbm9uLXJlZ2lzdGVyZWQgY2xpZW50LiBEaXNjb25uZWN0aW5nLlxuIik7CiAgICAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgKGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CkBAIC00MjAsMjEgKzQxMiwxMiBAQAogICAgICAgaWYgKHNlcnZpY2UgPT0gTlVMTCAmJiBkYnVzX21lc3NhZ2VfZ2V0X2F1dG9fc3RhcnQgKG1lc3NhZ2UpKQogICAgICAgICB7CiAgICAgICAgICAgQnVzQWN0aXZhdGlvbiAqYWN0aXZhdGlvbjsKLQotICAgICAgICAgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCVVNfU0VUX09PTSAoJmVycm9yKTsKLSAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAvKiBXZSBjYW4ndCBkbyB0aGUgc2VjdXJpdHkgcG9saWN5IGNoZWNrIGhlcmUsIHNpbmNlIHRoZSBhZGRyZXNzZWQKKyAgICAgICAgICAgKiByZWNpcGllbnQgc2VydmljZSBkb2Vzbid0IGV4aXN0IHlldC4gV2UgZG8gaXQgYmVmb3JlIHNlbmRpbmcgdGhlCisgICAgICAgICAgICogbWVzc2FnZSBhZnRlciB0aGUgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLgorICAgICAgICAgICAqLwogICAgICAgICAgIGFjdGl2YXRpb24gPSBidXNfY29ubmVjdGlvbl9nZXRfYWN0aXZhdGlvbiAoY29ubmVjdGlvbik7CiAKLSAgICAgICAgICAvKiBUaGlzIHdpbGwgZG8gYXMgbXVjaCBvZiBhIHNlY3VyaXR5IHBvbGljeSBjaGVjayBhcyBpdCBjYW4uCi0gICAgICAgICAgICogV2UgY2FuJ3QgZG8gdGhlIGZ1bGwgc2VjdXJpdHkgcG9saWN5IGNoZWNrIGhlcmUsIHNpbmNlIHRoZQotICAgICAgICAgICAqIGFkZHJlc3NlZCByZWNpcGllbnQgc2VydmljZSBkb2Vzbid0IGV4aXN0IHlldC4gV2UgZG8gaXQgYmVmb3JlCi0gICAgICAgICAgICogc2VuZGluZyB0aGUgbWVzc2FnZSBhZnRlciB0aGUgc2VydmljZSBoYXMgYmVlbiBjcmVhdGVkLgotICAgICAgICAgICAqLwogICAgICAgICAgIGlmICghYnVzX2FjdGl2YXRpb25fYWN0aXZhdGVfc2VydmljZSAoYWN0aXZhdGlvbiwgY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sIFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBzZXJ2aWNlX25hbWUsICZlcnJvcikpCiAgICAgICAgICAgICB7CkBAIC00NDcsMTMgKzQzMCw2IEBACiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHNlcnZpY2UgPT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIG1lc3NhZ2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBCVVNfU0VUX09PTSAoJmVycm9yKTsKLSAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoJmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0VSUk9SX05BTUVfSEFTX05PX09XTkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLApAQCAtNDY0LDIxICs0NDAsNiBAQAogICAgICAgICB7CiAgICAgICAgICAgYWRkcmVzc2VkX3JlY2lwaWVudCA9IGJ1c19zZXJ2aWNlX2dldF9wcmltYXJ5X293bmVyc19jb25uZWN0aW9uIChzZXJ2aWNlKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnQgKGFkZHJlc3NlZF9yZWNpcGllbnQgIT0gTlVMTCk7Ci0KLSAgICAgICAgICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlICh0cmFuc2FjdGlvbiwgY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZWRfcmVjaXBpZW50LCBtZXNzYWdlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgQlVTX1NFVF9PT00gKCZlcnJvcik7Ci0gICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICBlbHNlIC8qIHNlcnZpY2VfbmFtZSA9PSBOVUxMICovCi0gICAgewotICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24sIE5VTEwsIG1lc3NhZ2UpKQotICAgICAgICB7Ci0gICAgICAgICAgQlVTX1NFVF9PT00gKCZlcnJvcik7Ci0gICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0Nyw3ICs2MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBsaW5lKQogewogICBpZiAobWVzc2FnZSkKLSAgICBfZGJ1c193YXJuICgiJXM6JWQgcmVjZWl2ZWQgbWVzc2FnZSBpbnRlcmZhY2UgXCIlc1wiIG1lbWJlciBcIiVzXCIgZXJyb3IgbmFtZSBcIiVzXCIgb24gJXAsIGV4cGVjdGluZyAlcyIsCisgICAgX2RidXNfd2FybiAoIiVzOiVkIHJlY2VpdmVkIG1lc3NhZ2UgaW50ZXJmYWNlIFwiJXNcIiBtZW1iZXIgXCIlc1wiIGVycm9yIG5hbWUgXCIlc1wiIG9uICVwLCBleHBlY3RpbmcgJXNcbiIsCiAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGxpbmUsCiAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZSAobWVzc2FnZSkgOiAiKHVuc2V0KSIsCkBAIC02NTgsNyArNjE5LDcgQEAKICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgIGV4cGVjdGVkKTsKICAgZWxzZQotICAgIF9kYnVzX3dhcm4gKCIlczolZCByZWNlaXZlZCBubyBtZXNzYWdlIG9uICVwLCBleHBlY3RpbmcgJXMiLAorICAgIF9kYnVzX3dhcm4gKCIlczolZCByZWNlaXZlZCBubyBtZXNzYWdlIG9uICVwLCBleHBlY3RpbmcgJXNcbiIsCiAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGxpbmUsIGNvbm5lY3Rpb24sIGV4cGVjdGVkKTsKIH0KIApAQCAtNzE4LDcgKzY3OSw3IEBACiAgICAgICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgbWVzc2FnZSBvbiAlcCwgZXhwZWN0aW5nICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgbWVzc2FnZSBvbiAlcCwgZXhwZWN0aW5nICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24sICJOYW1lT3duZXJDaGFuZ2VkIik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTc1NCw3ICs3MTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBhcmd1bWVudHNcbiIpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzYzLDEzICs3MjQsMTMgQEAKICAgICAgICAgICB8fCAoZC0+ZXhwZWN0ZWRfa2luZCA9PSBPV05FUl9DSEFOR0VEICAgJiYgKCFvbGRfb3duZXJbMF0gfHwgIW5ld19vd25lclswXSkpCiAgICAgICAgICAgfHwgKGQtPmV4cGVjdGVkX2tpbmQgPT0gU0VSVklDRV9ERUxFVEVEICYmICghb2xkX293bmVyWzBdIHx8ICBuZXdfb3duZXJbMF0pKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJpbmNvbnNpc3RlbnQgTmFtZU93bmVyQ2hhbmdlZCBhcmd1bWVudHMiKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiaW5jb25zaXN0ZW50IE5hbWVPd25lckNoYW5nZWQgYXJndW1lbnRzXG4iKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQogCiAgICAgICBpZiAoc3RyY21wIChzZXJ2aWNlX25hbWUsIGQtPmV4cGVjdGVkX3NlcnZpY2VfbmFtZSkgIT0gMCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCBpbmZvIG9uIHNlcnZpY2UgJXMsIGdvdCBpbmZvIG9uICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiZXhwZWN0ZWQgaW5mbyBvbiBzZXJ2aWNlICVzLCBnb3QgaW5mbyBvbiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBkLT5leHBlY3RlZF9zZXJ2aWNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZV9uYW1lKTsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTc3OCw3ICs3MzksNyBAQAogICAgICAgaWYgKCpzZXJ2aWNlX25hbWUgPT0gJzonICYmIG5ld19vd25lclswXQogICAgICAgICAgICYmIHN0cmNtcCAoc2VydmljZV9uYW1lLCBuZXdfb3duZXIpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiaW5jb25zaXN0ZW50IFNlcnZpY2VPd25lZENoYW5nZWQgbWVzc2FnZSAoXCIlc1wiIFsgJXMgLT4gJXMgXSkiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJpbmNvbnNpc3RlbnQgU2VydmljZU93bmVkQ2hhbmdlZCBtZXNzYWdlIChcIiVzXCIgWyAlcyAtPiAlcyBdKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUsIG9sZF9vd25lciwgbmV3X293bmVyKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQpAQCAtOTkwLDcgKzk1MSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiSGVsbG8iLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtOTk5LDcgKzk2MCw3IEBACiAKICAgaWYgKCFkYnVzX21lc3NhZ2VfaGFzX3NlbmRlciAobWVzc2FnZSwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXMiLAorICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAgICAgICBnb3RvIG91dDsKQEAgLTEwNDksNyArMTAxMCw3IEBACiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBfZGJ1c19hc3NlcnQgKGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKTsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50IHRvIGhlbGxvIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgc2luZ2xlIHN0cmluZyBhcmd1bWVudCB0byBoZWxsb1xuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDgxLDcgKzEwNDIsNyBAQAogICAgICAgICAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICAgICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RpbmcgJXMsIGdvdCBub3RoaW5nIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGluZyAlcywgZ290IG5vdGhpbmdcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVBY3F1aXJlZCIpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIH0KQEAgLTEwODksNyArMTA1MCw3IEBACiAgICAgICBpZiAoISBkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9EQlVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVBY3F1aXJlZCIpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGluZyAlcywgZ290IHNtdGhnIGVsc2UiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RpbmcgJXMsIGdvdCBzbXRoZyBlbHNlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICJOYW1lQWNxdWlyZWQiKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQpAQCAtMTEwOSw3ICsxMDcwLDcgQEAKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9kYnVzX2Fzc2VydCAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpOwotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQgdG8gU2VydmljZUFjcXVpcmVkIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgc2luZ2xlIHN0cmluZyBhcmd1bWVudCB0byBTZXJ2aWNlQWNxdWlyZWRcbiIpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTExOCw3ICsxMDc5LDcgQEAKIAogICAgICAgaWYgKHN0cmNtcCAoYWNxdWlyZWQsIG5hbWUpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiQWNxdWlyZWQgbmFtZSBpcyAlcyBidXQgZXhwZWN0ZWQgJXMiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJBY3F1aXJlZCBuYW1lIGlzICVzIGJ1dCBleHBlY3RlZCAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCwgbmFtZSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTEyMDEsNyArMTE2Miw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiSGVsbG8iLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMTIxMCw3ICsxMTcxLDcgQEAKIAogICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA6ICIobm9uZSkiKTsKICAgICAgIGdvdG8gb3V0OwpAQCAtMTMwMyw3ICsxMjY0LDcgQEAKICAgbWVzc2FnZSA9IHBvcF9tZXNzYWdlX3dhaXRpbmdfZm9yX21lbW9yeSAoY29ubmVjdGlvbik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgICJHZXRDb25uZWN0aW9uVW5peFVzZXIiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMTM1OSw3ICsxMzIwLDcgQEAKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9kYnVzX2Fzc2VydCAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpOwotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIERCVVNfVFlQRV9VSU5UMzIgZnJvbSBHZXRDb25uZWN0aW9uVW5peFVzZXIiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBEQlVTX1RZUEVfVUlOVDMyIGZyb20gR2V0Q29ubmVjdGlvblVuaXhVc2VyXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0NDgsNyArMTQwOSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiR2V0Q29ubmVjdGlvblVuaXhQcm9jZXNzSUQiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMTUyMiw3ICsxNDgzLDcgQEAKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9kYnVzX2Fzc2VydCAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpOwotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIERCVVNfVFlQRV9VSU5UMzIgZnJvbSBHZXRDb25uZWN0aW9uVW5peFByb2Nlc3NJRCIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgdGhlIGV4cGVjdGVkIERCVVNfVFlQRV9VSU5UMzIgZnJvbSBHZXRDb25uZWN0aW9uVW5peFByb2Nlc3NJRFxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTM4LDcgKzE0OTksNyBAQAogICAgICAgICAgIGlmIChwaWQgIT0gKGRidXNfdWludDMyX3QpIF9kYnVzX2dldHBpZCAoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX2RidXNfYXNzZXJ0IChkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSk7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJSZXN1bHQgZnJvbSBHZXRDb25uZWN0aW9uVW5peFByb2Nlc3NJRCBpcyBub3Qgb3VyIG93biBwaWQiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIlJlc3VsdCBmcm9tIEdldENvbm5lY3Rpb25Vbml4UHJvY2Vzc0lEIGlzIG5vdCBvdXIgb3duIHBpZFxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNjMzLDcgKzE1OTQsNyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwXG4iLAogICAgICAgICAgICAgICAgICAgIkFkZE1hdGNoIiwgc2VyaWFsLCBjb25uZWN0aW9uKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTE2NDIsNyArMTYwMyw3IEBACiAKICAgaWYgKCFkYnVzX21lc3NhZ2VfaGFzX3NlbmRlciAobWVzc2FnZSwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXMiLAorICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAgICAgICBnb3RvIG91dDsKQEAgLTE3NTgsNyArMTcxOSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiQWRkTWF0Y2giLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMTc2Nyw3ICsxNzI4LDcgQEAKIAogICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA6ICIobm9uZSkiKTsKICAgICAgIGdvdG8gb3V0OwpAQCAtMTkyNSw3ICsxODg2LDcgQEAKICAgbWVzc2FnZSA9IHBvcF9tZXNzYWdlX3dhaXRpbmdfZm9yX21lbW9yeSAoY29ubmVjdGlvbik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgICJTdGFydFNlcnZpY2VCeU5hbWUiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMTkzNiw3ICsxODk3LDcgQEAKICAgICB7CiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpIDogIihub25lKSIpOwogICAgICAgICAgIGdvdG8gb3V0OwpAQCAtMTk2MCw3ICsxOTIxLDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYWN0aXZhdGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgICBOT05FWElTVEVOVF9TRVJWSUNFX05BTUUpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMjAxOCw3ICsxOTc5LDcgQEAKIAogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiRWNobyBtZXNzYWdlIChhdXRvIGFjdGl2YXRpb24pIiwgc2VyaWFsLCBjb25uZWN0aW9uKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTIwMjksNyArMTk5MCw3IEBACiAgICAgewogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaGFzX3NlbmRlciAobWVzc2FnZSwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgPwogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA6ICIobm9uZSkiKTsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTIwNTMsNyArMjAxNCw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZXhwZWN0IHRvIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZSAlcyIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlICVzXG4iLAogICAgICAgICAgICAgICAgICAgTk9ORVhJU1RFTlRfU0VSVklDRV9OQU1FKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTIxMTMsNyArMjA3NCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSAlcyBkb2Vzbid0IGhhdmUgYSBzZXJ2aWNlIG5hbWU6ICVzIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgJXMgZG9lc24ndCBoYXZlIGEgc2VydmljZSBuYW1lOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTIxMjIsMjEgKzIwODMsMjEgQEAKIAogICAgICAgaWYgKCpiYXNlX3NlcnZpY2UgIT0gJzonKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGJhc2Ugc2VydmljZSBhY3RpdmF0aW9uLCBnb3QgXCIlc1wiIGluc3RlYWQiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCBiYXNlIHNlcnZpY2UgYWN0aXZhdGlvbiwgZ290IFwiJXNcIiBpbnN0ZWFkXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfc2VydmljZSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIAogICAgICAgaWYgKHN0cmNtcCAoYmFzZV9zZXJ2aWNlLCBiYXNlX3NlcnZpY2VfZnJvbV9idXMpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgYmFzZSBzZXJ2aWNlIGFjdGl2YXRpb24sIGdvdCBcIiVzXCIgaW5zdGVhZCB3aXRoIG93bmVyIFwiJXNcIiIsCisgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGJhc2Ugc2VydmljZSBhY3RpdmF0aW9uLCBnb3QgXCIlc1wiIGluc3RlYWQgd2l0aCBvd25lciBcIiVzXCJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9zZXJ2aWNlLCBiYXNlX3NlcnZpY2VfZnJvbV9idXMpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CiAKICAgICAgIGlmIChvbGRfb3duZXJbMF0pCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiUmVjZWl2ZWQgYW4gb2xkX293bmVyIGFyZ3VtZW50IGR1cmluZyBiYXNlIHNlcnZpY2UgYWN0aXZhdGlvbiwgXCIlc1wiIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiUmVjZWl2ZWQgYW4gb2xkX293bmVyIGFyZ3VtZW50IGR1cmluZyBiYXNlIHNlcnZpY2UgYWN0aXZhdGlvbiwgXCIlc1wiXG4iLAogICAgICAgICAgICAgICAgICAgICAgIG9sZF9vd25lcik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTIyMTgsNyArMjE3OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSAlcyBkb2Vzbid0IGhhdmUgYSBzZXJ2aWNlIG5hbWU6ICVzIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgJXMgZG9lc24ndCBoYXZlIGEgc2VydmljZSBuYW1lOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTIyMjcsMjEgKzIxODgsMjEgQEAKIAogICAgICAgaWYgKHN0cmNtcCAoc2VydmljZV9uYW1lLCBhY3RpdmF0ZWRfbmFtZSkgIT0gMCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCB0byBzZWUgc2VydmljZSAlcyBjcmVhdGVkLCBzYXcgJXMgaW5zdGVhZCIsCisgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIHRvIHNlZSBzZXJ2aWNlICVzIGNyZWF0ZWQsIHNhdyAlcyBpbnN0ZWFkXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlZF9uYW1lLCBzZXJ2aWNlX25hbWUpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CiAKICAgICAgIGlmIChzdHJjbXAgKGJhc2Vfc2VydmljZV9uYW1lLCBiYXNlX3NlcnZpY2VfZnJvbV9idXMpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiTmFtZU93bmVyQ2hhbmdlZCByZXBvcnRzIHdyb25nIGJhc2Ugc2VydmljZTogJXMgb3duZXIsIGV4cGVjdGVkICVzIGluc3RlYWQiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJOYW1lT3duZXJDaGFuZ2VkIHJlcG9ydHMgd3JvbmcgYmFzZSBzZXJ2aWNlOiAlcyBvd25lciwgZXhwZWN0ZWQgJXMgaW5zdGVhZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3NlcnZpY2VfZnJvbV9idXMsIGJhc2Vfc2VydmljZV9uYW1lKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQogCiAgICAgICBpZiAob2xkX293bmVyWzBdKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoImV4cGVjdGVkIGEgJXMsIGdvdCBhICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiZXhwZWN0ZWQgYSAlcywgZ290IGEgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVPd25lckNoYW5nZWQgKGNoYW5nZSkiKTsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTIyNjcsNyArMjIyOCw3IEBACiAgICAgICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgYSByZXBseSB0byAlcywgZ290IG5vdGhpbmciLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCBhIHJlcGx5IHRvICVzLCBnb3Qgbm90aGluZ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRTZXJ2aWNlQnlOYW1lIik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTIyOTMsNyArMjI1NCw3IEBACiAgICAgewogICAgICAgaWYgKCFkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGhhdmUgYWN0aXZhdGlvbiByZXN1bHQgZmlyc3QgYXJndW1lbnQgdG8gJXM6ICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBoYXZlIGFjdGl2YXRpb24gcmVzdWx0IGZpcnN0IGFyZ3VtZW50IHRvICVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRTZXJ2aWNlQnlOYW1lIiwgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTIzMDgsNyArMjI2OSw3IEBACiAgICAgICAgIDsgLyogR29vZCBhbHNvICovCiAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiQWN0aXZhdGlvbiByZXN1bHQgd2FzICV1LCBubyBnb29kLiIsCisgICAgICAgICAgX2RidXNfd2FybiAoIkFjdGl2YXRpb24gcmVzdWx0IHdhcyAldSwgbm8gZ29vZC5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbl9yZXN1bHQpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CkBAIC0yMzE5LDcgKzIyODAsNyBAQAogCiAgIGlmICghY2hlY2tfbm9fbGVmdG92ZXJzIChjb250ZXh0KSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgdmVyaWZ5aW5nIGV4aXN0ZW50IGFjdGl2YXRpb24gcmVzdWx0cyIpOworICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2VzIHdlcmUgbGVmdCBvdmVyIGFmdGVyIHZlcmlmeWluZyBleGlzdGVudCBhY3RpdmF0aW9uIHJlc3VsdHNcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCkBAIC0yMzcxLDcgKzIzMzIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgJXMgZG9lc24ndCBoYXZlIGEgc2VydmljZSBuYW1lOiAlcyIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlICVzIGRvZXNuJ3QgaGF2ZSBhIHNlcnZpY2UgbmFtZTogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lT3duZXJDaGFuZ2VkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKQEAgLTIzODEsNyArMjM0Miw3IEBACiAKICAgICAgIGlmIChzdHJjbXAgKHNlcnZpY2VfbmFtZSwgYWN0aXZhdGVkX25hbWUpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgdG8gc2VlIHNlcnZpY2UgJXMgY3JlYXRlZCwgc2F3ICVzIGluc3RlYWQiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCB0byBzZWUgc2VydmljZSAlcyBjcmVhdGVkLCBzYXcgJXMgaW5zdGVhZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWRfbmFtZSwgc2VydmljZV9uYW1lKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQpAQCAtMjYwMyw3ICsyNTY0LDcgQEAKIAogICAgICAgaWYgKCFjaGVja19ub19sZWZ0b3ZlcnMgKGNvbnRleHQpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2VzIHdlcmUgbGVmdCBvdmVyIGFmdGVyICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgX0RCVVNfRlVOQ1RJT05fTkFNRSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTI2MzUsNyArMjU5Niw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBleHBlY3RlZCBlcnJvciIpOworICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IGFuIGV4cGVjdGVkIGVycm9yXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtMjY2Myw3ICsyNjI0LDcgQEAKIAogICBpZiAoIWVycm9yX2ZvdW5kKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCBlcnJvciAlcyBvciBvdGhlciwgZ290ICVzIGluc3RlYWQiLAorICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGVycm9yICVzIG9yIG90aGVyLCBnb3QgJXMgaW5zdGVhZFxuIiwKICAgICAgICAgICAgICAgICAgIGZpcnN0X2Vycm9yX25hbWUsCiAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKG1lc3NhZ2UpKTsKICAgICAgIGdvdG8gb3V0OwpAQCAtMjcxOCw3ICsyNjc5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgTmFtZU93bmVyQ2hhbmdlZCBtZXNzYWdlIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgTmFtZU93bmVyQ2hhbmdlZCBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgbWVzc2FnZV9raW5kID0gR09UX1NPTUVUSElOR19FTFNFOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODA3LDcgKzI3NjgsNyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlcyBhZnRlciAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlcyBhZnRlciAlcyAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgICJTdGFydFNlcnZpY2VCeU5hbWUiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMjgxOSw3ICsyNzgwLDcgQEAKICAgICB7CiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpIDogIihub25lKSIpOwogICAgICAgICAgIGdvdG8gb3V0OwpAQCAtMjg0MSw3ICsyODAyLDcgQEAKICAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZXhwZWN0IGVycm9yICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgZXJyb3IgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9lcnJvcl9uYW1lIChtZXNzYWdlKSk7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KQEAgLTI4NjMsNyArMjgyNCw3IEBACiAgICAgICBtZXNzYWdlID0gZGJ1c19jb25uZWN0aW9uX2JvcnJvd19tZXNzYWdlIChjb25uZWN0aW9uKTsKICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlcyBhZnRlciBiYXNlIHNlcnZpY2UgY3JlYXRpb24gbm90aWZpY2F0aW9uIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgYWZ0ZXIgYmFzZSBzZXJ2aWNlIGNyZWF0aW9uIG5vdGlmaWNhdGlvblxuIik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIApAQCAtMjg3NSw3ICsyODM2LDYgQEAKICAgICAgIHN3aXRjaCAobWVzc2FnZV9raW5kKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgR09UX1NPTUVUSElOR19FTFNFOgotICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIG1lc3NhZ2UgYWZ0ZXIgQWN0aXZhdGVTZXJ2aWNlICIKICAgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBiZSBhbiBlcnJvciBvciBhIHNlcnZpY2UgYW5ub3VuY2VtZW50Iik7CiAgICAgICAgICAgZ290byBvdXQ7CkBAIC0yOTM1LDcgKzI4OTUsNyBAQAogICAgICAgICAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcG9wIG1lc3NhZ2Ugd2UganVzdCBwdXQgYmFjayEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGhhdmUgYmVlbiBhIE5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGhhdmUgYmVlbiBhIE5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKVxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogCkBAIC0yOTQ4LDcgKzI5MDgsNyBAQAogCiAgICAgICAgICAgaWYgKCFjaGVja19ub19sZWZ0b3ZlcnMgKGNvbnRleHQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgc3VjY2Vzc2Z1bCBhY3RpdmF0aW9uIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlcyB3ZXJlIGxlZnQgb3ZlciBhZnRlciBzdWNjZXNzZnVsIGFjdGl2YXRpb25cbiIpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIH0KIApAQCAtMzAzMCw3ICsyOTkwLDcgQEAKICAgbWVzc2FnZSA9IHBvcF9tZXNzYWdlX3dhaXRpbmdfZm9yX21lbW9yeSAoY29ubmVjdGlvbik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgICJTdGFydFNlcnZpY2VCeU5hbWUiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMzA0MSw3ICszMDAxLDcgQEAKICAgICB7CiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpIDogIihub25lKSIpOwogICAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzA4Miw3ICszMDQyLDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlIHNlZ2ZhdWx0IHNlcnZpY2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYWN0aXZhdGUgc2VnZmF1bHQgc2VydmljZVxuIik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CiAKQEAgLTMxMzksNyArMzA5OSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiRWNobyBtZXNzYWdlIChhdXRvIGFjdGl2YXRpb24pIiwgc2VyaWFsLCBjb25uZWN0aW9uKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTMxNTAsNyArMzExMCw3IEBACiAgICAgewogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaGFzX3NlbmRlciAobWVzc2FnZSwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgPwogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA6ICIobm9uZSkiKTsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTMxODMsNyArMzE0Myw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZXhwZWN0IHRvIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZSBzZWdmYXVsdCBzZXJ2aWNlIik7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlIHNlZ2ZhdWx0IHNlcnZpY2VcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCkBAIC0zMjQ2LDEzICszMjA2LDEzIEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcG9wIG1lc3NhZ2UhIFNob3VsZCBoYXZlIGJlZW4gcmVwbHkgZnJvbSBSdW5IZWxsb0Zyb21TZWxmIG1lc3NhZ2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcG9wIG1lc3NhZ2UhIFNob3VsZCBoYXZlIGJlZW4gcmVwbHkgZnJvbSBSdW5IZWxsb0Zyb21TZWxmIG1lc3NhZ2VcbiIpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICBpZiAoZGJ1c19tZXNzYWdlX2dldF9yZXBseV9zZXJpYWwgKG1lc3NhZ2UpICE9IHNlcmlhbCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsIik7CisgICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsXG4iKTsKICAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQpAQCAtMzI5OSwyMCArMzI1OSwyMCBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gUGluZyBtZXNzYWdlIik7CisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gUGluZyBtZXNzYWdlXG4iKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgaWYgKGRidXNfbWVzc2FnZV9nZXRfcmVwbHlfc2VyaWFsIChtZXNzYWdlKSAhPSBzZXJpYWwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIldyb25nIHJlcGx5IHNlcmlhbCIpOworICAgICAgX2RidXNfd2FybiAoIldyb25nIHJlcGx5IHNlcmlhbFxuIik7CiAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICBpZiAoZGJ1c19tZXNzYWdlX2dldF90eXBlIChtZXNzYWdlKSAhPSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfUkVUVVJOKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIG1lc3NhZ2UgcmV0dXJuIGR1cmluZyBQaW5nIik7CisgICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBtZXNzYWdlIHJldHVybiBkdXJpbmcgUGluZ1xuIik7CiAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KQEAgLTMzMzAsMjEgKzMyOTAsMTAgQEAKIGNoZWNrX2V4aXN0ZW50X2dldF9tYWNoaW5lX2lkIChCdXNDb250ZXh0ICAgICAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbikKIHsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwogICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKICAgZGJ1c191aW50MzJfdCBzZXJpYWw7Ci0gIERCdXNHVUlEIHV1aWQ7CiAgIGNvbnN0IGNoYXIgKm1hY2hpbmVfaWQ7CiAKLSAgaWYgKCFfZGJ1c19yZWFkX2xvY2FsX21hY2hpbmVfdXVpZCAoJnV1aWQsIEZBTFNFLCAmZXJyb3IpKQotICAgIHsKLSAgICAgIC8qIFVuYWJsZSB0byB0ZXN0IGZ1cnRoZXI6IGVpdGhlciB3ZSByYW4gb3V0IG9mIG1lbW9yeSwgb3IgbmVpdGhlcgotICAgICAgICogZGJ1cyBub3Igc3lzdGVtZCB3YXMgZXZlciBjb3JyZWN0bHkgaW5zdGFsbGVkIG9uIHRoaXMgbWFjaGluZSAqLwotICAgICAgX2RidXNfdmVyYm9zZSAoIk1hY2hpbmUgVVVJRCBub3QgYXZhaWxhYmxlOiAlcyIsIGVycm9yLm1lc3NhZ2UpOwotICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCiAgIG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChFWElTVEVOVF9TRVJWSUNFX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL29yZy9mcmVlZGVza3RvcC9UZXN0U3VpdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIiLApAQCAtMzM3MiwyMCArMzMyMSwyMCBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gR2V0TWFjaGluZUlkIG1lc3NhZ2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcG9wIG1lc3NhZ2UhIFNob3VsZCBoYXZlIGJlZW4gcmVwbHkgZnJvbSBHZXRNYWNoaW5lSWQgbWVzc2FnZVxuIik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgIGlmIChkYnVzX21lc3NhZ2VfZ2V0X3JlcGx5X3NlcmlhbCAobWVzc2FnZSkgIT0gc2VyaWFsKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJXcm9uZyByZXBseSBzZXJpYWwiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJXcm9uZyByZXBseSBzZXJpYWxcbiIpOwogICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgaWYgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSAobWVzc2FnZSkgIT0gREJVU19NRVNTQUdFX1RZUEVfTUVUSE9EX1JFVFVSTikKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBtZXNzYWdlIHJldHVybiBkdXJpbmcgR2V0TWFjaGluZUlkIik7CisgICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBtZXNzYWdlIHJldHVybiBkdXJpbmcgR2V0TWFjaGluZUlkXG4iKTsKICAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQpAQCAtMzM5MywxNCArMzM0MiwxNCBAQAogICBtYWNoaW5lX2lkID0gTlVMTDsKICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKG1lc3NhZ2UsIE5VTEwsIERCVVNfVFlQRV9TVFJJTkcsICZtYWNoaW5lX2lkLCBEQlVTX1RZUEVfSU5WQUxJRCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IGEgbWFjaGluZSBJRCBpbiByZXBseSB0byBHZXRNYWNoaW5lSWQiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhIG1hY2hpbmUgSUQgaW4gcmVwbHkgdG8gR2V0TWFjaGluZUlkXG4iKTsKICAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgIGlmIChtYWNoaW5lX2lkID09IE5VTEwgfHwgc3RybGVuIChtYWNoaW5lX2lkKSAhPSAzMikKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTWFjaGluZSBpZCBsb29rcyBib2d1czogJyVzJyIsIG1hY2hpbmVfaWQgPyBtYWNoaW5lX2lkIDogIm51bGwiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJNYWNoaW5lIGlkIGxvb2tzIGJvZ3VzOiAnJXMnXG4iLCBtYWNoaW5lX2lkID8gbWFjaGluZV9pZCA6ICJudWxsIik7CiAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KQEAgLTM0NzYsNyArMzQyNSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2VzIGFmdGVyIGF1dG8gc3RhcnQgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgYWZ0ZXIgYXV0byBzdGFydCAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC0zNTA2LDcgKzM0NTUsNyBAQAogICAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3dhcm4gKCJObyBtZXNzYWdlIGFmdGVyIGF1dG8gYWN0aXZhdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgYmUgYSBzZXJ2aWNlIGFubm91bmNlbWVudCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBiZSBhIHNlcnZpY2UgYW5ub3VuY2VtZW50KVxuIik7CiAgICAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JldHVybl9tZXNzYWdlIChjb25uZWN0aW9uLCBtZXNzYWdlKTsKICAgICAgICAgICBtZXNzYWdlID0gTlVMTDsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTM1MjQsNyArMzQ3Myw3IEBACiAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBwb3AgbWVzc2FnZSB3ZSBqdXN0IHB1dCBiYWNrISAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGEgTmFtZU93bmVyQ2hhbmdlZCAoY3JlYXRpb24pIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGEgTmFtZU93bmVyQ2hhbmdlZCAoY3JlYXRpb24pXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAKQEAgLTM1NjIsOCArMzUxMSw3IEBACiAKICAgICAgICAgY2FzZSBHT1RfRVJST1I6CiAgICAgICAgIGNhc2UgR09UX1NPTUVUSElOR19FTFNFOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIG1lc3NhZ2UgYWZ0ZXIgYXV0byBhY3RpdmF0aW9uIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgbWVzc2FnZSBhZnRlciBhdXRvIGFjdGl2YXRpb25cbiIpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CiAgICAgfQpAQCAtMzU4MCwxMyArMzUyOCwxMyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gZWNobyBtZXNzYWdlIik7CisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gZWNobyBtZXNzYWdlXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAogICBpZiAoZGJ1c19tZXNzYWdlX2dldF9yZXBseV9zZXJpYWwgKG1lc3NhZ2UpICE9IHNlcmlhbCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsIik7CisgICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtMzY2NCw3ICszNjEyLDcgQEAKICAgbWVzc2FnZSA9IHBvcF9tZXNzYWdlX3dhaXRpbmdfZm9yX21lbW9yeSAoY29ubmVjdGlvbik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgICJFY2hvIG1lc3NhZ2UgKGF1dG8gYWN0aXZhdGlvbikiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtMzY3NSw3ICszNjIzLDcgQEAKICAgICB7CiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA/CiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpIDogIihub25lKSIpOwogICAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzcwMSw3ICszNjQ5LDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGF1dG8tc3RhcnQgbWlzc2luZyBzZXJ2aWNlIik7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgdG8gc3VjY2Vzc2Z1bGx5IGF1dG8tc3RhcnQgbWlzc2luZyBzZXJ2aWNlXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtMzcxNCw4ICszNjYyLDYgQEAKICAgcmV0dXJuIHJldHZhbDsKIH0KIAotI2lmbmRlZiBEQlVTX1dJTgotCiAjZGVmaW5lIFNFUlZJQ0VfVVNFUl9NSVNTSU5HX05BTUUgIm9yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZU5vVXNlciIKIAogLyogcmV0dXJucyBUUlVFIGlmIHRoZSBjb3JyZWN0IHRoaW5nIGhhcHBlbnMsCkBAIC0zNzUzLDcgKzM2OTksNyBAQAogCiAgIGlmICghZGJ1c19jb25uZWN0aW9uX2dldF9pc19jb25uZWN0ZWQgKGNvbm5lY3Rpb24pKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWQiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWRcbiIpOwogICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC0zNzYyLDcgKzM3MDgsNyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwXG4iLAogICAgICAgICAgICAgICAgICAgIkVjaG8gbWVzc2FnZSAoYXV0byBhY3RpdmF0aW9uKSIsIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC0zNzczLDcgKzM3MTksNyBAQAogICAgIHsKICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2hhc19zZW5kZXIgKG1lc3NhZ2UsIERCVVNfU0VSVklDRV9EQlVTKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXMiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAgICAgICAgICAgZ290byBvdXQ7CkBAIC0zNzk5LDcgKzM3NDUsNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2VcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCkBAIC0zODQ5LDcgKzM3OTUsNyBAQAogCiAgIGlmICghZGJ1c19jb25uZWN0aW9uX2dldF9pc19jb25uZWN0ZWQgKGNvbm5lY3Rpb24pKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWQiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWRcbiIpOwogICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC0zODU4LDcgKzM4MDQsNyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwXG4iLAogICAgICAgICAgICAgICAgICAgIkVjaG8gbWVzc2FnZSAoYXV0byBhY3RpdmF0aW9uKSIsIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC0zODY5LDcgKzM4MTUsNyBAQAogICAgIHsKICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2hhc19zZW5kZXIgKG1lc3NhZ2UsIERCVVNfU0VSVklDRV9EQlVTKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXMiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAgICAgICAgICAgZ290byBvdXQ7CkBAIC0zOTAzLDcgKzM4NDksNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2VcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCkBAIC0zOTUzLDcgKzM4OTksNyBAQAogCiAgIGlmICghZGJ1c19jb25uZWN0aW9uX2dldF9pc19jb25uZWN0ZWQgKGNvbm5lY3Rpb24pKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWQiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJjb25uZWN0aW9uIHdhcyBkaXNjb25uZWN0ZWRcbiIpOwogICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCkBAIC0zOTYyLDcgKzM5MDgsNyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwXG4iLAogICAgICAgICAgICAgICAgICAgIkVjaG8gbWVzc2FnZSAoYXV0byBhY3RpdmF0aW9uKSIsIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC0zOTczLDcgKzM5MTksNyBAQAogICAgIHsKICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2hhc19zZW5kZXIgKG1lc3NhZ2UsIERCVVNfU0VSVklDRV9EQlVTKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXMiLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlIGhhcyB3cm9uZyBzZW5kZXIgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIgKG1lc3NhZ2UpID8KICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAgICAgICAgICAgZ290byBvdXQ7CkBAIC00MDA3LDcgKzM5NTMsNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCB0byBzdWNjZXNzZnVsbHkgYXV0by1zdGFydCBtaXNzaW5nIHNlcnZpY2VcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCkBAIC00MDE5LDcgKzM5NjUsNiBAQAogCiAgIHJldHVybiByZXR2YWw7CiB9Ci0jZW5kaWYKIAogI2RlZmluZSBTSEVMTF9GQUlMX1NFUlZJQ0VfTkFNRSAib3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlU2hlbGxFY2hvU2VydmljZUZhaWwiCiAKQEAgLTQwNjYsNyArNDAxMSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcCIsCisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGEgcmVwbHkgdG8gJXMgJWQgb24gJXBcbiIsCiAgICAgICAgICAgICAgICAgICAiRWNobyBtZXNzYWdlIChhdXRvIGFjdGl2YXRpb24pIiwgc2VyaWFsLCBjb25uZWN0aW9uKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTQwNzcsNyArNDAyMiw3IEBACiAgICAgewogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaGFzX3NlbmRlciAobWVzc2FnZSwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgPwogICAgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSA6ICIobm9uZSkiKTsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTQxMDMsNyArNDA0OCw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZXhwZWN0IHRvIHN1Y2Nlc3NmdWxseSBhdXRvLXN0YXJ0IHNoZWxsIGZhaWwgc2VydmljZSIpOworICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZXhwZWN0IHRvIHN1Y2Nlc3NmdWxseSBhdXRvLXN0YXJ0IHNoZWxsIGZhaWwgc2VydmljZVxuIik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CiAKQEAgLTQxNzAsNyArNDExNSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2VzIGFmdGVyIGF1dG8gc3RhcnQgJWQgb24gJXAiLAorICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgYWZ0ZXIgYXV0byBzdGFydCAlZCBvbiAlcFxuIiwKICAgICAgICAgICAgICAgICAgIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC00MjAwLDcgKzQxNDUsNyBAQAogICAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3dhcm4gKCJObyBtZXNzYWdlIGFmdGVyIGF1dG8gYWN0aXZhdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgYmUgYSBzZXJ2aWNlIGFubm91bmNlbWVudCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBiZSBhIHNlcnZpY2UgYW5ub3VuY2VtZW50KVxuIik7CiAgICAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JldHVybl9tZXNzYWdlIChjb25uZWN0aW9uLCBtZXNzYWdlKTsKICAgICAgICAgICBtZXNzYWdlID0gTlVMTDsKICAgICAgICAgICBnb3RvIG91dDsKQEAgLTQyMTgsNyArNDE2Myw3IEBACiAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBwb3AgbWVzc2FnZSB3ZSBqdXN0IHB1dCBiYWNrISAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGEgTmFtZU93bmVyQ2hhbmdlZCAoY3JlYXRpb24pIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGEgTmFtZU93bmVyQ2hhbmdlZCAoY3JlYXRpb24pXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAKQEAgLTQyNTYsOCArNDIwMSw3IEBACiAKICAgICAgICAgY2FzZSBHT1RfRVJST1I6CiAgICAgICAgIGNhc2UgR09UX1NPTUVUSElOR19FTFNFOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIG1lc3NhZ2UgYWZ0ZXIgYXV0byBhY3RpdmF0aW9uIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgbWVzc2FnZSBhZnRlciBhdXRvIGFjdGl2YXRpb25cbiIpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CiAgICAgfQpAQCAtNDI3NCwxMyArNDIxOCwxMyBAQAogICBtZXNzYWdlID0gcG9wX21lc3NhZ2Vfd2FpdGluZ19mb3JfbWVtb3J5IChjb25uZWN0aW9uKTsKICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gZWNobyBtZXNzYWdlIik7CisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBvcCBtZXNzYWdlISBTaG91bGQgaGF2ZSBiZWVuIHJlcGx5IGZyb20gZWNobyBtZXNzYWdlXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAogICBpZiAoZGJ1c19tZXNzYWdlX2dldF9yZXBseV9zZXJpYWwgKG1lc3NhZ2UpICE9IHNlcmlhbCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsIik7CisgICAgICBfZGJ1c193YXJuICgiV3JvbmcgcmVwbHkgc2VyaWFsXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNDI5NCw3ICs0MjM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZhcmd2WzZdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJFcnJvciBnZXR0aW5nIGFyZ3VtZW50cyBmcm9tIHJldHVybiIpOworICAgICAgX2RidXNfd2FybiAoIkVycm9yIGdldHRpbmcgYXJndW1lbnRzIGZyb20gcmV0dXJuXG4iKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNDMwMyw0MiArNDI0Nyw0MiBAQAogICAgKi8KICAgaWYgKHN0cmNtcCgiLXRlc3QiLCBhcmd2WzFdKSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIGFyZ3ZbMV0gaW4gc2hlbGwgc3VjY2VzcyBzZXJ2aWNlIHRlc3QgKGV4cGVjdGVkOiAlcywgZ290OiAlcykiLAorICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgYXJndlsxXSBpbiBzaGVsbCBzdWNjZXNzIHNlcnZpY2UgdGVzdCAoZXhwZWN0ZWQ6ICVzLCBnb3Q6ICVzKVxuIiwKICAgICAgICAgICAgICAgICAgICItdGVzdCIsIGFyZ3ZbMV0pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCiAgIGlmIChzdHJjbXAoInRoYXQiLCBhcmd2WzJdKSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIGFyZ3ZbMl0gaW4gc2hlbGwgc3VjY2VzcyBzZXJ2aWNlIHRlc3QgKGV4cGVjdGVkOiAlcywgZ290OiAlcykiLAorICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgYXJndlsyXSBpbiBzaGVsbCBzdWNjZXNzIHNlcnZpY2UgdGVzdCAoZXhwZWN0ZWQ6ICVzLCBnb3Q6ICVzKVxuIiwKICAgICAgICAgICAgICAgICAgICAidGhhdCIsIGFyZ3ZbMl0pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogCiAgIGlmIChzdHJjbXAoIndlIGdldCIsIGFyZ3ZbM10pICE9IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgYXJndlszXSBpbiBzaGVsbCBzdWNjZXNzIHNlcnZpY2UgdGVzdCAoZXhwZWN0ZWQ6ICVzLCBnb3Q6ICVzKSIsCisgICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBhcmd2WzNdIGluIHNoZWxsIHN1Y2Nlc3Mgc2VydmljZSB0ZXN0IChleHBlY3RlZDogJXMsIGdvdDogJXMpXG4iLAogICAgICAgICAgICAgICAgICAgICJ3ZSBnZXQiLCBhcmd2WzNdKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAogICBpZiAoc3RyY21wKCJiYWNrIiwgYXJndls0XSkgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBhcmd2WzRdIGluIHNoZWxsIHN1Y2Nlc3Mgc2VydmljZSB0ZXN0IChleHBlY3RlZDogJXMsIGdvdDogJXMpIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIGFyZ3ZbNF0gaW4gc2hlbGwgc3VjY2VzcyBzZXJ2aWNlIHRlc3QgKGV4cGVjdGVkOiAlcywgZ290OiAlcylcbiIsCiAgICAgICAgICAgICAgICAgICAgImJhY2siLCBhcmd2WzRdKTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAogICBpZiAoc3RyY21wKCItLXdoYXQiLCBhcmd2WzVdKSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIGFyZ3ZbNV0gaW4gc2hlbGwgc3VjY2VzcyBzZXJ2aWNlIHRlc3QgKGV4cGVjdGVkOiAlcywgZ290OiAlcykiLAorICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgYXJndls1XSBpbiBzaGVsbCBzdWNjZXNzIHNlcnZpY2UgdGVzdCAoZXhwZWN0ZWQ6ICVzLCBnb3Q6ICVzKVxuIiwKICAgICAgICAgICAgICAgICAgICAiLS13aGF0IiwgYXJndls1XSk7CiAgICAgICBnb3RvIG91dDsKICAgICB9CiAKICAgaWYgKHN0cmNtcCgid2UgcHV0IGluIiwgYXJndls2XSkgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiVW5leHBlY3RlZCBhcmd2WzZdIGluIHNoZWxsIHN1Y2Nlc3Mgc2VydmljZSB0ZXN0IChleHBlY3RlZDogJXMsIGdvdDogJXMpIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIGFyZ3ZbNl0gaW4gc2hlbGwgc3VjY2VzcyBzZXJ2aWNlIHRlc3QgKGV4cGVjdGVkOiAlcywgZ290OiAlcylcbiIsCiAgICAgICAgICAgICAgICAgICAgIndlIHB1dCBpbiIsIGFyZ3ZbNl0pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtNDM3OSw3ICs0MzIzLDcgQEAKIAogICBpZiAoIWNoZWNrX25vX2xlZnRvdmVycyAoZC0+Y29udGV4dCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2VzIHdlcmUgbGVmdCBvdmVyLCBzaG91bGQgYmUgY292ZXJlZCBieSB0ZXN0IHN1aXRlIik7CisgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIsIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IHRlc3Qgc3VpdGVcbiIpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtNDQ1Niw3ICs0NDAwLDcgQEAKICAgbWVzc2FnZSA9IHBvcF9tZXNzYWdlX3dhaXRpbmdfZm9yX21lbW9yeSAoY29ubmVjdGlvbik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgcmVjZWl2ZSBhIHJlcGx5IHRvICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYSByZXBseSB0byAlcyAlZCBvbiAlcFxuIiwKIAkJICBtZXRob2QsIHNlcmlhbCwgY29ubmVjdGlvbik7CiAgICAgICBnb3RvIG91dDsKICAgICB9CkBAIC00NTA4LDcgKzQ0NTIsNyBAQAogCSAgZWxzZQogCSAgICB7CiAJICAgICAgX2RidXNfYXNzZXJ0IChkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSk7Ci0JICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBEQlVTX1RZUEVfQVJSQVkgZnJvbSAlcyIsIG1ldGhvZCk7CisJICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCBEQlVTX1RZUEVfQVJSQVkgZnJvbSAlc1xuIiwgbWV0aG9kKTsKIAkgICAgICBnb3RvIG91dDsKIAkgICAgfQogCX0gZWxzZSB7CkBAIC00NTU3LDcgKzQ1MDEsNyBAQAogCiAgIGlmICghX2RidXNfc3RyaW5nX2FycmF5X2NvbnRhaW5zICgoY29uc3QgY2hhciAqKilzZXJ2aWNlcywgZXhpc3RlbnQpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgJXMgZnJvbSBMaXN0QWN0aXZhdGFibGVOYW1lcyIsIGV4aXN0ZW50KTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgJXMgZnJvbSBMaXN0QWN0aXZhdGFibGVOYW1lc1xuIiwgZXhpc3RlbnQpOwogICAgICAgZGJ1c19mcmVlX3N0cmluZ19hcnJheSAoc2VydmljZXMpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KQEAgLTQ2MTUsNyArNDU1OSw3IEBACiAgIG1lc3NhZ2UgPSBwb3BfbWVzc2FnZV93YWl0aW5nX2Zvcl9tZW1vcnkgKGNvbm5lY3Rpb24pOwogICBpZiAobWVzc2FnZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2VzIGFmdGVyICVzICVkIG9uICVwIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2VzIGFmdGVyICVzICVkIG9uICVwXG4iLAogCQkgICJTdGFydFNlcnZpY2VCeU5hbWUiLCBzZXJpYWwsIGNvbm5lY3Rpb24pOwogICAgICAgZ290byBvdXQ7CiAgICAgfQpAQCAtNDYyNyw3ICs0NTcxLDcgQEAKICAgICB7CiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfc2VuZGVyIChtZXNzYWdlLCBEQlVTX1NFUlZJQ0VfREJVUykpCiAJewotCSAgX2RidXNfd2FybiAoIk1lc3NhZ2UgaGFzIHdyb25nIHNlbmRlciAlcyIsCisJICBfZGJ1c193YXJuICgiTWVzc2FnZSBoYXMgd3Jvbmcgc2VuZGVyICVzXG4iLAogCQkgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgPwogCQkgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlciAobWVzc2FnZSkgOiAiKG5vbmUpIik7CiAJICBnb3RvIG91dDsKQEAgLTQ2NDksNyArNDU5Myw3IEBACiAJfQogICAgICAgZWxzZQogCXsKLQkgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGV4cGVjdCBlcnJvciAlcyIsCisJICBfZGJ1c193YXJuICgiRGlkIG5vdCBleHBlY3QgZXJyb3IgJXNcbiIsCiAJCSAgICAgIGRidXNfbWVzc2FnZV9nZXRfZXJyb3JfbmFtZSAobWVzc2FnZSkpOwogCSAgZ290byBvdXQ7CiAJfQpAQCAtNDY3MSw3ICs0NjE1LDcgQEAKICAgICAgIG1lc3NhZ2UgPSBkYnVzX2Nvbm5lY3Rpb25fYm9ycm93X21lc3NhZ2UgKGNvbm5lY3Rpb24pOwogICAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKIAl7Ci0JICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlcyBhZnRlciBiYXNlIHNlcnZpY2UgY3JlYXRpb24gbm90aWZpY2F0aW9uIik7CisJICBfZGJ1c193YXJuICgiRGlkIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlcyBhZnRlciBiYXNlIHNlcnZpY2UgY3JlYXRpb24gbm90aWZpY2F0aW9uXG4iKTsKIAkgIGdvdG8gb3V0OwogCX0KIApAQCAtNDY4NSw5ICs0NjI5LDggQEAKIAljYXNlIEdPVF9TT01FVEhJTkdfRUxTRToKIAljYXNlIEdPVF9FUlJPUjoKIAljYXNlIEdPVF9TRVJWSUNFX0RFTEVURUQ6Ci0JZGVmYXVsdDoKIAkgIF9kYnVzX3dhcm4gKCJVbmV4cGVjdGVkIG1lc3NhZ2UgYWZ0ZXIgQWN0aXZhdGVTZXJ2aWNlICIKLQkJICAgICAgIihzaG91bGQgYmUgYW4gZXJyb3Igb3IgYSBzZXJ2aWNlIGFubm91bmNlbWVudCkiKTsKKwkJICAgICAgIihzaG91bGQgYmUgYW4gZXJyb3Igb3IgYSBzZXJ2aWNlIGFubm91bmNlbWVudClcbiIpOwogCSAgZ290byBvdXQ7CiAKIAljYXNlIEdPVF9TRVJWSUNFX0NSRUFURUQ6CkBAIC00Njk1LDcgKzQ2MzgsNyBAQAogCSAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKIAkgICAgewogCSAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcG9wIG1lc3NhZ2Ugd2UganVzdCBwdXQgYmFjayEgIgotCQkJICAic2hvdWxkIGhhdmUgYmVlbiBhIE5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKSIpOworCQkJICAic2hvdWxkIGhhdmUgYmVlbiBhIE5hbWVPd25lckNoYW5nZWQgKGNyZWF0aW9uKVxuIik7CiAJICAgICAgZ290byBvdXQ7CiAJICAgIH0KIApAQCAtNDcwOCw3ICs0NjUxLDcgQEAKIAogCSAgaWYgKCFjaGVja19ub19sZWZ0b3ZlcnMgKGNvbnRleHQpKQogCSAgICB7Ci0JICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2VzIHdlcmUgbGVmdCBvdmVyIGFmdGVyIHN1Y2Nlc3NmdWwgYWN0aXZhdGlvbiIpOworCSAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlcyB3ZXJlIGxlZnQgb3ZlciBhZnRlciBzdWNjZXNzZnVsIGFjdGl2YXRpb25cbiIpOwogCSAgICAgIGdvdG8gb3V0OwogCSAgICB9CiAKQEAgLTQ3MjMsNyArNDY2Niw3IEBACiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfYXJyYXlfY29udGFpbnMgKChjb25zdCBjaGFyICoqKXNlcnZpY2VzLCBleGlzdGVudCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IHRoZSBleHBlY3RlZCAlcyBmcm9tIExpc3ROYW1lcyIsIGV4aXN0ZW50KTsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCB0aGUgZXhwZWN0ZWQgJXMgZnJvbSBMaXN0TmFtZXNcbiIsIGV4aXN0ZW50KTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNDc2Miw3ICs0NzA1LDcgQEAKIAogICBpZiAoIWNoZWNrX25vX2xlZnRvdmVycyAoZC0+Y29udGV4dCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIk1lc3NhZ2VzIHdlcmUgbGVmdCBvdmVyLCBzaG91bGQgYmUgY292ZXJlZCBieSB0ZXN0IHN1aXRlIik7CisgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIsIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IHRlc3Qgc3VpdGVcbiIpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtNDc4NCw3ICs0NzI3LDcgQEAKICAgaWYgKCFfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoZGVzY3JpcHRpb24sIGNoZWNrX29vbV9jaGVjazJfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmQpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCIlcyBmYWlsZWQgZHVyaW5nIG9vbSIsIGRlc2NyaXB0aW9uKTsKKyAgICAgIF9kYnVzX3dhcm4gKCIlcyBmYWlsZWQgZHVyaW5nIG9vbVxuIiwgZGVzY3JpcHRpb24pOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICB9CiB9CkBAIC00OTE1LDcgKzQ4NTgsNyBAQAogCiAgIGlmICghY2hlY2tfbm9fbGVmdG92ZXJzIChjb250ZXh0KSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgc2V0dGluZyB1cCBpbml0aWFsIGNvbm5lY3Rpb25zIik7CisgICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgc2V0dGluZyB1cCBpbml0aWFsIGNvbm5lY3Rpb25zXG4iKTsKICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQiKTsKICAgICB9CiAKQEAgLTQ5NzMsNyArNDkxNiw2IEBACiAgIHJldHVybiBUUlVFOwogfQogCi0jaWZuZGVmIERCVVNfV0lOCiBzdGF0aWMgZGJ1c19ib29sX3QKIGJ1c19kaXNwYXRjaF90ZXN0X2NvbmZfZmFpbCAoY29uc3QgREJ1c1N0cmluZyAqdGVzdF9kYXRhX2RpciwKIAkJICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgKmZpbGVuYW1lKQpAQCAtNTAzMCw3ICs0OTcyLDYgQEAKIAogICByZXR1cm4gVFJVRTsKIH0KLSNlbmRpZgogCiBkYnVzX2Jvb2xfdAogYnVzX2Rpc3BhdGNoX3Rlc3QgKGNvbnN0IERCdXNTdHJpbmcgKnRlc3RfZGF0YV9kaXIpCkBAIC01MDkxLDcgKzUwMzIsNyBAQAogCiAgIGlmICghY2hlY2tfbm9fbGVmdG92ZXJzIChjb250ZXh0KSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTWVzc2FnZXMgd2VyZSBsZWZ0IG92ZXIgYWZ0ZXIgc2V0dGluZyB1cCBpbml0aWFsIFNIQS0xIGNvbm5lY3Rpb24iKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJNZXNzYWdlcyB3ZXJlIGxlZnQgb3ZlciBhZnRlciBzZXR0aW5nIHVwIGluaXRpYWwgU0hBLTEgY29ubmVjdGlvblxuIik7CiAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9idXMvZHJpdmVyLmMgYi9idXMvZHJpdmVyLmMKaW5kZXggY2QwYTcxNC4uYjdlMWEwYSAxMDA2NDQKLS0tIGEvYnVzL2RyaXZlci5jCisrKyBiL2J1cy9kcml2ZXIuYwpAQCAtNDMsNiArNDMsMTMgQEAKICNpbmNsdWRlIDxkYnVzL2RidXMtbWFyc2hhbC12YWxpZGF0ZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCit0eXBlZGVmIGVudW0KK3sKKyAgQlVTX0RSSVZFUl9GT1VORF9TRUxGLAorICBCVVNfRFJJVkVSX0ZPVU5EX1BFRVIsCisgIEJVU19EUklWRVJfRk9VTkRfRVJST1IsCit9IEJ1c0RyaXZlckZvdW5kOworCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgogbm9ubnVsbCAoY29uc3QgY2hhciAqbWF5YmVfbnVsbCwKICAgICAgICAgIGNvbnN0IGNoYXIgKmlmX251bGwpCkBAIC02OCw3ICs3NSw3IEBACiAgIHJldHVybiBidXNfc2VydmljZV9nZXRfcHJpbWFyeV9vd25lcnNfY29ubmVjdGlvbiAoc2Vydik7CiB9CiAKLUJ1c0RyaXZlckZvdW5kCitzdGF0aWMgQnVzRHJpdmVyRm91bmQKIGJ1c19kcml2ZXJfZ2V0X2Nvbm5faGVscGVyIChEQnVzQ29ubmVjdGlvbiAgKmNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2UgICAgICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAqd2hhdF93ZV93YW50LApAQCAtMjUwLDcgKzI1Nyw3IEBACiAKICAgX2RidXNfYXNzZXJ0IChkYnVzX21lc3NhZ2VfaGFzX3NpZ25hdHVyZSAobWVzc2FnZSwgInNzcyIpKTsKIAotICBpZiAoIWJ1c190cmFuc2FjdGlvbl9jYXB0dXJlICh0cmFuc2FjdGlvbiwgTlVMTCwgTlVMTCwgbWVzc2FnZSkpCisgIGlmICghYnVzX3RyYW5zYWN0aW9uX2NhcHR1cmUgKHRyYW5zYWN0aW9uLCBOVUxMLCBtZXNzYWdlKSkKICAgICBnb3RvIG9vbTsKIAogICByZXR2YWwgPSBidXNfZGlzcGF0Y2hfbWF0Y2hlcyAodHJhbnNhY3Rpb24sIE5VTEwsIE5VTEwsIG1lc3NhZ2UsIGVycm9yKTsKQEAgLTQyMSw5ICs0MjgsNiBAQAogICBkYnVzX2Jvb2xfdCByZXR2YWw7CiAgIEJ1c1JlZ2lzdHJ5ICpyZWdpc3RyeTsKICAgQnVzQ29ubmVjdGlvbnMgKmNvbm5lY3Rpb25zOwotICBEQnVzRXJyb3IgdG1wX2Vycm9yOwotICBpbnQgbGltaXQ7Ci0gIGNvbnN0IGNoYXIgKmxpbWl0X25hbWU7CiAKICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CiAKQEAgLTQ0MSwxOSArNDQ1LDExIEBACiAgICAqIGluY29tcGxldGUgY29ubmVjdGlvbnMuIEl0J3MgZXZlbiBPSyBpZiB0aGUgY29ubmVjdGlvbiB3YW50cyB0bwogICAgKiByZXRyeSB0aGUgaGVsbG8gbWVzc2FnZSwgd2Ugc3VwcG9ydCB0aGF0LgogICAgKi8KLSAgZGJ1c19lcnJvcl9pbml0ICgmdG1wX2Vycm9yKTsKICAgY29ubmVjdGlvbnMgPSBidXNfY29ubmVjdGlvbl9nZXRfY29ubmVjdGlvbnMgKGNvbm5lY3Rpb24pOwogICBpZiAoIWJ1c19jb25uZWN0aW9uc19jaGVja19saW1pdHMgKGNvbm5lY3Rpb25zLCBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW1pdF9uYW1lLCAmbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9lcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpKQogICAgIHsKLSAgICAgIEJ1c0NvbnRleHQgKmNvbnRleHQ7Ci0KLSAgICAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19TRVQgKCZ0bXBfZXJyb3IpOwotICAgICAgY29udGV4dCA9IGJ1c19jb25uZWN0aW9uX2dldF9jb250ZXh0IChjb25uZWN0aW9uKTsKLSAgICAgIGJ1c19jb250ZXh0X2xvZyAoY29udGV4dCwgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsICIlcyAoJXM9JWQpIiwKLSAgICAgICAgICB0bXBfZXJyb3IubWVzc2FnZSwgbGltaXRfbmFtZSwgbGltaXQpOwotICAgICAgZGJ1c19tb3ZlX2Vycm9yICgmdG1wX2Vycm9yLCBlcnJvcik7CisgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCkBAIC05NjYsMTEgKzk2MiwxMSBAQAogICByZXR1cm4gcmV0dmFsOwogfQogCi1kYnVzX2Jvb2xfdAotYnVzX2RyaXZlcl9zZW5kX2Fja19yZXBseSAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICplcnJvcikKK3N0YXRpYyBkYnVzX2Jvb2xfdAorc2VuZF9hY2tfcmVwbHkgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAorICAgICAgICAgICAgICAgIEJ1c1RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAqZXJyb3IpCiB7CiAgIERCdXNNZXNzYWdlICpyZXBseTsKIApAQCAtMTAzMCw3ICsxMDI2LDcgQEAKIAogICAgICAgYWN0aXZhdGlvbiA9IGJ1c19jb250ZXh0X2dldF9hY3RpdmF0aW9uIChjb250ZXh0KTsKIAotICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIE5VTEwsIE5VTEwsIG1lc3NhZ2UpKQorICAgICAgaWYgKCFidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSAodHJhbnNhY3Rpb24sIE5VTEwsIG1lc3NhZ2UpKQogICAgICAgICB7CiAgICAgICAgICAgQlVTX1NFVF9PT00gKGVycm9yKTsKICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiTm8gbWVtb3J5IGZvciBidXNfdHJhbnNhY3Rpb25fY2FwdHVyZSgpIik7CkBAIC0xMDgzLDYgKzEwNzksMjEgQEAKIAogICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKIAorICBpZiAoIWJ1c19kcml2ZXJfY2hlY2tfbWVzc2FnZV9pc19mb3JfdXMgKG1lc3NhZ2UsIGVycm9yKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyNpZmRlZiBEQlVTX1VOSVgKKyAgICB7CisgICAgICAvKiBVcGRhdGVBY3RpdmF0aW9uRW52aXJvbm1lbnQgaXMgYmFzaWNhbGx5IGEgcmVjaXBlIGZvciBwcml2aWxlZ2UKKyAgICAgICAqIGVzY2FsYXRpb24gc28gbGV0J3MgYmUgZXh0cmEtY2FyZWZ1bDogZG8gbm90IGFsbG93IHRoZSBzeXNhZG1pbgorICAgICAgICogdG8gc2hvb3QgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdC4KKyAgICAgICAqLworICAgICAgaWYgKCFidXNfZHJpdmVyX2NoZWNrX2NhbGxlcl9pc19wcml2aWxlZ2VkIChjb25uZWN0aW9uLCB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgZXJyb3IpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorI2VuZGlmCisKICAgY29udGV4dCA9IGJ1c19jb25uZWN0aW9uX2dldF9jb250ZXh0IChjb25uZWN0aW9uKTsKIAogICBpZiAoYnVzX2NvbnRleHRfZ2V0X3NlcnZpY2VoZWxwZXIgKGNvbnRleHQpICE9IE5VTEwpCkBAIC0xMjY2LDcgKzEyNzcsOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gIGlmICghYnVzX2RyaXZlcl9zZW5kX2Fja19yZXBseSAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sIG1lc3NhZ2UsIGVycm9yKSkKKyAgaWYgKCFzZW5kX2Fja19yZXBseSAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGVycm9yKSkKICAgICBnb3RvIG91dDsKIAogICByZXR2YWwgPSBUUlVFOwpAQCAtMTI4OSw3ICsxMzAxLDYgQEAKICAgY29uc3QgY2hhciAqdGV4dCwgKmJ1c3R5cGU7CiAgIERCdXNTdHJpbmcgc3RyOwogICBCdXNNYXRjaG1ha2VyICptYXRjaG1ha2VyOwotICBpbnQgbGltaXQ7CiAgIEJ1c0NvbnRleHQgKmNvbnRleHQ7CiAKICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CkBAIC0xMjk3LDI1ICsxMzA4LDE1IEBACiAgIHRleHQgPSBOVUxMOwogICBydWxlID0gTlVMTDsKIAotICBjb250ZXh0ID0gYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbik7Ci0gIGxpbWl0ID0gYnVzX2NvbnRleHRfZ2V0X21heF9tYXRjaF9ydWxlc19wZXJfY29ubmVjdGlvbiAoY29udGV4dCk7Ci0KLSAgaWYgKGJ1c19jb25uZWN0aW9uX2dldF9uX21hdGNoX3J1bGVzIChjb25uZWN0aW9uKSA+PSBsaW1pdCkKKyAgaWYgKGJ1c19jb25uZWN0aW9uX2dldF9uX21hdGNoX3J1bGVzIChjb25uZWN0aW9uKSA+PQorICAgICAgYnVzX2NvbnRleHRfZ2V0X21heF9tYXRjaF9ydWxlc19wZXJfY29ubmVjdGlvbiAoYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbikpKQogICAgIHsKLSAgICAgIERCdXNFcnJvciB0bXBfZXJyb3I7Ci0KLSAgICAgIGRidXNfZXJyb3JfaW5pdCAoJnRtcF9lcnJvcik7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoJnRtcF9lcnJvciwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQsCisgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTElNSVRTX0VYQ0VFREVELAogICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIFwiJXNcIiBpcyBub3QgYWxsb3dlZCB0byBhZGQgbW9yZSBtYXRjaCBydWxlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgIihpbmNyZWFzZSBsaW1pdHMgaW4gY29uZmlndXJhdGlvbiBmaWxlIGlmIHJlcXVpcmVkOyAiCi0gICAgICAgICAgICAgICAgICAgICAgIm1heF9tYXRjaF9ydWxlc19wZXJfY29ubmVjdGlvbj0lZCkiLAorICAgICAgICAgICAgICAgICAgICAgICIoaW5jcmVhc2UgbGltaXRzIGluIGNvbmZpZ3VyYXRpb24gZmlsZSBpZiByZXF1aXJlZCkiLAogICAgICAgICAgICAgICAgICAgICAgIGJ1c19jb25uZWN0aW9uX2lzX2FjdGl2ZSAoY29ubmVjdGlvbikgPwogICAgICAgICAgICAgICAgICAgICAgIGJ1c19jb25uZWN0aW9uX2dldF9uYW1lIChjb25uZWN0aW9uKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgIihpbmFjdGl2ZSkiLAotICAgICAgICAgICAgICAgICAgICAgIGxpbWl0KTsKLSAgICAgIGJ1c19jb250ZXh0X2xvZyAoY29udGV4dCwgREJVU19TWVNURU1fTE9HX1dBUk5JTkcsICIlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRtcF9lcnJvci5tZXNzYWdlKTsKLSAgICAgIGRidXNfbW92ZV9lcnJvciAoJnRtcF9lcnJvciwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICIoaW5hY3RpdmUpIik7CiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTEzMzMsMTcgKzEzMzQsMTEgQEAKICAgaWYgKHJ1bGUgPT0gTlVMTCkKICAgICBnb3RvIGZhaWxlZDsKIAotICBidXN0eXBlID0gYnVzX2NvbnRleHRfZ2V0X3R5cGUgKGNvbnRleHQpOwotCi0gIGlmIChidXNfbWF0Y2hfcnVsZV9nZXRfY2xpZW50X2lzX2VhdmVzZHJvcHBpbmcgKHJ1bGUpKQotICAgIHsKLSAgICAgIGlmICghYnVzX2RyaXZlcl9jaGVja19jYWxsZXJfaXNfcHJpdmlsZWdlZCAoY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSB8fAotICAgICAgICAgICFidXNfYXBwYXJtb3JfYWxsb3dzX2VhdmVzZHJvcHBpbmcgKGNvbm5lY3Rpb24sIGJ1c3R5cGUsIGVycm9yKSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQorICBjb250ZXh0ID0gYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbik7CisgIGJ1c3R5cGUgPSBjb250ZXh0ID8gYnVzX2NvbnRleHRfZ2V0X3R5cGUgKGNvbnRleHQpIDogTlVMTDsKKyAgaWYgKGJ1c19tYXRjaF9ydWxlX2dldF9jbGllbnRfaXNfZWF2ZXNkcm9wcGluZyAocnVsZSkgJiYKKyAgICAgICFidXNfYXBwYXJtb3JfYWxsb3dzX2VhdmVzZHJvcHBpbmcgKGNvbm5lY3Rpb24sIGJ1c3R5cGUsIGVycm9yKSkKKyAgICBnb3RvIGZhaWxlZDsKIAogICBtYXRjaG1ha2VyID0gYnVzX2Nvbm5lY3Rpb25fZ2V0X21hdGNobWFrZXIgKGNvbm5lY3Rpb24pOwogCkBAIC0xMzUzLDcgKzEzNDgsOCBAQAogICAgICAgZ290byBmYWlsZWQ7CiAgICAgfQogCi0gIGlmICghYnVzX2RyaXZlcl9zZW5kX2Fja19yZXBseSAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sIG1lc3NhZ2UsIGVycm9yKSkKKyAgaWYgKCFzZW5kX2Fja19yZXBseSAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGVycm9yKSkKICAgICB7CiAgICAgICBidXNfbWF0Y2htYWtlcl9yZW1vdmVfcnVsZSAobWF0Y2htYWtlciwgcnVsZSk7CiAgICAgICBnb3RvIGZhaWxlZDsKQEAgLTE0MDMsNyArMTM5OSw4IEBACiAgIC8qIFNlbmQgdGhlIGFjayBiZWZvcmUgd2UgcmVtb3ZlIHRoZSBydWxlLCBzaW5jZSB0aGUgYWNrIGlzIHVuZG9uZQogICAgKiBvbiB0cmFuc2FjdGlvbiBjYW5jZWwsIGJ1dCBydWxlIHJlbW92YWwgaXNuJ3QuCiAgICAqLwotICBpZiAoIWJ1c19kcml2ZXJfc2VuZF9hY2tfcmVwbHkgKGNvbm5lY3Rpb24sIHRyYW5zYWN0aW9uLCBtZXNzYWdlLCBlcnJvcikpCisgIGlmICghc2VuZF9hY2tfcmVwbHkgKGNvbm5lY3Rpb24sIHRyYW5zYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBlcnJvcikpCiAgICAgZ290byBmYWlsZWQ7CiAKICAgbWF0Y2htYWtlciA9IGJ1c19jb25uZWN0aW9uX2dldF9tYXRjaG1ha2VyIChjb25uZWN0aW9uKTsKQEAgLTE1MTAsOCArMTUwNyw2IEBACiAJCQkJICAgICAgREJ1c01lc3NhZ2UgICAgKm1lc3NhZ2UsCiAJCQkJICAgICAgREJ1c0Vycm9yICAgICAgKmVycm9yKQogewotICBzdGF0aWMgY29uc3QgY2hhciBkYnVzX3NlcnZpY2VfbmFtZVtdID0gREJVU19TRVJWSUNFX0RCVVM7Ci0KICAgY29uc3QgY2hhciAqdGV4dDsKICAgREJ1c0xpc3QgKmJhc2VfbmFtZXM7CiAgIERCdXNMaXN0ICpsaW5rOwpAQCAtMTUyMCw2ICsxNTE1LDcgQEAKICAgQnVzU2VydmljZSAqc2VydmljZTsKICAgREJ1c01lc3NhZ2UgKnJlcGx5OwogICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgYXJyYXlfaXRlcjsKKyAgY2hhciAqZGJ1c19zZXJ2aWNlX25hbWUgPSBEQlVTX1NFUlZJQ0VfREJVUzsKIAogICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKIApAQCAtMTU0MCw3ICsxNTM2LDcgQEAKICAgICAgIF9kYnVzX3N0cmluZ19lcXVhbF9jX3N0ciAoJnN0ciwgREJVU19TRVJWSUNFX0RCVVMpKQogICAgIHsKICAgICAgIC8qIE9SR19GUkVFREVTS1RPUF9EQlVTIG93bnMgaXRzZWxmICovCi0gICAgICBpZiAoISBfZGJ1c19saXN0X2FwcGVuZCAoJmJhc2VfbmFtZXMsIChjaGFyICopIGRidXNfc2VydmljZV9uYW1lKSkKKyAgICAgIGlmICghIF9kYnVzX2xpc3RfYXBwZW5kICgmYmFzZV9uYW1lcywgZGJ1c19zZXJ2aWNlX25hbWUpKQogICAgICAgICBnb3RvIG9vbTsKICAgICB9CiAgIGVsc2UgaWYgKHNlcnZpY2UgPT0gTlVMTCkKQEAgLTE2NDEsOCArMTYzNyw2IEBACiAgICAgICAgICAgdWlkID0gREJVU19VSURfVU5TRVQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBCVVNfRFJJVkVSX0ZPVU5EX0VSUk9SOgotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIH0KIApAQCAtMTcxMCw4ICsxNzA0LDYgQEAKICAgICAgICAgICBwaWQgPSBEQlVTX1BJRF9VTlNFVDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEJVU19EUklWRVJfRk9VTkRfRVJST1I6Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgZGVmYXVsdDoKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgfQogCkBAIC0xNzU5LDcgKzE3NTEsNyBAQAogICBEQnVzQ29ubmVjdGlvbiAqY29ubjsKICAgREJ1c01lc3NhZ2UgKnJlcGx5OwogICB2b2lkICpkYXRhID0gTlVMTDsKLSAgZGJ1c19pbnQzMl90IGRhdGFfc2l6ZTsKKyAgZGJ1c191aW50MzJfdCBkYXRhX3NpemU7CiAgIGNvbnN0IGNoYXIgKnNlcnZpY2U7CiAgIEJ1c0RyaXZlckZvdW5kIGZvdW5kOwogCkBAIC0xODM5LDkgKzE4MzEsOCBAQAogICBpZiAocmVwbHkgPT0gTlVMTCkKICAgICBnb3RvIG9vbTsKIAotICBpZiAoZm91bmQgPT0gQlVTX0RSSVZFUl9GT1VORF9TRUxGKQotICAgIGNvbnRleHQgPSBidXNfc2VsaW51eF9nZXRfc2VsZiAoKTsKLSAgZWxzZSBpZiAoZm91bmQgPT0gQlVTX0RSSVZFUl9GT1VORF9QRUVSKQorICAvKiBGSVhNRTogT2J0YWluIHRoZSBTRUxpbnV4IHNlY3VyaXR5IGNvbnRleHQgZm9yIHRoZSBidXMgZGFlbW9uIGl0c2VsZiAqLworICBpZiAoZm91bmQgPT0gQlVTX0RSSVZFUl9GT1VORF9QRUVSKQogICAgIGNvbnRleHQgPSBidXNfY29ubmVjdGlvbl9nZXRfc2VsaW51eF9pZCAoY29ubik7CiAgIGVsc2UKICAgICBjb250ZXh0ID0gTlVMTDsKQEAgLTE5MTAsOCArMTkwMSw2IEBACiAgICAgICAgICAgdWxvbmdfdWlkID0gREJVU19VSURfVU5TRVQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBCVVNfRFJJVkVSX0ZPVU5EX0VSUk9SOgotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIH0KIApAQCAtMjE4MywxMSArMjE3MiwxOCBAQAogCiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCisgIGlmICghYnVzX2RyaXZlcl9jaGVja19tZXNzYWdlX2lzX2Zvcl91cyAobWVzc2FnZSwgZXJyb3IpKQorICAgIGdvdG8gb3V0OworCiAgIGNvbnRleHQgPSBidXNfdHJhbnNhY3Rpb25fZ2V0X2NvbnRleHQgKHRyYW5zYWN0aW9uKTsKICAgYnVzdHlwZSA9IGNvbnRleHQgPyBidXNfY29udGV4dF9nZXRfdHlwZSAoY29udGV4dCkgOiBOVUxMOwogICBpZiAoIWJ1c19hcHBhcm1vcl9hbGxvd3NfZWF2ZXNkcm9wcGluZyAoY29ubmVjdGlvbiwgYnVzdHlwZSwgZXJyb3IpKQogICAgIGdvdG8gb3V0OwogCisgIGlmICghYnVzX2RyaXZlcl9jaGVja19jYWxsZXJfaXNfcHJpdmlsZWdlZCAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgZXJyb3IpKQorICAgIGdvdG8gb3V0OworCiAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChtZXNzYWdlLCBlcnJvciwKICAgICAgICAgREJVU19UWVBFX0FSUkFZLCBEQlVTX1RZUEVfU1RSSU5HLCAmbWF0Y2hfcnVsZXMsICZuX21hdGNoX3J1bGVzLAogICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCkBAIC0yMjQ2LDcgKzIyNDIsNyBAQAogICAvKiBTZW5kIHRoZSBhY2sgYmVmb3JlIHdlIHJlbW92ZSB0aGUgcnVsZSwgc2luY2UgdGhlIGFjayBpcyB1bmRvbmUKICAgICogb24gdHJhbnNhY3Rpb24gY2FuY2VsLCBidXQgYmVjb21pbmcgYSBtb25pdG9yIGlzbid0LgogICAgKi8KLSAgaWYgKCFidXNfZHJpdmVyX3NlbmRfYWNrX3JlcGx5IChjb25uZWN0aW9uLCB0cmFuc2FjdGlvbiwgbWVzc2FnZSwgZXJyb3IpKQorICBpZiAoIXNlbmRfYWNrX3JlcGx5IChjb25uZWN0aW9uLCB0cmFuc2FjdGlvbiwgbWVzc2FnZSwgZXJyb3IpKQogICAgIGdvdG8gb3V0OwogCiAgIGlmICghYnVzX2Nvbm5lY3Rpb25fYmVfbW9uaXRvciAoY29ubmVjdGlvbiwgdHJhbnNhY3Rpb24sICZydWxlcywgZXJyb3IpKQpAQCAtMjI3MSwxMDkgKzIyNjcsNiBAQAogICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgZGJ1c19ib29sX3QKLWJ1c19kcml2ZXJfaGFuZGxlX2dldF9tYWNoaW5lX2lkIChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICplcnJvcikKLXsKLSAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKLSAgREJ1c1N0cmluZyB1dWlkOwotICBjb25zdCBjaGFyICpzdHI7Ci0KLSAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnV1aWQpKQotICAgIHsKLSAgICAgIEJVU19TRVRfT09NIChlcnJvcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGlmICghX2RidXNfZ2V0X2xvY2FsX21hY2hpbmVfdXVpZF9lbmNvZGVkICgmdXVpZCwgZXJyb3IpKQotICAgIGdvdG8gZmFpbDsKLQotICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybiAobWVzc2FnZSk7Ci0KLSAgaWYgKHJlcGx5ID09IE5VTEwpCi0gICAgZ290byBvb207Ci0KLSAgc3RyID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmdXVpZCk7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKHJlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkKLSAgICBnb3RvIG9vbTsKLQotICBfZGJ1c19hc3NlcnQgKGRidXNfbWVzc2FnZV9oYXNfc2lnbmF0dXJlIChyZXBseSwgInMiKSk7Ci0KLSAgaWYgKCFidXNfdHJhbnNhY3Rpb25fc2VuZF9mcm9tX2RyaXZlciAodHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24sIHJlcGx5KSkKLSAgICBnb3RvIG9vbTsKLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJnV1aWQpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKLSAgcmV0dXJuIFRSVUU7Ci0KLW9vbToKLSAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7Ci0KLSAgQlVTX1NFVF9PT00gKGVycm9yKTsKLQotZmFpbDoKLSAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX1NFVCAoZXJyb3IpOwotCi0gIGlmIChyZXBseSAhPSBOVUxMKQotICAgIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOwotCi0gIF9kYnVzX3N0cmluZ19mcmVlICgmdXVpZCk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGRidXNfYm9vbF90Ci1idXNfZHJpdmVyX2hhbmRsZV9waW5nIChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEJ1c1RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICplcnJvcikKLXsKLSAgcmV0dXJuIGJ1c19kcml2ZXJfc2VuZF9hY2tfcmVwbHkgKGNvbm5lY3Rpb24sIHRyYW5zYWN0aW9uLCBtZXNzYWdlLCBlcnJvcik7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdCBidXNfZHJpdmVyX2hhbmRsZV9nZXQgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzVHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgKmVycm9yKTsKLQotc3RhdGljIGRidXNfYm9vbF90IGJ1c19kcml2ZXJfaGFuZGxlX2dldF9hbGwgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1c1RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgKmVycm9yKTsKLQotc3RhdGljIGRidXNfYm9vbF90IGJ1c19kcml2ZXJfaGFuZGxlX3NldCAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAqZXJyb3IpOwotCi1zdGF0aWMgZGJ1c19ib29sX3QgZmVhdHVyZXNfZ2V0dGVyIChCdXNDb250ZXh0ICAgICAgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKnZhcmlhbnRfaXRlcik7Ci1zdGF0aWMgZGJ1c19ib29sX3QgaW50ZXJmYWNlc19nZXR0ZXIgKEJ1c0NvbnRleHQgICAgICAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJpYW50X2l0ZXIpOwotCi10eXBlZGVmIGVudW0KLXsKLSAgLyogVmFyaW91cyBvbGRlciBtZXRob2RzIHdlcmUgYXZhaWxhYmxlIGF0IGV2ZXJ5IG9iamVjdCBwYXRoLiBXZSBoYXZlIHRvCi0gICAqIHByZXNlcnZlIHRoYXQgYmVoYXZpb3VyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHdlIGNhbiBhdCBsZWFzdAotICAgKiBzdG9wIGRvaW5nIHRoYXQgZm9yIG5ld2x5IGFkZGVkIG1ldGhvZHMuCi0gICAqIFRoZSBzcGVjaWFsIFBlZXIgaW50ZXJmYWNlIHNob3VsZCBhbHNvIHdvcmsgYXQgYW55IG9iamVjdCBwYXRoLgotICAgKiA8aHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMjU2PiAqLwotICBNRVRIT0RfRkxBR19BTllfUEFUSCA9ICgxIDw8IDApLAotCi0gIC8qIElmIHNldCwgY2FsbGVycyBtdXN0IGJlIHByaXZpbGVnZWQuIE9uIFVuaXgsIHRoZSB1aWQgb2YgdGhlIGNvbm5lY3Rpb24KLSAgICogbXVzdCBlaXRoZXIgYmUgdGhlIHVpZCBvZiB0aGlzIHByb2Nlc3MsIG9yIDAgKHJvb3QpLiBPbiBXaW5kb3dzLAotICAgKiB0aGUgU0lEIG9mIHRoZSBjb25uZWN0aW9uIG11c3QgYmUgdGhlIFNJRCBvZiB0aGlzIHByb2Nlc3MuICovCi0gIE1FVEhPRF9GTEFHX1BSSVZJTEVHRUQgPSAoMSA8PCAxKSwKLQotICBNRVRIT0RfRkxBR19OT05FID0gMAotfSBNZXRob2RGbGFnczsKLQogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgY29uc3QgY2hhciAqbmFtZTsKQEAgLTIzODMsMTcgKzIyNzYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzVHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2UgICAgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAqZXJyb3IpOwotICBNZXRob2RGbGFncyBmbGFnczsKIH0gTWVzc2FnZUhhbmRsZXI7CiAKLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGNvbnN0IGNoYXIgKnR5cGU7Ci0gIGRidXNfYm9vbF90ICgqIGdldHRlcikgKEJ1c0NvbnRleHQgICAgICAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJpYW50X2l0ZXIpOwotfSBQcm9wZXJ0eUhhbmRsZXI7Ci0KIC8qIEZvciBzcGVlZCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gc29ydCB0aGlzIGluIG9yZGVyIG9mCiAgKiBmcmVxdWVuY3kgb2YgdXNlIChidXQgZG9lc24ndCBtYXR0ZXIgd2l0aCBvbmx5IGEgZmV3IGl0ZW1zCiAgKiBhbnlob3cpCkBAIC0yNDAyLDE3OCArMjI4NiwxMTQgQEAKICAgeyAiSGVsbG8iLAogICAgICIiLAogICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLAotICAgIGJ1c19kcml2ZXJfaGFuZGxlX2hlbGxvLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfaGVsbG8gfSwKICAgeyAiUmVxdWVzdE5hbWUiLAogICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HIERCVVNfVFlQRV9VSU5UMzJfQVNfU1RSSU5HLAogICAgIERCVVNfVFlQRV9VSU5UMzJfQVNfU1RSSU5HLAotICAgIGJ1c19kcml2ZXJfaGFuZGxlX2FjcXVpcmVfc2VydmljZSwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX2FjcXVpcmVfc2VydmljZSB9LAogICB7ICJSZWxlYXNlTmFtZSIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCiAgICAgREJVU19UWVBFX1VJTlQzMl9BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfcmVsZWFzZV9zZXJ2aWNlLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfcmVsZWFzZV9zZXJ2aWNlIH0sCiAgIHsgIlN0YXJ0U2VydmljZUJ5TmFtZSIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcgREJVU19UWVBFX1VJTlQzMl9BU19TVFJJTkcsCiAgICAgREJVU19UWVBFX1VJTlQzMl9BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfYWN0aXZhdGVfc2VydmljZSwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX2FjdGl2YXRlX3NlcnZpY2UgfSwKICAgeyAiVXBkYXRlQWN0aXZhdGlvbkVudmlyb25tZW50IiwKICAgICBEQlVTX1RZUEVfQVJSQVlfQVNfU1RSSU5HIERCVVNfRElDVF9FTlRSWV9CRUdJTl9DSEFSX0FTX1NUUklORyBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORyBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORyBEQlVTX0RJQ1RfRU5UUllfRU5EX0NIQVJfQVNfU1RSSU5HLAogICAgICIiLAotICAgIGJ1c19kcml2ZXJfaGFuZGxlX3VwZGF0ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50LAotICAgIE1FVEhPRF9GTEFHX1BSSVZJTEVHRUQgfSwKKyAgICBidXNfZHJpdmVyX2hhbmRsZV91cGRhdGVfYWN0aXZhdGlvbl9lbnZpcm9ubWVudCB9LAogICB7ICJOYW1lSGFzT3duZXIiLAogICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLAogICAgIERCVVNfVFlQRV9CT09MRUFOX0FTX1NUUklORywKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9zZXJ2aWNlX2V4aXN0cywKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX3NlcnZpY2VfZXhpc3RzIH0sCiAgIHsgIkxpc3ROYW1lcyIsCiAgICAgIiIsCiAgICAgREJVU19UWVBFX0FSUkFZX0FTX1NUUklORyBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9saXN0X3NlcnZpY2VzLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfbGlzdF9zZXJ2aWNlcyB9LAogICB7ICJMaXN0QWN0aXZhdGFibGVOYW1lcyIsCiAgICAgIiIsCiAgICAgREJVU19UWVBFX0FSUkFZX0FTX1NUUklORyBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9saXN0X2FjdGl2YXRhYmxlX3NlcnZpY2VzLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfbGlzdF9hY3RpdmF0YWJsZV9zZXJ2aWNlcyB9LAogICB7ICJBZGRNYXRjaCIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCiAgICAgIiIsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfYWRkX21hdGNoLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfYWRkX21hdGNoIH0sCiAgIHsgIlJlbW92ZU1hdGNoIiwKICAgICBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKICAgICAiIiwKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9yZW1vdmVfbWF0Y2gsCi0gICAgTUVUSE9EX0ZMQUdfQU5ZX1BBVEggfSwKKyAgICBidXNfZHJpdmVyX2hhbmRsZV9yZW1vdmVfbWF0Y2ggfSwKICAgeyAiR2V0TmFtZU93bmVyIiwKICAgICBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKICAgICBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9nZXRfc2VydmljZV9vd25lciwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX2dldF9zZXJ2aWNlX293bmVyIH0sCiAgIHsgIkxpc3RRdWV1ZWRPd25lcnMiLAogICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLAogICAgIERCVVNfVFlQRV9BUlJBWV9BU19TVFJJTkcgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfbGlzdF9xdWV1ZWRfb3duZXJzLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfbGlzdF9xdWV1ZWRfb3duZXJzIH0sCiAgIHsgIkdldENvbm5lY3Rpb25Vbml4VXNlciIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCiAgICAgREJVU19UWVBFX1VJTlQzMl9BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2Nvbm5lY3Rpb25fdW5peF91c2VyLAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2Nvbm5lY3Rpb25fdW5peF91c2VyIH0sCiAgIHsgIkdldENvbm5lY3Rpb25Vbml4UHJvY2Vzc0lEIiwKICAgICBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKICAgICBEQlVTX1RZUEVfVUlOVDMyX0FTX1NUUklORywKLSAgICBidXNfZHJpdmVyX2hhbmRsZV9nZXRfY29ubmVjdGlvbl91bml4X3Byb2Nlc3NfaWQsCi0gICAgTUVUSE9EX0ZMQUdfQU5ZX1BBVEggfSwKKyAgICBidXNfZHJpdmVyX2hhbmRsZV9nZXRfY29ubmVjdGlvbl91bml4X3Byb2Nlc3NfaWQgfSwKICAgeyAiR2V0QWR0QXVkaXRTZXNzaW9uRGF0YSIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCiAgICAgREJVU19UWVBFX0FSUkFZX0FTX1NUUklORyBEQlVTX1RZUEVfQllURV9BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2FkdF9hdWRpdF9zZXNzaW9uX2RhdGEsCi0gICAgTUVUSE9EX0ZMQUdfQU5ZX1BBVEggfSwKKyAgICBidXNfZHJpdmVyX2hhbmRsZV9nZXRfYWR0X2F1ZGl0X3Nlc3Npb25fZGF0YSB9LAogICB7ICJHZXRDb25uZWN0aW9uU0VMaW51eFNlY3VyaXR5Q29udGV4dCIsCiAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsCiAgICAgREJVU19UWVBFX0FSUkFZX0FTX1NUUklORyBEQlVTX1RZUEVfQllURV9BU19TVFJJTkcsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2Nvbm5lY3Rpb25fc2VsaW51eF9zZWN1cml0eV9jb250ZXh0LAotICAgIE1FVEhPRF9GTEFHX0FOWV9QQVRIIH0sCisgICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2Nvbm5lY3Rpb25fc2VsaW51eF9zZWN1cml0eV9jb250ZXh0IH0sCiAgIHsgIlJlbG9hZENvbmZpZyIsCiAgICAgIiIsCiAgICAgIiIsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfcmVsb2FkX2NvbmZpZywKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX3JlbG9hZF9jb25maWcgfSwKICAgeyAiR2V0SWQiLAogICAgICIiLAogICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLAotICAgIGJ1c19kcml2ZXJfaGFuZGxlX2dldF9pZCwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICAgIGJ1c19kcml2ZXJfaGFuZGxlX2dldF9pZCB9LAogICB7ICJHZXRDb25uZWN0aW9uQ3JlZGVudGlhbHMiLCAicyIsICJhe3N2fSIsCi0gICAgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2Nvbm5lY3Rpb25fY3JlZGVudGlhbHMsCi0gICAgTUVUSE9EX0ZMQUdfQU5ZX1BBVEggfSwKKyAgICBidXNfZHJpdmVyX2hhbmRsZV9nZXRfY29ubmVjdGlvbl9jcmVkZW50aWFscyB9LAogICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQogfTsKIAotc3RhdGljIGNvbnN0IFByb3BlcnR5SGFuZGxlciBkYnVzX3Byb3BlcnR5X2hhbmRsZXJzW10gPSB7Ci0gIHsgIkZlYXR1cmVzIiwgImFzIiwgZmVhdHVyZXNfZ2V0dGVyIH0sCi0gIHsgIkludGVyZmFjZXMiLCAiYXMiLCBpbnRlcmZhY2VzX2dldHRlciB9LAotICB7IE5VTEwsIE5VTEwsIE5VTEwgfQotfTsKLQogc3RhdGljIGRidXNfYm9vbF90IGJ1c19kcml2ZXJfaGFuZGxlX2ludHJvc3BlY3QgKERCdXNDb25uZWN0aW9uICosCiAgICAgQnVzVHJhbnNhY3Rpb24gKiwgREJ1c01lc3NhZ2UgKiwgREJ1c0Vycm9yICopOwogCi1zdGF0aWMgY29uc3QgTWVzc2FnZUhhbmRsZXIgcHJvcGVydGllc19tZXNzYWdlX2hhbmRsZXJzW10gPSB7Ci0gIHsgIkdldCIsICJzcyIsICJ2IiwgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0LCBNRVRIT0RfRkxBR19OT05FIH0sCi0gIHsgIkdldEFsbCIsICJzIiwgImF7c3Z9IiwgYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2FsbCwgTUVUSE9EX0ZMQUdfTk9ORSB9LAotICB7ICJTZXQiLCAic3N2IiwgIiIsIGJ1c19kcml2ZXJfaGFuZGxlX3NldCwgTUVUSE9EX0ZMQUdfTk9ORSB9LAotICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQotfTsKLQogc3RhdGljIGNvbnN0IE1lc3NhZ2VIYW5kbGVyIGludHJvc3BlY3RhYmxlX21lc3NhZ2VfaGFuZGxlcnNbXSA9IHsKLSAgeyAiSW50cm9zcGVjdCIsICIiLCBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywgYnVzX2RyaXZlcl9oYW5kbGVfaW50cm9zcGVjdCwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAorICB7ICJJbnRyb3NwZWN0IiwgIiIsIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLCBidXNfZHJpdmVyX2hhbmRsZV9pbnRyb3NwZWN0IH0sCiAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9CiB9OwogCiBzdGF0aWMgY29uc3QgTWVzc2FnZUhhbmRsZXIgbW9uaXRvcmluZ19tZXNzYWdlX2hhbmRsZXJzW10gPSB7Ci0gIHsgIkJlY29tZU1vbml0b3IiLCAiYXN1IiwgIiIsIGJ1c19kcml2ZXJfaGFuZGxlX2JlY29tZV9tb25pdG9yLAotICAgIE1FVEhPRF9GTEFHX1BSSVZJTEVHRUQgfSwKKyAgeyAiQmVjb21lTW9uaXRvciIsICJhc3UiLCAiIiwgYnVzX2RyaXZlcl9oYW5kbGVfYmVjb21lX21vbml0b3IgfSwKICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKICNpZmRlZiBEQlVTX0VOQUJMRV9WRVJCT1NFX01PREUKIHN0YXRpYyBjb25zdCBNZXNzYWdlSGFuZGxlciB2ZXJib3NlX21lc3NhZ2VfaGFuZGxlcnNbXSA9IHsKLSAgeyAiRW5hYmxlVmVyYm9zZSIsICIiLCAiIiwgYnVzX2RyaXZlcl9oYW5kbGVfZW5hYmxlX3ZlcmJvc2UsCi0gICAgTUVUSE9EX0ZMQUdfTk9ORSB9LAotICB7ICJEaXNhYmxlVmVyYm9zZSIsICIiLCAiIiwgYnVzX2RyaXZlcl9oYW5kbGVfZGlzYWJsZV92ZXJib3NlLAotICAgIE1FVEhPRF9GTEFHX05PTkUgfSwKKyAgeyAiRW5hYmxlVmVyYm9zZSIsICIiLCAiIiwgYnVzX2RyaXZlcl9oYW5kbGVfZW5hYmxlX3ZlcmJvc2V9LAorICB7ICJEaXNhYmxlVmVyYm9zZSIsICIiLCAiIiwgYnVzX2RyaXZlcl9oYW5kbGVfZGlzYWJsZV92ZXJib3NlfSwKICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAjZW5kaWYKIAogI2lmZGVmIERCVVNfRU5BQkxFX1NUQVRTCiBzdGF0aWMgY29uc3QgTWVzc2FnZUhhbmRsZXIgc3RhdHNfbWVzc2FnZV9oYW5kbGVyc1tdID0gewotICB7ICJHZXRTdGF0cyIsICIiLCAiYXtzdn0iLCBidXNfc3RhdHNfaGFuZGxlX2dldF9zdGF0cywKLSAgICBNRVRIT0RfRkxBR19OT05FIH0sCi0gIHsgIkdldENvbm5lY3Rpb25TdGF0cyIsICJzIiwgImF7c3Z9IiwgYnVzX3N0YXRzX2hhbmRsZV9nZXRfY29ubmVjdGlvbl9zdGF0cywKLSAgICBNRVRIT0RfRkxBR19OT05FIH0sCi0gIHsgIkdldEFsbE1hdGNoUnVsZXMiLCAiIiwgImF7c2FzfSIsIGJ1c19zdGF0c19oYW5kbGVfZ2V0X2FsbF9tYXRjaF9ydWxlcywKLSAgICBNRVRIT0RfRkxBR19OT05FIH0sCisgIHsgIkdldFN0YXRzIiwgIiIsICJhe3N2fSIsIGJ1c19zdGF0c19oYW5kbGVfZ2V0X3N0YXRzIH0sCisgIHsgIkdldENvbm5lY3Rpb25TdGF0cyIsICJzIiwgImF7c3Z9IiwgYnVzX3N0YXRzX2hhbmRsZV9nZXRfY29ubmVjdGlvbl9zdGF0cyB9LAorICB7ICJHZXRBbGxNYXRjaFJ1bGVzIiwgIiIsICJhe3Nhc30iLCBidXNfc3RhdHNfaGFuZGxlX2dldF9hbGxfbWF0Y2hfcnVsZXMgfSwKICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IE1lc3NhZ2VIYW5kbGVyIHBlZXJfbWVzc2FnZV9oYW5kbGVyc1tdID0gewotICB7ICJHZXRNYWNoaW5lSWQiLCAiIiwgInMiLCBidXNfZHJpdmVyX2hhbmRsZV9nZXRfbWFjaGluZV9pZCwKLSAgICBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAotICB7ICJQaW5nIiwgIiIsICIiLCBidXNfZHJpdmVyX2hhbmRsZV9waW5nLCBNRVRIT0RfRkxBR19BTllfUEFUSCB9LAotICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQotfTsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIC8qIFZhcmlvdXMgb2xkZXIgaW50ZXJmYWNlcyB3ZXJlIGF2YWlsYWJsZSBhdCBldmVyeSBvYmplY3QgcGF0aC4gV2UgaGF2ZSB0bwotICAgKiBwcmVzZXJ2ZSB0aGF0IGJlaGF2aW91ciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCB3ZSBjYW4gYXQgbGVhc3QKLSAgICogc3RvcCBkb2luZyB0aGF0IGZvciBuZXdseSBhZGRlZCBpbnRlcmZhY2VzOgotICAgKiA8aHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMjU2PgotICAgKiBJbnRyb3NwZWN0YWJsZSBhbmQgUGVlciBhcmUgYWxzbyB1c2VmdWwgYXQgYWxsIG9iamVjdCBwYXRocy4gKi8KLSAgSU5URVJGQUNFX0ZMQUdfQU5ZX1BBVEggPSAoMSA8PCAwKSwKLQotICAvKiBTZXQgdGhpcyBmbGFnIGZvciBpbnRlcmZhY2VzIHRoYXQgc2hvdWxkIG5vdCBzaG93IHVwIGluIHRoZQotICAgKiBJbnRlcmZhY2VzIHByb3BlcnR5LiAqLwotICBJTlRFUkZBQ0VfRkxBR19VTklOVEVSRVNUSU5HID0gKDEgPDwgMSksCi0KLSAgSU5URVJGQUNFX0ZMQUdfTk9ORSA9IDAKLX0gSW50ZXJmYWNlRmxhZ3M7Ci0KIHR5cGVkZWYgc3RydWN0IHsKICAgY29uc3QgY2hhciAqbmFtZTsKICAgY29uc3QgTWVzc2FnZUhhbmRsZXIgKm1lc3NhZ2VfaGFuZGxlcnM7CiAgIGNvbnN0IGNoYXIgKmV4dHJhX2ludHJvc3BlY3Rpb247Ci0gIEludGVyZmFjZUZsYWdzIGZsYWdzOwotICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIgKnByb3BlcnR5X2hhbmRsZXJzOwogfSBJbnRlcmZhY2VIYW5kbGVyOwogCiAvKiBUaGVzZSBzaG91bGQgaWRlYWxseSBiZSBzb3J0ZWQgYnkgZnJlcXVlbmN5IG9mIHVzZSwgYWx0aG91Z2ggaXQKQEAgLTI1OTAsNDIgKzI0MTAsMTUgQEAKICAgICAiICAgIDwvc2lnbmFsPlxuIgogICAgICIgICAgPHNpZ25hbCBuYW1lPVwiTmFtZUFjcXVpcmVkXCI+XG4iCiAgICAgIiAgICAgIDxhcmcgdHlwZT1cInNcIi8+XG4iCi0gICAgIiAgICA8L3NpZ25hbD5cbiIsCi0gICAgLyogTm90IGluIHRoZSBJbnRlcmZhY2VzIHByb3BlcnR5IGJlY2F1c2UgaWYgeW91IGNhbiBnZXQgdGhlIHByb3BlcnRpZXMKLSAgICAgKiBvZiB0aGUgby5mZC5EQnVzIGludGVyZmFjZSwgdGhlbiB5b3UgY2VydGFpbmx5IGhhdmUgdGhlIG8uZmQuREJ1cwotICAgICAqIGludGVyZmFjZSwgc28gdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIGxpc3RpbmcgaXQgZXhwbGljaXRseS4KLSAgICAgKiBQYXJ0aWFsbHkgYXZhaWxhYmxlIGF0IGFsbCBwYXRocyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCi0gICAgSU5URVJGQUNFX0ZMQUdfQU5ZX1BBVEggfCBJTlRFUkZBQ0VfRkxBR19VTklOVEVSRVNUSU5HLAotICAgIGRidXNfcHJvcGVydHlfaGFuZGxlcnMgfSwKLSAgeyBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCBwcm9wZXJ0aWVzX21lc3NhZ2VfaGFuZGxlcnMsCi0gICAgIiAgICA8c2lnbmFsIG5hbWU9XCJQcm9wZXJ0aWVzQ2hhbmdlZFwiPlxuIgotICAgICIgICAgICA8YXJnIHR5cGU9XCJzXCIgbmFtZT1cImludGVyZmFjZV9uYW1lXCIvPlxuIgotICAgICIgICAgICA8YXJnIHR5cGU9XCJhe3N2fVwiIG5hbWU9XCJjaGFuZ2VkX3Byb3BlcnRpZXNcIi8+XG4iCi0gICAgIiAgICAgIDxhcmcgdHlwZT1cImFzXCIgbmFtZT1cImludmFsaWRhdGVkX3Byb3BlcnRpZXNcIi8+XG4iCi0gICAgIiAgICA8L3NpZ25hbD5cbiIsCi0gICAgLyogTm90IGluIHRoZSBJbnRlcmZhY2VzIHByb3BlcnR5IGJlY2F1c2UgaWYgeW91IGNhbiBnZXQgdGhlIHByb3BlcnRpZXMKLSAgICAgKiBvZiB0aGUgby5mZC5EQnVzIGludGVyZmFjZSwgdGhlbiB5b3UgY2VydGFpbmx5IGhhdmUgUHJvcGVydGllcy4gKi8KLSAgICBJTlRFUkZBQ0VfRkxBR19VTklOVEVSRVNUSU5HIH0sCi0gIHsgREJVU19JTlRFUkZBQ0VfSU5UUk9TUEVDVEFCTEUsIGludHJvc3BlY3RhYmxlX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwsCi0gICAgLyogTm90IGluIHRoZSBJbnRlcmZhY2VzIHByb3BlcnR5IGJlY2F1c2UgaW50cm9zcGVjdGlvbiBpc24ndCByZWFsbHkgYQotICAgICAqIGZlYXR1cmUgaW4gdGhlIHNhbWUgd2F5IGFzIGUuZy4gTW9uaXRvcmluZy4KLSAgICAgKiBBdmFpbGFibGUgYXQgYWxsIHBhdGhzIHNvIHRvb2xzIGxpa2UgZC1mZWV0IGNhbiBzdGFydCBmcm9tICIvIi4gKi8KLSAgICBJTlRFUkZBQ0VfRkxBR19BTllfUEFUSCB8IElOVEVSRkFDRV9GTEFHX1VOSU5URVJFU1RJTkcgfSwKLSAgeyBEQlVTX0lOVEVSRkFDRV9NT05JVE9SSU5HLCBtb25pdG9yaW5nX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwsCi0gICAgSU5URVJGQUNFX0ZMQUdfTk9ORSB9LAorICAgICIgICAgPC9zaWduYWw+XG4iIH0sCisgIHsgREJVU19JTlRFUkZBQ0VfSU5UUk9TUEVDVEFCTEUsIGludHJvc3BlY3RhYmxlX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwgfSwKKyAgeyBEQlVTX0lOVEVSRkFDRV9NT05JVE9SSU5HLCBtb25pdG9yaW5nX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwgfSwKICNpZmRlZiBEQlVTX0VOQUJMRV9WRVJCT1NFX01PREUKLSAgeyBEQlVTX0lOVEVSRkFDRV9WRVJCT1NFLCB2ZXJib3NlX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwsCi0gICAgSU5URVJGQUNFX0ZMQUdfTk9ORSB9LAorICB7IERCVVNfSU5URVJGQUNFX1ZFUkJPU0UsIHZlcmJvc2VfbWVzc2FnZV9oYW5kbGVycywgTlVMTCB9LAogI2VuZGlmCiAjaWZkZWYgREJVU19FTkFCTEVfU1RBVFMKLSAgeyBCVVNfSU5URVJGQUNFX1NUQVRTLCBzdGF0c19tZXNzYWdlX2hhbmRsZXJzLCBOVUxMLAotICAgIElOVEVSRkFDRV9GTEFHX05PTkUgfSwKKyAgeyBCVVNfSU5URVJGQUNFX1NUQVRTLCBzdGF0c19tZXNzYWdlX2hhbmRsZXJzLCBOVUxMIH0sCiAjZW5kaWYKLSAgeyBEQlVTX0lOVEVSRkFDRV9QRUVSLCBwZWVyX21lc3NhZ2VfaGFuZGxlcnMsIE5VTEwsCi0gICAgLyogTm90IGluIHRoZSBJbnRlcmZhY2VzIHByb3BlcnR5IGJlY2F1c2UgaXQncyBhIHBzZXVkby1pbnRlcmZhY2UKLSAgICAgKiBvbiBhbGwgb2JqZWN0IHBhdGhzIG9mIGFsbCBjb25uZWN0aW9ucywgcmF0aGVyIHRoYW4gYSBmZWF0dXJlIG9mIHRoZQotICAgICAqIGJ1cyBkcml2ZXIgb2JqZWN0LiAqLwotICAgIElOVEVSRkFDRV9GTEFHX0FOWV9QQVRIIHwgSU5URVJGQUNFX0ZMQUdfVU5JTlRFUkVTVElORyB9LAogICB7IE5VTEwsIE5VTEwsIE5VTEwgfQogfTsKIApAQCAtMjY2NSwxMyArMjQ1OCwxMCBAQAogfQogCiBkYnVzX2Jvb2xfdAotYnVzX2RyaXZlcl9nZW5lcmF0ZV9pbnRyb3NwZWN0X3N0cmluZyAoREJ1c1N0cmluZyAqeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgaXNfY2Fub25pY2FsX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSkKK2J1c19kcml2ZXJfZ2VuZXJhdGVfaW50cm9zcGVjdF9zdHJpbmcgKERCdXNTdHJpbmcgKnhtbCkKIHsKICAgY29uc3QgSW50ZXJmYWNlSGFuZGxlciAqaWg7CiAgIGNvbnN0IE1lc3NhZ2VIYW5kbGVyICptaDsKLSAgY29uc3QgUHJvcGVydHlIYW5kbGVyICpwaDsKIAogICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKHhtbCwgREJVU19JTlRST1NQRUNUXzFfMF9YTUxfRE9DVFlQRV9ERUNMX05PREUpKQogICAgIHJldHVybiBGQUxTRTsKQEAgLTI2ODAsOSArMjQ3MCw2IEBACiAKICAgZm9yIChpaCA9IGludGVyZmFjZV9oYW5kbGVyczsgaWgtPm5hbWUgIT0gTlVMTDsgaWgrKykKICAgICB7Ci0gICAgICBpZiAoIShpc19jYW5vbmljYWxfcGF0aCB8fCAoaWgtPmZsYWdzICYgSU5URVJGQUNFX0ZMQUdfQU5ZX1BBVEgpKSkKLSAgICAgICAgY29udGludWU7Ci0KICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbCwgIiAgPGludGVyZmFjZSBuYW1lPVwiJXNcIj5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaC0+bmFtZSkpCiAgICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTI3MDMsMjAgKzI0OTAsNiBAQAogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAKLSAgICAgIGZvciAocGggPSBpaC0+cHJvcGVydHlfaGFuZGxlcnM7IHBoICE9IE5VTEwgJiYgcGgtPm5hbWUgIT0gTlVMTDsgcGgrKykKLSAgICAgICAgewotICAgICAgICAgIC8qIFdlIG9ubHkgaGF2ZSBjb25zdGFudCBwcm9wZXJ0aWVzIHNvIGZhciwgc28gaGFyZC1jb2RlIHRoYXQgYml0ICovCi0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgPHByb3BlcnR5IG5hbWU9XCIlc1wiIHR5cGU9XCIlc1wiIGFjY2Vzcz1cInJlYWRcIj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGgtPm5hbWUsIHBoLT50eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIDxhbm5vdGF0aW9uIG5hbWU9XCJvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0eS5FbWl0c0NoYW5nZWRTaWduYWxcIiB2YWx1ZT1cImNvbnN0XCIvPlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICA8L3Byb3BlcnR5PlxuIikpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQogICAgICAgaWYgKGloLT5leHRyYV9pbnRyb3NwZWN0aW9uICE9IE5VTEwgJiYKICAgICAgICAgICAhX2RidXNfc3RyaW5nX2FwcGVuZCAoeG1sLCBpaC0+ZXh0cmFfaW50cm9zcGVjdGlvbikpCiAgICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTI3MjUsMjggKzI0OTgsNiBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIGlmIChtZXNzYWdlICE9IE5VTEwpCi0gICAgewotICAgICAgLyogTWFrZSB0aGUgYnVzIGRyaXZlciBvYmplY3QgcGF0aCBkaXNjb3ZlcmFibGUgKi8KLSAgICAgIGlmIChkYnVzX21lc3NhZ2VfaGFzX3BhdGggKG1lc3NhZ2UsICIvIikpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKHhtbCwKLSAgICAgICAgICAgICAgICAiICA8bm9kZSBuYW1lPVwib3JnL2ZyZWVkZXNrdG9wL0RCdXNcIi8+XG4iKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2hhc19wYXRoIChtZXNzYWdlLCAiL29yZyIpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICh4bWwsCi0gICAgICAgICAgICAgICAgIiAgPG5vZGUgbmFtZT1cImZyZWVkZXNrdG9wL0RCdXNcIi8+XG4iKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2hhc19wYXRoIChtZXNzYWdlLCAiL29yZy9mcmVlZGVza3RvcCIpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICh4bWwsICIgIDxub2RlIG5hbWU9XCJEQnVzXCIvPlxuIikpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICh4bWwsICI8L25vZGU+XG4iKSkKICAgICByZXR1cm4gRkFMU0U7CiAKQEAgLTI3NjIsNyArMjUxMyw2IEBACiAgIERCdXNTdHJpbmcgeG1sOwogICBEQnVzTWVzc2FnZSAqcmVwbHk7CiAgIGNvbnN0IGNoYXIgKnZfU1RSSU5HOwotICBkYnVzX2Jvb2xfdCBpc19jYW5vbmljYWxfcGF0aDsKIAogICBfZGJ1c192ZXJib3NlICgiSW50cm9zcGVjdCgpIG9uIGJ1cyBkcml2ZXJcbiIpOwogCkBAIC0yNzgzLDkgKzI1MzMsNyBAQAogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICBpc19jYW5vbmljYWxfcGF0aCA9IGRidXNfbWVzc2FnZV9oYXNfcGF0aCAobWVzc2FnZSwgREJVU19QQVRIX0RCVVMpOwotCi0gIGlmICghYnVzX2RyaXZlcl9nZW5lcmF0ZV9pbnRyb3NwZWN0X3N0cmluZyAoJnhtbCwgaXNfY2Fub25pY2FsX3BhdGgsIG1lc3NhZ2UpKQorICBpZiAoIWJ1c19kcml2ZXJfZ2VuZXJhdGVfaW50cm9zcGVjdF9zdHJpbmcgKCZ4bWwpKQogICAgIGdvdG8gb29tOwogCiAgIHZfU1RSSU5HID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmeG1sKTsKQEAgLTI4MTgsNiArMjU2NiwzOCBAQAogICByZXR1cm4gRkFMU0U7CiB9CiAKKy8qCisgKiBTZXQgQGVycm9yIGFuZCByZXR1cm4gRkFMU0UgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IGRpcmVjdGVkIHRvIHRoZQorICogZGJ1cy1kYWVtb24gYnkgaXRzIGNhbm9uaWNhbCBvYmplY3QgcGF0aC4gVGhpcyBpcyBoYXJkZW5pbmcgYWdhaW5zdAorICogc3lzdGVtIHNlcnZpY2VzIHdpdGggcG9vcmx5LXdyaXR0ZW4gc2VjdXJpdHkgcG9saWN5IGZpbGVzLCB3aGljaAorICogbWlnaHQgYWxsb3cgc2VuZGluZyBkYW5nZXJvdXNseSBicm9hZCBlcXVpdmFsZW5jZSBjbGFzc2VzIG9mIG1lc3NhZ2VzCisgKiBzdWNoIGFzICJhbnl0aGluZyB3aXRoIHRoaXMgYXNzdW1lZC10by1iZS1zYWZlIG9iamVjdCBwYXRoIi4KKyAqCisgKiBkYnVzLWRhZW1vbiBpcyB1bnVzdWFsIGluIHRoYXQgaXQgbm9ybWFsbHkgaWdub3JlcyB0aGUgb2JqZWN0IHBhdGgKKyAqIG9mIGluY29taW5nIG1lc3NhZ2VzOyB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBiZWhhdmlvdXIgZm9yIHRoZSAicmVhZCIKKyAqIHJlYWQtb25seSBtZXRob2QgY2FsbHMgbGlrZSBHZXRDb25uZWN0aW9uVW5peFVzZXIgZm9yIGJhY2t3YXJkcworICogY29tcGF0aWJpbGl0eSwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGJlIG1vcmUgcmVzdHJpY3RpdmUgZm9yIHRoaW5ncworICogaW50ZW5kZWQgdG8gYmUgcm9vdC1vbmx5IG9yIHByaXZpbGVnZWQtZGV2ZWxvcGVycy1vbmx5LgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIG90aGVyIHN5c3RlbSBzZXJ2aWNlcyB3aXRoIHRoZSBzYW1lCisgKiBxdWlyayBhcyBkYnVzLWRhZW1vbi4KKyAqLworZGJ1c19ib29sX3QKK2J1c19kcml2ZXJfY2hlY2tfbWVzc2FnZV9pc19mb3JfdXMgKERCdXNNZXNzYWdlICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgKmVycm9yKQoreworICBpZiAoIWRidXNfbWVzc2FnZV9oYXNfcGF0aCAobWVzc2FnZSwgREJVU19QQVRIX0RCVVMpKQorICAgIHsKKyAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVELAorICAgICAgICAgICJNZXRob2QgJyVzJyBpcyBvbmx5IGF2YWlsYWJsZSBhdCB0aGUgY2Fub25pY2FsIG9iamVjdCBwYXRoICclcyciLAorICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyIChtZXNzYWdlKSwgREJVU19QQVRIX0RCVVMpOworCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIHJldHVybiBUUlVFOworfQorCiBkYnVzX2Jvb2xfdAogYnVzX2RyaXZlcl9oYW5kbGVfbWVzc2FnZSAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCkBAIC0yODI4LDcgKzI2MDgsNiBAQAogICBjb25zdCBJbnRlcmZhY2VIYW5kbGVyICppaDsKICAgY29uc3QgTWVzc2FnZUhhbmRsZXIgKm1oOwogICBkYnVzX2Jvb2xfdCBmb3VuZF9pbnRlcmZhY2UgPSBGQUxTRTsKLSAgZGJ1c19ib29sX3QgaXNfY2Fub25pY2FsX3BhdGg7CiAKICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CiAKQEAgLTI4OTQsMTMgKzI2NzMsOCBAQAogICBfZGJ1c19hc3NlcnQgKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtZXNzYWdlKSAhPSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgc3RyY21wIChuYW1lLCAiSGVsbG8iKSA9PSAwKTsKIAotICBpc19jYW5vbmljYWxfcGF0aCA9IGRidXNfbWVzc2FnZV9oYXNfcGF0aCAobWVzc2FnZSwgREJVU19QQVRIX0RCVVMpOwotCiAgIGZvciAoaWggPSBpbnRlcmZhY2VfaGFuZGxlcnM7IGloLT5uYW1lICE9IE5VTEw7IGloKyspCiAgICAgewotICAgICAgaWYgKCEoaXNfY2Fub25pY2FsX3BhdGggfHwgKGloLT5mbGFncyAmIElOVEVSRkFDRV9GTEFHX0FOWV9QQVRIKSkpCi0gICAgICAgIGNvbnRpbnVlOwotCiAgICAgICBpZiAoaW50ZXJmYWNlICE9IE5VTEwgJiYgc3RyY21wIChpbnRlcmZhY2UsIGloLT5uYW1lKSAhPSAwKQogICAgICAgICBjb250aW51ZTsKIApAQCAtMjkxMywyNCArMjY4Nyw2IEBACiAKICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiRm91bmQgZHJpdmVyIGhhbmRsZXIgZm9yICVzXG4iLCBuYW1lKTsKIAotICAgICAgICAgIGlmICgobWgtPmZsYWdzICYgTUVUSE9EX0ZMQUdfUFJJVklMRUdFRCkgJiYKLSAgICAgICAgICAgICAgIWJ1c19kcml2ZXJfY2hlY2tfY2FsbGVyX2lzX3ByaXZpbGVnZWQgKGNvbm5lY3Rpb24sIHRyYW5zYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgZXJyb3IpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7Ci0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghKGlzX2Nhbm9uaWNhbF9wYXRoIHx8IChtaC0+ZmxhZ3MgJiBNRVRIT0RfRkxBR19BTllfUEFUSCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKLSAgICAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0FDQ0VTU19ERU5JRUQsCi0gICAgICAgICAgICAgICAgICAiTWV0aG9kICclcycgaXMgb25seSBhdmFpbGFibGUgYXQgdGhlIGNhbm9uaWNhbCBvYmplY3QgcGF0aCAnJXMnIiwKLSAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyIChtZXNzYWdlKSwgREJVU19QQVRIX0RCVVMpOwotICAgICAgICAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7Ci0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2hhc19zaWduYXR1cmUgKG1lc3NhZ2UsIG1oLT5pbl9hcmdzKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CkBAIC0yOTc4LDI5OCArMjczNCwzIEBACiAgICAqIHdpdGggdGhlIGJ1cyBkcml2ZXIuCiAgICAqLwogfQotCi1zdGF0aWMgZGJ1c19ib29sX3QKLWZlYXR1cmVzX2dldHRlciAoQnVzQ29udGV4dCAgICAgICpjb250ZXh0LAotICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKnZhcmlhbnRfaXRlcikKLXsKLSAgREJ1c01lc3NhZ2VJdGVyIGFycl9pdGVyOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKHZhcmlhbnRfaXRlciwgREJVU19UWVBFX0FSUkFZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycl9pdGVyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGJ1c19hcHBhcm1vcl9lbmFibGVkICgpKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKnMgPSAiQXBwQXJtb3IiOwotCi0gICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJmFycl9pdGVyLCBEQlVTX1RZUEVfU1RSSU5HLCAmcykpCi0gICAgICAgIGdvdG8gYWJhbmRvbjsKLSAgICB9Ci0KLSAgaWYgKGJ1c19zZWxpbnV4X2VuYWJsZWQgKCkpCi0gICAgewotICAgICAgY29uc3QgY2hhciAqcyA9ICJTRUxpbnV4IjsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZhcnJfaXRlciwgREJVU19UWVBFX1NUUklORywgJnMpKQotICAgICAgICBnb3RvIGFiYW5kb247Ci0gICAgfQotCi0gIGlmIChidXNfY29udGV4dF9nZXRfc3lzdGVtZF9hY3RpdmF0aW9uIChjb250ZXh0KSkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICpzID0gIlN5c3RlbWRBY3RpdmF0aW9uIjsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZhcnJfaXRlciwgREJVU19UWVBFX1NUUklORywgJnMpKQotICAgICAgICBnb3RvIGFiYW5kb247Ci0gICAgfQotCi0gIHJldHVybiBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKHZhcmlhbnRfaXRlciwgJmFycl9pdGVyKTsKLQotYWJhbmRvbjoKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKHZhcmlhbnRfaXRlciwgJmFycl9pdGVyKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZGJ1c19ib29sX3QKLWludGVyZmFjZXNfZ2V0dGVyIChCdXNDb250ZXh0ICAgICAgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJpYW50X2l0ZXIpCi17Ci0gIERCdXNNZXNzYWdlSXRlciBhcnJfaXRlcjsKLSAgY29uc3QgSW50ZXJmYWNlSGFuZGxlciAqaWg7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAodmFyaWFudF9pdGVyLCBEQlVTX1RZUEVfQVJSQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyX2l0ZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmb3IgKGloID0gaW50ZXJmYWNlX2hhbmRsZXJzOyBpaC0+bmFtZSAhPSBOVUxMOyBpaCsrKQotICAgIHsKLSAgICAgIGlmIChpaC0+ZmxhZ3MgJiBJTlRFUkZBQ0VfRkxBR19VTklOVEVSRVNUSU5HKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZhcnJfaXRlciwgREJVU19UWVBFX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWgtPm5hbWUpKQotICAgICAgICBnb3RvIGFiYW5kb247Ci0gICAgfQotCi0gIHJldHVybiBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKHZhcmlhbnRfaXRlciwgJmFycl9pdGVyKTsKLQotYWJhbmRvbjoKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKHZhcmlhbnRfaXRlciwgJmFycl9pdGVyKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgY29uc3QgSW50ZXJmYWNlSGFuZGxlciAqCi1idXNfZHJpdmVyX2ZpbmRfaW50ZXJmYWNlIChjb25zdCBjaGFyICAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfYm9vbF90ICBjYW5vbmljYWxfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICplcnJvcikKLXsKLSAgY29uc3QgSW50ZXJmYWNlSGFuZGxlciAqaWg7Ci0KLSAgZm9yIChpaCA9IGludGVyZmFjZV9oYW5kbGVyczsgaWgtPm5hbWUgIT0gTlVMTDsgaWgrKykKLSAgICB7Ci0gICAgICBpZiAoIShjYW5vbmljYWxfcGF0aCB8fCAoaWgtPmZsYWdzICYgSU5URVJGQUNFX0ZMQUdfQU5ZX1BBVEgpKSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGlmIChzdHJjbXAgKG5hbWUsIGloLT5uYW1lKSA9PSAwKQotICAgICAgICByZXR1cm4gaWg7Ci0gICAgfQotCi0gIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9VTktOT1dOX0lOVEVSRkFDRSwKLSAgICAgICAgICAgICAgICAgICJJbnRlcmZhY2UgXCIlc1wiIG5vdCBmb3VuZCIsIG5hbWUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IFByb3BlcnR5SGFuZGxlciAqCi1pbnRlcmZhY2VfaGFuZGxlcl9maW5kX3Byb3BlcnR5IChjb25zdCBJbnRlcmZhY2VIYW5kbGVyICppaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgICAgICplcnJvcikKLXsKLSAgY29uc3QgUHJvcGVydHlIYW5kbGVyICpwaDsKLQotICBmb3IgKHBoID0gaWgtPnByb3BlcnR5X2hhbmRsZXJzOyBwaCAhPSBOVUxMICYmIHBoLT5uYW1lICE9IE5VTEw7IHBoKyspCi0gICAgewotICAgICAgaWYgKHN0cmNtcCAobmFtZSwgcGgtPm5hbWUpID09IDApCi0gICAgICAgIHJldHVybiBwaDsKLSAgICB9Ci0KLSAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX1VOS05PV05fUFJPUEVSVFksCi0gICAgICAgICAgICAgICAgICAiUHJvcGVydHkgXCIlcy4lc1wiIG5vdCBmb3VuZCIsIGloLT5uYW1lLCBuYW1lKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAotYnVzX2RyaXZlcl9oYW5kbGVfZ2V0IChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgQnVzVHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgKmVycm9yKQotewotICBjb25zdCBJbnRlcmZhY2VIYW5kbGVyICppaDsKLSAgY29uc3QgUHJvcGVydHlIYW5kbGVyICpoYW5kbGVyOwotICBjb25zdCBjaGFyICppZmFjZTsKLSAgY29uc3QgY2hhciAqcHJvcDsKLSAgQnVzQ29udGV4dCAqY29udGV4dDsKLSAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKLSAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciB2YXJfaXRlcjsKLQotICAvKiBUaGUgbWVzc2FnZSBzaWduYXR1cmUgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciB1cywKLSAgICogc28gdGhpcyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuICovCi0gIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChtZXNzYWdlLCBlcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBXZSBvbmx5IGltcGxlbWVudCBQcm9wZXJ0aWVzIG9uIC9vcmcvZnJlZWRlc2t0b3AvREJ1cyBzbyBmYXIuICovCi0gIGloID0gYnVzX2RyaXZlcl9maW5kX2ludGVyZmFjZSAoaWZhY2UsIFRSVUUsIGVycm9yKTsKLQotICBpZiAoaWggPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaGFuZGxlciA9IGludGVyZmFjZV9oYW5kbGVyX2ZpbmRfcHJvcGVydHkgKGloLCBwcm9wLCBlcnJvcik7Ci0KLSAgaWYgKGhhbmRsZXIgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgY29udGV4dCA9IGJ1c190cmFuc2FjdGlvbl9nZXRfY29udGV4dCAodHJhbnNhY3Rpb24pOwotCi0gIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuIChtZXNzYWdlKTsKLQotICBpZiAocmVwbHkgPT0gTlVMTCkKLSAgICBnb3RvIG9vbTsKLQotICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZCAocmVwbHksICZpdGVyKTsKLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmaXRlciwgREJVU19UWVBFX1ZBUklBTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXItPnR5cGUsICZ2YXJfaXRlcikpCi0gICAgZ290byBvb207Ci0KLSAgaWYgKCFoYW5kbGVyLT5nZXR0ZXIgKGNvbnRleHQsICZ2YXJfaXRlcikpCi0gICAgewotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKCZpdGVyLCAmdmFyX2l0ZXIpOwotICAgICAgZ290byBvb207Ci0gICAgfQotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwgJnZhcl9pdGVyKSkKLSAgICBnb3RvIG9vbTsKLQotICBpZiAoIWJ1c190cmFuc2FjdGlvbl9zZW5kX2Zyb21fZHJpdmVyICh0cmFuc2FjdGlvbiwgY29ubmVjdGlvbiwgcmVwbHkpKQotICAgIGdvdG8gb29tOwotCi0gIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOwotICByZXR1cm4gVFJVRTsKLQotb29tOgotICBpZiAocmVwbHkgIT0gTlVMTCkKLSAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKLQotICBCVVNfU0VUX09PTSAoZXJyb3IpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAotYnVzX2RyaXZlcl9oYW5kbGVfZ2V0X2FsbCAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICplcnJvcikKLXsKLSAgY29uc3QgSW50ZXJmYWNlSGFuZGxlciAqaWg7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlOwotICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIgKnBoOwotICBEQnVzTWVzc2FnZUl0ZXIgcmVwbHlfaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIGFycmF5X2l0ZXI7Ci0gIEJ1c0NvbnRleHQgKmNvbnRleHQ7Ci0gIERCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7Ci0KLSAgLyogVGhlIG1lc3NhZ2Ugc2lnbmF0dXJlIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBmb3IgdXMsCi0gICAqIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiAqLwotICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAobWVzc2FnZSwgZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIFdlIG9ubHkgaW1wbGVtZW50IFByb3BlcnRpZXMgb24gL29yZy9mcmVlZGVza3RvcC9EQnVzIHNvIGZhci4gKi8KLSAgaWggPSBidXNfZHJpdmVyX2ZpbmRfaW50ZXJmYWNlIChpZmFjZSwgVFJVRSwgZXJyb3IpOwotCi0gIGlmIChpaCA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBjb250ZXh0ID0gYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbik7Ci0KLSAgcmVwbHkgPSBfZGJ1c19hc3ZfbmV3X21ldGhvZF9yZXR1cm4gKG1lc3NhZ2UsICZyZXBseV9pdGVyLCAmYXJyYXlfaXRlcik7Ci0KLSAgaWYgKHJlcGx5ID09IE5VTEwpCi0gICAgZ290byBvb207Ci0KLSAgZm9yIChwaCA9IGloLT5wcm9wZXJ0eV9oYW5kbGVyczsgcGggIT0gTlVMTCAmJiBwaC0+bmFtZSAhPSBOVUxMOyBwaCsrKQotICAgIHsKLSAgICAgIERCdXNNZXNzYWdlSXRlciBlbnRyeV9pdGVyOwotICAgICAgREJ1c01lc3NhZ2VJdGVyIHZhcl9pdGVyOwotCi0gICAgICBpZiAoIV9kYnVzX2Fzdl9vcGVuX2VudHJ5ICgmYXJyYXlfaXRlciwgJmVudHJ5X2l0ZXIsIHBoLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGgtPnR5cGUsICZ2YXJfaXRlcikpCi0gICAgICAgIGdvdG8gb29tX2FiYW5kb25fbWVzc2FnZTsKLQotICAgICAgaWYgKCFwaC0+Z2V0dGVyIChjb250ZXh0LCAmdmFyX2l0ZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfYXN2X2FiYW5kb25fZW50cnkgKCZhcnJheV9pdGVyLCAmZW50cnlfaXRlciwgJnZhcl9pdGVyKTsKLSAgICAgICAgICBnb3RvIG9vbV9hYmFuZG9uX21lc3NhZ2U7Ci0gICAgICAgIH0KLQotICAgICAgaWYgKCFfZGJ1c19hc3ZfY2xvc2VfZW50cnkgKCZhcnJheV9pdGVyLCAmZW50cnlfaXRlciwgJnZhcl9pdGVyKSkKLSAgICAgICAgZ290byBvb21fYWJhbmRvbl9tZXNzYWdlOwotICAgIH0KLQotICBpZiAoIV9kYnVzX2Fzdl9jbG9zZSAoJnJlcGx5X2l0ZXIsICZhcnJheV9pdGVyKSkKLSAgICBnb3RvIG9vbTsKLQotICBpZiAoIWJ1c190cmFuc2FjdGlvbl9zZW5kX2Zyb21fZHJpdmVyICh0cmFuc2FjdGlvbiwgY29ubmVjdGlvbiwgcmVwbHkpKQotICAgIGdvdG8gb29tOwotCi0gIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOwotICByZXR1cm4gVFJVRTsKLQotb29tX2FiYW5kb25fbWVzc2FnZToKLSAgX2RidXNfYXN2X2FiYW5kb24gKCZyZXBseV9pdGVyLCAmYXJyYXlfaXRlcik7Ci0gIC8qIGZhbGwgdGhyb3VnaCAqLwotb29tOgotICBpZiAocmVwbHkgIT0gTlVMTCkKLSAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKLQotICBCVVNfU0VUX09PTSAoZXJyb3IpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAotYnVzX2RyaXZlcl9oYW5kbGVfc2V0IChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgQnVzVHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgKmVycm9yKQotewotICBjb25zdCBJbnRlcmZhY2VIYW5kbGVyICppaDsKLSAgY29uc3QgY2hhciAqaWZhY2U7Ci0gIGNvbnN0IGNoYXIgKnByb3A7Ci0gIGNvbnN0IFByb3BlcnR5SGFuZGxlciAqaGFuZGxlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0KLSAgLyogV2UgYWxyZWFkeSBjaGVja2VkIHRoaXMgaW4gYnVzX2RyaXZlcl9oYW5kbGVfbWVzc2FnZSgpICovCi0gIF9kYnVzX2Fzc2VydCAoZGJ1c19tZXNzYWdlX2hhc19zaWduYXR1cmUgKG1lc3NhZ2UsICJzc3YiKSk7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0IChtZXNzYWdlLCAmaXRlcikpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiTWVzc2FnZSB0eXBlIHdhcyBhbHJlYWR5IGNoZWNrZWQgdG8gYmUgJ3NzdiciKTsKLQotICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKCZpdGVyLCAmaWZhY2UpOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZXIpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIk1lc3NhZ2UgdHlwZSB3YXMgYWxyZWFkeSBjaGVja2VkIHRvIGJlICdzc3YnIik7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljICgmaXRlciwgJnByb3ApOwotCi0gIC8qIFdlIG9ubHkgaW1wbGVtZW50IFByb3BlcnRpZXMgb24gL29yZy9mcmVlZGVza3RvcC9EQnVzIHNvIGZhci4gKi8KLSAgaWggPSBidXNfZHJpdmVyX2ZpbmRfaW50ZXJmYWNlIChpZmFjZSwgVFJVRSwgZXJyb3IpOwotCi0gIGlmIChpaCA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBoYW5kbGVyID0gaW50ZXJmYWNlX2hhbmRsZXJfZmluZF9wcm9wZXJ0eSAoaWgsIHByb3AsIGVycm9yKTsKLQotICBpZiAoaGFuZGxlciA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBXZSBkb24ndCBpbXBsZW1lbnQgYW55IHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc2V0IHlldC4gKi8KLSAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX1BST1BFUlRZX1JFQURfT05MWSwKLSAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eSAnJXMuJXMnIGNhbm5vdCBiZSBzZXQiLCBpZmFjZSwgcHJvcCk7Ci0gIHJldHVybiBGQUxTRTsKLX0KZGlmZiAtLWdpdCBhL2J1cy9kcml2ZXIuaCBiL2J1cy9kcml2ZXIuaAppbmRleCBhYzEyODlkLi4yMDE3MDljIDEwMDY0NAotLS0gYS9idXMvZHJpdmVyLmgKKysrIGIvYnVzL2RyaXZlci5oCkBAIC0yNywxMyArMjcsNiBAQAogI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgogI2luY2x1ZGUgImNvbm5lY3Rpb24uaCIKIAotdHlwZWRlZiBlbnVtCi17Ci0gIEJVU19EUklWRVJfRk9VTkRfU0VMRiwKLSAgQlVTX0RSSVZFUl9GT1VORF9QRUVSLAotICBCVVNfRFJJVkVSX0ZPVU5EX0VSUk9SLAotfSBCdXNEcml2ZXJGb3VuZDsKLQogdm9pZCAgICAgICAgYnVzX2RyaXZlcl9yZW1vdmVfY29ubmVjdGlvbiAgICAgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uKTsKIGRidXNfYm9vbF90IGJ1c19kcml2ZXJfaGFuZGxlX21lc3NhZ2UgICAgICAgIChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXNUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCkBAIC01MiwxOSArNDUsOCBAQAogCQkJCQkJICAgIGNvbnN0IGNoYXIgICAgICpuZXdfb3duZXIsCiAJCQkJCQkgICAgQnVzVHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAogCQkJCQkJICAgIERCdXNFcnJvciAgICAgICplcnJvcik7Ci1kYnVzX2Jvb2xfdCBidXNfZHJpdmVyX2dlbmVyYXRlX2ludHJvc3BlY3Rfc3RyaW5nICAoREJ1c1N0cmluZyAqeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfYm9vbF90IGNhbm9uaWNhbF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICptZXNzYWdlKTsKLQotQnVzRHJpdmVyRm91bmQgYnVzX2RyaXZlcl9nZXRfY29ubl9oZWxwZXIgKERCdXNDb25uZWN0aW9uICAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICp3aGF0X3dlX3dhbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgKipuYW1lX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Nvbm5lY3Rpb24gKipwZWVyX2Nvbm5fcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgKmVycm9yKTsKLWRidXNfYm9vbF90IGJ1c19kcml2ZXJfc2VuZF9hY2tfcmVwbHkgICAgIChEQnVzQ29ubmVjdGlvbiAgKmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzVHJhbnNhY3Rpb24gICp0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZSAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICplcnJvcik7CitkYnVzX2Jvb2xfdCBidXNfZHJpdmVyX2dlbmVyYXRlX2ludHJvc3BlY3Rfc3RyaW5nICAoREJ1c1N0cmluZyAqeG1sKTsKK2RidXNfYm9vbF90IGJ1c19kcml2ZXJfY2hlY2tfbWVzc2FnZV9pc19mb3JfdXMgICAgIChEQnVzTWVzc2FnZSAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAqZXJyb3IpOwogCiAjZW5kaWYgLyogQlVTX0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9idXMvZXhwaXJlbGlzdC5jIGIvYnVzL2V4cGlyZWxpc3QuYwppbmRleCA0YTM5NzUyLi45YTM4ODZlIDEwMDY0NAotLS0gYS9idXMvZXhwaXJlbGlzdC5jCisrKyBiL2J1cy9leHBpcmVsaXN0LmMKQEAgLTYzLDcgKzYzLDcgQEAKICAgaWYgKGxpc3QtPnRpbWVvdXQgPT0gTlVMTCkKICAgICBnb3RvIGZhaWxlZDsKIAotICBfZGJ1c190aW1lb3V0X2Rpc2FibGUgKGxpc3QtPnRpbWVvdXQpOworICBfZGJ1c190aW1lb3V0X3NldF9lbmFibGVkIChsaXN0LT50aW1lb3V0LCBGQUxTRSk7CiAKICAgaWYgKCFfZGJ1c19sb29wX2FkZF90aW1lb3V0IChsaXN0LT5sb29wLCBsaXN0LT50aW1lb3V0KSkKICAgICBnb3RvIGZhaWxlZDsKQEAgLTk3LDE0ICs5NywxNiBAQAogewogICBpZiAobmV4dF9pbnRlcnZhbCA+PSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3RpbWVvdXRfcmVzdGFydCAodGltZW91dCwgbmV4dF9pbnRlcnZhbCk7CisgICAgICBfZGJ1c190aW1lb3V0X3NldF9pbnRlcnZhbCAodGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X2ludGVydmFsKTsKKyAgICAgIF9kYnVzX3RpbWVvdXRfc2V0X2VuYWJsZWQgKHRpbWVvdXQsIFRSVUUpOwogCiAgICAgICBfZGJ1c192ZXJib3NlICgiRW5hYmxlZCBhbiBleHBpcmUgdGltZW91dCB3aXRoIGludGVydmFsICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgbmV4dF9pbnRlcnZhbCk7CiAgICAgfQogICBlbHNlIGlmIChkYnVzX3RpbWVvdXRfZ2V0X2VuYWJsZWQgKHRpbWVvdXQpKQogICAgIHsKLSAgICAgIF9kYnVzX3RpbWVvdXRfZGlzYWJsZSAodGltZW91dCk7CisgICAgICBfZGJ1c190aW1lb3V0X3NldF9lbmFibGVkICh0aW1lb3V0LCBGQUxTRSk7CiAKICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJEaXNhYmxlZCBhbiBleHBpcmUgdGltZW91dFxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYnVzL21haW4uYyBiL2J1cy9tYWluLmMKaW5kZXggNGVlM2Y3NS4uYzM4ZjI1MiAxMDA2NDQKLS0tIGEvYnVzL21haW4uYworKysgYi9idXMvbWFpbi5jCkBAIC02NywxMCArNjcsNiBAQAogc3RhdGljIHZvaWQKIHNpZ25hbF9oYW5kbGVyIChpbnQgc2lnKQogewotICAvKiBTaWduYWwgaGFuZGxlcnMgdGhhdCBtaWdodCBzZXQgZXJybm8gbXVzdCBzYXZlIGFuZCByZXN0b3JlIHRoZSBlcnJubwotICAgKiB0aGF0IHRoZSBpbnRlcnJ1cHRlZCBmdW5jdGlvbiBtaWdodCBoYXZlIGJlZW4gcmVseWluZyBvbi4gKi8KLSAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0KICAgc3dpdGNoIChzaWcpCiAgICAgewogICAgIGNhc2UgU0lHSFVQOgpAQCAtMTMyLDE5ICsxMjgsMTAgQEAKICAgICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBjYW4ndCBoYXBwZW4gdW5sZXNzIHRoaXMgc2lnbmFsIGhhbmRsZXIgZ2V0cyB1c2VkIGZvciBhIHdyb25nCi0gICAgICAgKiBzaWduYWwsIGJ1dCBrZWVwIC1Xc3dpdGNoLWRlZmF1bHQgaGFwcHkgKi8KLSAgICAgIGJyZWFrOwogICAgIH0KLQotICBlcnJubyA9IHNhdmVkX2Vycm5vOwogfQogI2VuZGlmIC8qIERCVVNfVU5JWCAqLwogCi1zdGF0aWMgdm9pZCB1c2FnZSAodm9pZCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHVzYWdlICh2b2lkKQogewpAQCAtMTU5LDkgKzE0Niw2IEBACiAgICAgICAiIFstLWludHJvc3BlY3RdIgogICAgICAgIiBbLS1hZGRyZXNzPUFERFJFU1NdIgogICAgICAgIiBbLS1ub3BpZGZpbGVdIgotICAgICAgIiBbLS1ub3N5c2xvZ10iCi0gICAgICAiIFstLXN5c2xvZ10iCi0gICAgICAiIFstLXN5c2xvZy1vbmx5XSIKICAgICAgICIgWy0tbm9mb3JrXSIKICNpZmRlZiBEQlVTX1VOSVgKICAgICAgICIgWy0tZm9ya10iCkBAIC0xNzEsOCArMTU1LDYgQEAKICAgZXhpdCAoMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHZlcnNpb24gKHZvaWQpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB2ZXJzaW9uICh2b2lkKQogewpAQCAtMTg0LDggKzE2Niw2IEBACiAgIGV4aXQgKDApOwogfQogCi1zdGF0aWMgdm9pZCBpbnRyb3NwZWN0ICh2b2lkKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAogaW50cm9zcGVjdCAodm9pZCkKIHsKQEAgLTE5NSw3ICsxNzUsNyBAQAogICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmeG1sKSkKICAgICBnb3RvIG9vbTsKIAotICBpZiAoIWJ1c19kcml2ZXJfZ2VuZXJhdGVfaW50cm9zcGVjdF9zdHJpbmcgKCZ4bWwsIFRSVUUsIE5VTEwpKQorICBpZiAoIWJ1c19kcml2ZXJfZ2VuZXJhdGVfaW50cm9zcGVjdF9zdHJpbmcgKCZ4bWwpKQogICAgIHsKICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmeG1sKTsKICAgICAgIGdvdG8gb29tOwpAQCAtMjA3LDcgKzE4Nyw3IEBACiAgIGV4aXQgKDApOwogCiAgb29tOgotICBfZGJ1c193YXJuICgiQ2FuIG5vdCBpbnRyb3NwZWN0IC0gT3V0IG9mIG1lbW9yeSIpOworICBfZGJ1c193YXJuICgiQ2FuIG5vdCBpbnRyb3NwZWN0IC0gT3V0IG9mIG1lbW9yeVxuIik7CiAgIGV4aXQgKDEpOwogfQogCkBAIC0yNzYsNyArMjU2LDcgQEAKICAgaWYgKChyZWxvYWRfcGlwZVtSRUxPQURfUkVBRF9FTkRdLmZkID4gMCkgJiYKICAgICAgIF9kYnVzX3JlYWRfc29ja2V0IChyZWxvYWRfcGlwZVtSRUxPQURfUkVBRF9FTkRdLCAmc3RyLCAxKSAhPSAxKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZG4ndCByZWFkIGZyb20gcmVsb2FkIHBpcGUuIik7CisgICAgICBfZGJ1c193YXJuICgiQ291bGRuJ3QgcmVhZCBmcm9tIHJlbG9hZCBwaXBlLlxuIik7CiAgICAgICBjbG9zZV9yZWxvYWRfcGlwZSAoJndhdGNoKTsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KQEAgLTMwMiw3ICsyODIsNyBAQAogICAgICAgICAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19TRVQgKCZlcnJvcik7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0IChkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfRkFJTEVEKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSkpOwotICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmFibGUgdG8gcmVsb2FkIGNvbmZpZ3VyYXRpb246ICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiVW5hYmxlIHRvIHJlbG9hZCBjb25maWd1cmF0aW9uOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKICAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICAgIH0KQEAgLTM0Myw3ICszMjMsNyBAQAogICBpZiAoIV9kYnVzX3NvY2tldHBhaXIgKCZyZWxvYWRfcGlwZVswXSwgJnJlbG9hZF9waXBlWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsICZlcnJvcikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBjcmVhdGUgcmVsb2FkIHBpcGU6ICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJVbmFibGUgdG8gY3JlYXRlIHJlbG9hZCBwaXBlOiAlc1xuIiwKIAkJICBlcnJvci5tZXNzYWdlKTsKICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKICAgICAgIGV4aXQgKDEpOwpAQCAtMzU1LDcgKzMzNSw3IEBACiAKICAgaWYgKHdhdGNoID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBjcmVhdGUgcmVsb2FkIHdhdGNoOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiVW5hYmxlIHRvIGNyZWF0ZSByZWxvYWQgd2F0Y2g6ICVzXG4iLAogCQkgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgZXhpdCAoMSk7CkBAIC0zNjMsNyArMzQzLDcgQEAKIAogICBpZiAoIV9kYnVzX2xvb3BfYWRkX3dhdGNoIChsb29wLCB3YXRjaCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBhZGQgcmVsb2FkIHdhdGNoIHRvIG1haW4gbG9vcDogJXMiLAorICAgICAgX2RidXNfd2FybiAoIlVuYWJsZSB0byBhZGQgcmVsb2FkIHdhdGNoIHRvIG1haW4gbG9vcDogJXNcbiIsCiAJCSAgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICBleGl0ICgxKTsKQEAgLTQ2MSwyMSArNDQxLDYgQEAKICAgICAgICAgewogICAgICAgICAgIGludHJvc3BlY3QgKCk7CiAgICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1ub3N5c2xvZyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBmbGFncyAmPSB+QlVTX0NPTlRFWFRfRkxBR19TWVNMT0dfQUxXQVlTOwotICAgICAgICAgIGZsYWdzIHw9IEJVU19DT05URVhUX0ZMQUdfU1lTTE9HX05FVkVSOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0tc3lzbG9nIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGZsYWdzICY9IH5CVVNfQ09OVEVYVF9GTEFHX1NZU0xPR19ORVZFUjsKLSAgICAgICAgICBmbGFncyB8PSBCVVNfQ09OVEVYVF9GTEFHX1NZU0xPR19BTFdBWVM7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1zeXNsb2ctb25seSIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBmbGFncyAmPSB+QlVTX0NPTlRFWFRfRkxBR19TWVNMT0dfTkVWRVI7Ci0gICAgICAgICAgZmxhZ3MgfD0gKEJVU19DT05URVhUX0ZMQUdfU1lTTE9HX0FMV0FZU3xCVVNfQ09OVEVYVF9GTEFHX1NZU0xPR19PTkxZKTsKLSAgICAgICAgfQogICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICItLW5vZm9yayIpID09IDApCiAgICAgICAgIHsKICAgICAgICAgICBmbGFncyAmPSB+QlVTX0NPTlRFWFRfRkxBR19GT1JLX0FMV0FZUzsKQEAgLTUwMCwxNCArNDY1LDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICBjaGVja190d29fY29uZmlnX2ZpbGVzICgmY29uZmlnX2ZpbGUsICJzeXN0ZW0iKTsKIAotICAgICAgICAgIGlmICghX2RidXNfZ2V0X3N5c3RlbV9jb25maWdfZmlsZSAoJmNvbmZpZ19maWxlKSkKKyAgICAgICAgICBpZiAoIV9kYnVzX2FwcGVuZF9zeXN0ZW1fY29uZmlnX2ZpbGUgKCZjb25maWdfZmlsZSkpCiAgICAgICAgICAgICBleGl0ICgxKTsKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICItLXNlc3Npb24iKSA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgY2hlY2tfdHdvX2NvbmZpZ19maWxlcyAoJmNvbmZpZ19maWxlLCAic2Vzc2lvbiIpOwogCi0gICAgICAgICAgaWYgKCFfZGJ1c19nZXRfc2Vzc2lvbl9jb25maWdfZmlsZSAoJmNvbmZpZ19maWxlKSkKKyAgICAgICAgICBpZiAoIV9kYnVzX2FwcGVuZF9zZXNzaW9uX2NvbmZpZ19maWxlICgmY29uZmlnX2ZpbGUpKQogICAgICAgICAgICAgZXhpdCAoMSk7CiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHN0cnN0ciAoYXJnLCAiLS1jb25maWctZmlsZT0iKSA9PSBhcmcpCkBAIC02NzYsMTMgKzY0MSwxMyBAQAogCiAgIGlmICghYnVzX3NlbGludXhfcHJlX2luaXQgKCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlNFTGludXggcHJlLWluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworICAgICAgX2RidXNfd2FybiAoIlNFTGludXggcHJlLWluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAgICAgICBleGl0ICgxKTsKICAgICB9CiAKICAgaWYgKCFidXNfYXBwYXJtb3JfcHJlX2luaXQgKCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkFwcEFybW9yIHByZS1pbml0aWFsaXphdGlvbiBmYWlsZWQ6IG91dCBvZiBtZW1vcnkiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJBcHBBcm1vciBwcmUtaW5pdGlhbGl6YXRpb24gZmFpbGVkOiBvdXQgb2YgbWVtb3J5XG4iKTsKICAgICAgIGV4aXQgKDEpOwogICAgIH0KIApAQCAtNjkyLDEwICs2NTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCgmYWRkcmVzcykgPiAwID8gJmFkZHJlc3MgOiBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpOwogICBfZGJ1c19zdHJpbmdfZnJlZSAoJmNvbmZpZ19maWxlKTsKLSAgX2RidXNfc3RyaW5nX2ZyZWUgKCZhZGRyZXNzKTsKICAgaWYgKGNvbnRleHQgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHN0YXJ0IG1lc3NhZ2UgYnVzOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHN0YXJ0IG1lc3NhZ2UgYnVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgZXhpdCAoMSk7CmRpZmYgLS1naXQgYS9idXMvbWVzc2FnZWJ1cy1jb25maWcuaW4gYi9idXMvbWVzc2FnZWJ1cy1jb25maWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NTlkYwotLS0gL2Rldi9udWxsCisrKyBiL2J1cy9tZXNzYWdlYnVzLWNvbmZpZy5pbgpAQCAtMCwwICsxLDE3OCBAQAorIyEvYmluL3NoCisjCisjIG1lc3NhZ2VidXMtY29uZmlnLCBDb3B5cmlnaHQgMjAwOSBZYWFrb3YgU2Vsa293aXR6CisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDeWd3aW4gcG9ydCBvZiBkYnVzLgorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSW5pdGlhbGl6YXRpb24KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPR05BTUU9JChiYXNlbmFtZSAkMCkKK190ZGlyPSQoZGlybmFtZSAkMCkKK1BST0dESVI9JChjZCAkX3RkaXIgJiYgcHdkKQorCitDU0lIX1NDUklQVD0vdXNyL3NoYXJlL2NzaWgvY3lnd2luLXNlcnZpY2UtaW5zdGFsbGF0aW9uLWhlbHBlci5zaAorCisjIFN1YmRpcmVjdG9yeSB3aGVyZSB0aGUgbmV3IHBhY2thZ2UgaXMgYmVpbmcgaW5zdGFsbGVkCitQUkVGSVg9QHByZWZpeEAKKworIyBEaXJlY3Rvcnkgd2hlcmUgdGhlIGNvbmZpZyBmaWxlcyBhcmUgc3RvcmVkCitTWVNDT05GRElSPUBzeXNjb25mZGlyQC9kYnVzLTEKK0RFVkRJUj0vZGV2CitMT0dESVI9L3Zhci9sb2cKK1JVTkRJUj0kKGRpcm5hbWUgQERCVVNfU1lTVEVNX1BJRF9GSUxFQCkKK1NPQ0tESVI9JChkaXJuYW1lIEBEQlVTX1NZU1RFTV9TT0NLRVRAKQorCitzb3VyY2UgJHtDU0lIX1NDUklQVH0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFJvdXRpbmU6IGluc3RhbGxfc2VydmljZQorIyAgIEluc3RhbGwgbWVzc2FnZWJ1cyBhcyBhIHNlcnZpY2UKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW5zdGFsbF9zZXJ2aWNlKCkgeworCisgIGlmIGNzaWhfaXNfbnQKKyAgdGhlbgorCisgICAgIyBDaGVjayBpZiBtZXNzYWdlYnVzIGlzIGluc3RhbGxlZCBhbmQgcmVtb3ZlIG9uIHVzZXIgcmVxdWVzdC4KKyAgICBpZiBjeWdydW5zcnYgLVEgbWVzc2FnZWJ1cyA+IC9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgY3NpaF93YXJuaW5nICJUaGUgbWVzc2FnZWJ1cyBzZXJ2aWNlIGlzIGFscmVhZHkgaW5zdGFsbGVkLiIKKyAgICAgIGVjaG8KKyAgICAgIGlmIGNzaWhfcmVxdWVzdCAiRG8geW91IHdhbnQgdG8gcmVpbnN0YWxsIGl0IHdpdGggZGlmZmVyZW50IGFyZ3M/IgorICAgICAgdGhlbgorICAgICAgICBjeWdydW5zcnYgLUUgbWVzc2FnZWJ1cworICAgICAgICBjeWdydW5zcnYgLVIgbWVzc2FnZWJ1cworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBJbnN0YWxsIG1lc3NhZ2VidXMgc2VydmljZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQKKyAgICBpZiAhIGN5Z3J1bnNydiAtUSBtZXNzYWdlYnVzID4gL2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBlY2hvCisgICAgICBjc2loX3dhcm5pbmcgIlRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcmVxdWlyZXMgYWRtaW5pc3RyYXRvciBwcml2aWxlZ2VzISIKKyAgICAgIGlmIGNzaWhfcmVxdWVzdCAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCBtZXNzYWdlYnVzIGFzIHNlcnZpY2U/IgorICAgICAgdGhlbgorICAgICAgICBpZiBjeWdydW5zcnYgLUkgbWVzc2FnZWJ1cyAtZCAiQ1lHV0lOIEQtQnVzIHN5c3RlbSBzZXJ2aWNlIiAtcCBARVhQQU5ERURfQklORElSQC9kYnVzLWRhZW1vbiAtYSAiLS1ub2ZvcmsgLS1zeXN0ZW0iCisgICAgICAgIHRoZW4KKwkgIGVjaG8KKwkgIGNzaWhfaW5mb3JtICJUaGUgbWVzc2FnZWJ1cyBzZXJ2aWNlIGhhcyBiZWVuIGluc3RhbGxlZCB1bmRlciB0aGUgTG9jYWxTeXN0ZW0iCisJICBjc2loX2luZm9ybSAiYWNjb3VudCAoYWxzbyBrbm93biBhcyBTWVNURU0pLiBUbyBzdGFydCB0aGUgc2VydmljZSBub3csIGNhbGwiCisgICAgICAgICAgY3NpaF9pbmZvcm0gIlxgbmV0IHN0YXJ0IG1lc3NhZ2VidXMnIG9yIFxgY3lncnVuc3J2IC1TIG1lc3NhZ2VidXMnLiBPdGhlcndpc2UsIGl0IgorICAgICAgICAgIGNzaWhfaW5mb3JtICJ3aWxsIHN0YXJ0IGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG5leHQgcmVib290LiIKKwkgIGVjaG8KKwkgIGNzaWhfaW5mb3JtICJDaGVjayAke1NZU0NPTkZESVJ9L3N5c3RlbS5jb25mIGZpcnN0LCBpZiBpdCBzdWl0cyB5b3VyIG5lZWRzLiIKKyAgICAgICAgZmkKKyAgICAgIGZpICMgdXNlciBhbGxvd2VkIHVzIHRvIGluc3RhbGwgbWVzc2FnZWJ1cworICAgIGZpICMgbWVzc2FnZWJ1cyBhbHJlYWR5IGluc3RhbGxlZAorICBmaSAjIGNzaWhfaXNfbnQKK30gIyAtLS0gRW5kIG9mIGluc3RhbGxfc2VydmljZSAtLS0gIworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNYWluIEVudHJ5IFBvaW50CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIENoZWNrIGhvdyB0aGUgc2NyaXB0IGhhcyBiZWVuIHN0YXJ0ZWQuICBJZgorIyAgICgxKSBpdCBoYXMgYmVlbiBzdGFydGVkIGJ5IGdpdmluZyB0aGUgZnVsbCBwYXRoIGFuZAorIyAgICAgICB0aGF0IHBhdGggaXMgL2V0Yy9wb3N0aW5zdGFsbCwgT1IKKyMgICAoMikgT3RoZXJ3aXNlLCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgICAgICAgQ09ORklHX0FVVE9fQU5TV0VSX05PIGlzIHNldAorIyB0aGVuIHNldCBhdXRvX2Fuc3dlciB0byAibm8iLiAgVGhpcyBhbGxvd3MgYXV0b21hdGljCisjIGNyZWF0aW9uIG9mIHRoZSBjb25maWcgZmlsZXMgaW4gL2V0YyB3L28gb3ZlcndyaXRpbmcKKyMgdGhlbSBpZiB0aGV5IGFscmVhZHkgZXhpc3QuICBJbiBib3RoIGNhc2VzLCBjb2xvcgorIyBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdXBwcmVzc2VkLCBzbyBhcyB0byBwcmV2ZW50CisjIGNsdXR0ZXJpbmcgc2V0dXAncyBsb2dmaWxlcy4KK2lmIFsgIiRQUk9HRElSIiA9ICIvZXRjL3Bvc3RpbnN0YWxsIiBdCit0aGVuCisgIGNzaWhfYXV0b19hbnN3ZXI9Im5vIgorICBjc2loX2Rpc2FibGVfY29sb3IKK2ZpCitpZiBbIC1uICIke0NPTkZJR19BVVRPX0FOU1dFUl9OT30iIF0KK3RoZW4KKyAgY3NpaF9hdXRvX2Fuc3dlcj0ibm8iCisgIGNzaWhfZGlzYWJsZV9jb2xvcgorZmkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgUGFyc2Ugb3B0aW9ucworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit3aGlsZSA6CitkbworICBjYXNlICQjIGluCisgIDApCisgICAgYnJlYWsKKyAgICA7OworICBlc2FjCisKKyAgb3B0aW9uPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAiJG9wdGlvbiIgaW4KKyAgLWQgfCAtLWRlYnVnICkKKyAgICBzZXQgLXgKKyAgICBjc2loX3RyYWNlX29uCisgICAgOzsKKworICAteSB8IC0teWVzICkKKyAgICBjc2loX2F1dG9fYW5zd2VyPXllcworICAgIDs7CisKKyAgLW4gfCAtLW5vICkKKyAgICBjc2loX2F1dG9fYW5zd2VyPW5vCisgICAgOzsKKworICAqKQorICAgIGVjaG8gInVzYWdlOiAke1BST0dOQU1FfSBbT1BUSU9OXS4uLiIKKyAgICBlY2hvCisgICAgZWNobyAiVGhpcyBzY3JpcHQgY3JlYXRlcyBhIGJhc2ljIG1lc3NhZ2VidXMgY29uZmlndXJhdGlvbi4iCisgICAgZWNobworICAgIGVjaG8gIk9wdGlvbnM6IgorICAgIGVjaG8gIiAgICAtLWRlYnVnICAtZCAgICAgRW5hYmxlIHNoZWxsJ3MgZGVidWcgb3V0cHV0LiIKKyAgICBlY2hvICIgICAgLS15ZXMgICAgLXkgICAgIEFuc3dlciBhbGwgcXVlc3Rpb25zIHdpdGggXCJ5ZXNcIiBhdXRvbWF0aWNhbGx5LiIKKyAgICBlY2hvICIgICAgLS1ubyAgICAgLW4gICAgIEFuc3dlciBhbGwgcXVlc3Rpb25zIHdpdGggXCJub1wiIGF1dG9tYXRpY2FsbHkuIgorICAgIGVjaG8KKyAgICBleGl0IDEKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFjdGlvbiEKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIENoZWNrIGZvciAke1NZU0NPTkZESVJ9IGRpcmVjdG9yeQorY3NpaF9tYWtlX2RpciAiJHtTWVNDT05GRElSfSIgIkNhbm5vdCBjcmVhdGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorY2htb2QgNzc1ICIke1NZU0NPTkZESVJ9Igorc2V0ZmFjbCAtbSB1OnN5c3RlbTpyd3ggIiR7U1lTQ09ORkRJUn0iCisKKyMgQ2hlY2sgZm9yICR7REVWRElSfSBkaXJlY3RvcnkKK2NzaWhfbWFrZV9kaXIgIiR7REVWRElSfSIgIlN5c2xvZ2dpbmcgdXNpbmcgbWVzc2FnZWJ1cyB3aWxsIG5vdCB3b3JrLiIKK2NobW9kIDc3NSAiJHtERVZESVJ9Igorc2V0ZmFjbCAtbSB1OnN5c3RlbTpyd3ggIiR7REVWRElSfSIKKworIyBDaGVjayBmb3IgJHtMT0dESVJ9IGRpcmVjdG9yeQorY3NpaF9tYWtlX2RpciAiJHtMT0dESVJ9IiAiU3lzbG9nZ2luZyB1c2luZyBtZXNzYWdlYnVzIHdpbGwgbm90IHdvcmsuIgorY2htb2QgNzc1ICIke0xPR0RJUn0iCitzZXRmYWNsIC1tIHU6c3lzdGVtOnJ3eCAiJHtMT0dESVJ9IgorCisjIENoZWNrIGZvciAke1JVTkRJUn0gZGlyZWN0b3J5Citjc2loX21ha2VfZGlyICIke1JVTkRJUn0iICJQSUQgZmlsZXMgb2YgcnVubmluZyBwcm9jZXNzZXMgd2lsbCBub3QgYmUgY3JlYXRlZC4iCitjaG1vZCA3NzUgIiR7UlVORElSfSIKK3NldGZhY2wgLW0gdTpzeXN0ZW06cnd4ICIke1JVTkRJUn0iCisKKyMgQ2hlY2sgZm9yICR7U09DS0RJUn0gZGlyZWN0b3J5Citjc2loX21ha2VfZGlyICIke1NPQ0tESVJ9IiAiU09DS0VUIGZpbGVzIG9mIHJ1bm5pbmcgcHJvY2Vzc2VzIHdpbGwgbm90IGJlIGNyZWF0ZWQuIgorY2htb2QgNzc1ICIke1NPQ0tESVJ9Igorc2V0ZmFjbCAtbSB1OnN5c3RlbTpyd3ggIiR7U09DS0RJUn0iCisKKyMgbWF5YmU6IGNzaWhfYXV0b19hbnN3ZXI9bm8gd2lsbCBza2lwLAorIyBpbnRlcmFjdGl2ZSB1c2VyIHdpbGwgZ2V0IGEgY2hhbmNlIHRvIG92ZXJyaWRlCitpbnN0YWxsX3NlcnZpY2UKKworCitlY2hvCitlY2hvICJDb25maWd1cmF0aW9uIGZpbmlzaGVkLiBIYXZlIGZ1biEiCmRpZmYgLS1naXQgYS9idXMvbWVzc2FnZWJ1cy5pbiBiL2J1cy9tZXNzYWdlYnVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmVlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9idXMvbWVzc2FnZWJ1cy5pbgpAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgbWVzc2FnZWJ1czogICBUaGUgRC1CVVMgc3lzdGVtd2lkZSBtZXNzYWdlIGJ1cworIworIyBjaGtjb25maWc6IDM0NSAyMiA4NQorIyBkZXNjcmlwdGlvbjogIFRoaXMgaXMgYSBkYWVtb24gd2hpY2ggYnJvYWRjYXN0cyBub3RpZmljYXRpb25zIG9mIHN5c3RlbSBldmVudHMgXAorIyAgICAgICAgICAgICAgIGFuZCBvdGhlciBtZXNzYWdlcy4gU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvCisjCisjIHByb2Nlc3NuYW1lOiBkYnVzLWRhZW1vbgorIyBwaWRmaWxlOiBAREJVU19TWVNURU1fUElEX0ZJTEVACisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiBtZXNzYWdlYnVzCisjIFJlcXVpcmVkLVN0YXJ0OiAkc3lzbG9nICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAkc3lzbG9nICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFRoZSBELUJ1cyBzeXN0ZW13aWRlIG1lc3NhZ2UgYnVzCisjIERlc2NyaXB0aW9uOiBUaGlzIGlzIGEgZGFlbW9uIHdoaWNoIGJyb2FkY2FzdHMgbm90aWZpY2F0aW9ucyBvZiBzeXN0ZW0gCisjICBldmVudHMgYW5kIG90aGVyIG1lc3NhZ2VzLiBTZWUgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cworIyMjIEVORCBJTklUIElORk8KKworIyBTYW5pdHkgY2hlY2tzLgorWyAteCBARVhQQU5ERURfQklORElSQC9kYnVzLWRhZW1vbiBdIHx8IGV4aXQgMAorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiBARVhQQU5ERURfU1lTQ09ORkRJUkAvcmMuZC9pbml0LmQvZnVuY3Rpb25zCisKKyMgc28gd2UgY2FuIHJlYXJyYW5nZSB0aGlzIGVhc2lseQorcHJvY2Vzc25hbWU9ZGJ1cy1kYWVtb24KK3NlcnZpY2VuYW1lPW1lc3NhZ2VidXMKKworUkVUVkFMPTAKKworc3RhcnQoKSB7CisgICAgZWNobyAtbiAkIlN0YXJ0aW5nIHN5c3RlbSBtZXNzYWdlIGJ1czogIgorICAgIGlmIFsgLXggQEVYUEFOREVEX0JJTkRJUkAvZGJ1cy11dWlkZ2VuIF0gOyB0aGVuCisgICAgICAgIEBFWFBBTkRFRF9CSU5ESVJAL2RidXMtdXVpZGdlbiAtLWVuc3VyZQorICAgIGZpCisKKyAgICBkYWVtb24gLS1jaGVjayAkc2VydmljZW5hbWUgJHByb2Nlc3NuYW1lIC0tc3lzdGVtCisgICAgUkVUVkFMPSQ/CisgICAgZWNobworICAgIFsgJFJFVFZBTCAtZXEgMCBdICYmIHRvdWNoIEBFWFBBTkRFRF9MT0NBTFNUQVRFRElSQC9sb2NrL3N1YnN5cy8kc2VydmljZW5hbWUKK30KKworc3RvcCgpIHsKKyAgICBlY2hvIC1uICQiU3RvcHBpbmcgc3lzdGVtIG1lc3NhZ2UgYnVzOiAiCisKKyAgICAjIyB3ZSBkb24ndCB3YW50IHRvIGtpbGwgYWxsIHRoZSBwZXItdXNlciAkcHJvY2Vzc25hbWUsIHdlIHdhbnQKKyAgICAjIyB0byB1c2UgdGhlIHBpZCBmaWxlICpvbmx5KjsgYmVjYXVzZSB3ZSB1c2UgdGhlIGZha2Ugbm9uZXhpc3RlbnQgCisgICAgIyMgcHJvZ3JhbSBuYW1lICIkc2VydmljZW5hbWUiIHRoYXQgc2hvdWxkIGJlIHNhZmUtaXNoCisgICAga2lsbHByb2MgJHNlcnZpY2VuYW1lIC1URVJNCisgICAgUkVUVkFMPSQ/CisgICAgZWNobworICAgIGlmIFsgJFJFVFZBTCAtZXEgMCBdOyB0aGVuCisgICAgICAgIHJtIC1mIEBFWFBBTkRFRF9MT0NBTFNUQVRFRElSQC9sb2NrL3N1YnN5cy8kc2VydmljZW5hbWUKKyAgICAgICAgcm0gLWYgQERCVVNfU1lTVEVNX1BJRF9GSUxFQAorICAgIGZpCit9CisKKyMgU2VlIGhvdyB3ZSB3ZXJlIGNhbGxlZC4KK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBzdGFydAorICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIHN0b3AKKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAkc2VydmljZW5hbWUKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIDs7CisgICAgcmVzdGFydCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydAorICAgICAgICA7OworICAgIGNvbmRyZXN0YXJ0KQorICAgICAgICBpZiBbIC1mIEBFWFBBTkRFRF9MT0NBTFNUQVRFRElSQC9sb2NrL3N1YnN5cy8kc2VydmljZW5hbWUgXTsgdGhlbgorICAgICAgICAgICAgc3RvcAorICAgICAgICAgICAgc3RhcnQKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICByZWxvYWQpCisgICAgICAgIGVjaG8gIk1lc3NhZ2UgYnVzIGNhbid0IHJlbG9hZCBpdHMgY29uZmlndXJhdGlvbiwgeW91IGhhdmUgdG8gcmVzdGFydCBpdCIKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAkIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxjb25kcmVzdGFydHxyZWxvYWR9IgorICAgICAgICA7OworZXNhYworZXhpdCAkUkVUVkFMCmRpZmYgLS1naXQgYS9idXMvcG9saWN5LmMgYi9idXMvcG9saWN5LmMKaW5kZXggYTM3YmU4MC4uMDgyZjM4NSAxMDA2NDQKLS0tIGEvYnVzL3BvbGljeS5jCisrKyBiL2J1cy9wb2xpY3kuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGRidXMvZGJ1cy1saXN0Lmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLWhhc2guaD4KICNpbmNsdWRlIDxkYnVzL2RidXMtaW50ZXJuYWxzLmg+Ci0jaW5jbHVkZSA8ZGJ1cy9kYnVzLW1lc3NhZ2UtaW50ZXJuYWwuaD4KIAogQnVzUG9saWN5UnVsZSoKIGJ1c19wb2xpY3lfcnVsZV9uZXcgKEJ1c1BvbGljeVJ1bGVUeXBlIHR5cGUsCkBAIC03MCw4ICs2OSw2IEBACiAgICAgICBicmVhazsKICAgICBjYXNlIEJVU19QT0xJQ1lfUlVMRV9PV046CiAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBydWxlIik7CiAgICAgfQogICAKICAgcmV0dXJuIHJ1bGU7CkBAIC0xMTksOCArMTE2LDYgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCVVNfUE9MSUNZX1JVTEVfR1JPVVA6CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBydWxlIik7CiAgICAgICAgIH0KICAgICAgIAogICAgICAgZGJ1c19mcmVlIChydWxlKTsKQEAgLTI2Niw5ICsyNjEsNiBAQAogICAgICAgICAgIGlmICghYnVzX2NsaWVudF9wb2xpY3lfYXBwZW5kX3J1bGUgKGNsaWVudCwgcnVsZSkpCiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIHJ1bGUiKTsKICAgICAgICAgfQogICAgIH0KICAgCkBAIC04MzgsMTEgKzgzMCw4IEBACiAgICAgICAgICAgcmVtb3ZlX3ByZWNlZGluZyA9CiAgICAgICAgICAgICBydWxlLT5kLm93bi5zZXJ2aWNlX25hbWUgPT0gTlVMTDsKICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvKiBUaGUgb3RoZXIgcnVsZSB0eXBlcyBkb24ndCBhcHBlYXIgaW4gdGhpcyBsaXN0ICovCiAgICAgICAgIGNhc2UgQlVTX1BPTElDWV9SVUxFX1VTRVI6CiAgICAgICAgIGNhc2UgQlVTX1BPTElDWV9SVUxFX0dST1VQOgotICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQgcnVsZSIpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC05OTcsMzggKzk4NiwxMyBAQAogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICBpZiAocnVsZS0+ZC5zZW5kLmJyb2FkY2FzdCAhPSBCVVNfUE9MSUNZX1RSSVNUQVRFX0FOWSkKLSAgICAgICAgewotICAgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfZ2V0X2Rlc3RpbmF0aW9uIChtZXNzYWdlKSA9PSBOVUxMICYmCi0gICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfdHlwZSAobWVzc2FnZSkgPT0gREJVU19NRVNTQUdFX1RZUEVfU0lHTkFMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvKiBpdCdzIGEgYnJvYWRjYXN0ICovCi0gICAgICAgICAgICAgIGlmIChydWxlLT5kLnNlbmQuYnJvYWRjYXN0ID09IEJVU19QT0xJQ1lfVFJJU1RBVEVfRkFMU0UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIiAgKHBvbGljeSkgc2tpcHBpbmcgcnVsZSBiZWNhdXNlIG1lc3NhZ2UgaXMgYSBicm9hZGNhc3RcbiIpOwotICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIC8qIGVsc2UgaXQgaXNuJ3QgYSBicm9hZGNhc3Q6IHRoZXJlIGlzIHNvbWUgZGVzdGluYXRpb24gKi8KLSAgICAgICAgICBlbHNlIGlmIChydWxlLT5kLnNlbmQuYnJvYWRjYXN0ID09IEJVU19QT0xJQ1lfVFJJU1RBVEVfVFJVRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIiAgKHBvbGljeSkgc2tpcHBpbmcgcnVsZSBiZWNhdXNlIG1lc3NhZ2UgaXMgbm90IGEgYnJvYWRjYXN0XG4iKTsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAgCiAgICAgICBpZiAocnVsZS0+ZC5zZW5kLmRlc3RpbmF0aW9uICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAvKiByZWNlaXZlciBjYW4gYmUgTlVMTCBmb3IgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCB0byB0aGUKICAgICAgICAgICAgKiBtZXNzYWdlIGJ1cyBpdHNlbGYsIHdlIGNoZWNrIHRoZSBzdHJpbmdzIGluIHRoYXQgY2FzZSBhcwogICAgICAgICAgICAqIGJ1aWx0LWluIHNlcnZpY2VzIGRvbid0IGhhdmUgYSBEQnVzQ29ubmVjdGlvbiBidXQgbWVzc2FnZXMKICAgICAgICAgICAgKiB0byB0aGVtIGhhdmUgYSBkZXN0aW5hdGlvbiBzZXJ2aWNlIG5hbWUuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiBTaW1pbGFybHksIHJlY2VpdmVyIGNhbiBiZSBOVUxMIHdoZW4gd2UncmUgZGVjaWRpbmcgd2hldGhlcgotICAgICAgICAgICAqIGFjdGl2YXRpb24gc2hvdWxkIGJlIGFsbG93ZWQ7IHdlIG1ha2UgdGhlIGF1dGhvcml6YXRpb24gZGVjaXNpb24KLSAgICAgICAgICAgKiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBhY3RpdmF0ZWQgc2VydmljZSB3aWxsIGhhdmUgdGhlCi0gICAgICAgICAgICogcmVxdWVzdGVkIG5hbWUgYW5kIG5vIG90aGVycy4KICAgICAgICAgICAgKi8KICAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTEwNjQsMjAgKzEwMjgsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgIGlmIChydWxlLT5kLnNlbmQubWluX2ZkcyA+IDAgfHwKLSAgICAgICAgICBydWxlLT5kLnNlbmQubWF4X2ZkcyA8IERCVVNfTUFYSU1VTV9NRVNTQUdFX1VOSVhfRkRTKQotICAgICAgICB7Ci0gICAgICAgICAgdW5zaWduZWQgaW50IG5fZmRzID0gX2RidXNfbWVzc2FnZV9nZXRfbl91bml4X2ZkcyAobWVzc2FnZSk7Ci0KLSAgICAgICAgICBpZiAobl9mZHMgPCBydWxlLT5kLnNlbmQubWluX2ZkcyB8fCBuX2ZkcyA+IHJ1bGUtPmQuc2VuZC5tYXhfZmRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiICAocG9saWN5KSBza2lwcGluZyBydWxlIGJlY2F1c2UgbWVzc2FnZSBoYXMgJXUgZmRzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCB0aGF0IGlzIG91dHNpZGUgcmFuZ2UgWyV1LCV1XSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZmRzLCBydWxlLT5kLnNlbmQubWluX2ZkcywgcnVsZS0+ZC5zZW5kLm1heF9mZHMpOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAvKiBVc2UgdGhpcyBydWxlICovCiAgICAgICBhbGxvd2VkID0gcnVsZS0+YWxsb3c7CiAgICAgICAqbG9nID0gcnVsZS0+ZC5zZW5kLmxvZzsKQEAgLTEyNzgsMjIgKzEyMjgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICBpZiAocnVsZS0+ZC5yZWNlaXZlLm1pbl9mZHMgPiAwIHx8Ci0gICAgICAgICAgcnVsZS0+ZC5yZWNlaXZlLm1heF9mZHMgPCBEQlVTX01BWElNVU1fTUVTU0FHRV9VTklYX0ZEUykKLSAgICAgICAgewotICAgICAgICAgIHVuc2lnbmVkIGludCBuX2ZkcyA9IF9kYnVzX21lc3NhZ2VfZ2V0X25fdW5peF9mZHMgKG1lc3NhZ2UpOwotCi0gICAgICAgICAgaWYgKG5fZmRzIDwgcnVsZS0+ZC5yZWNlaXZlLm1pbl9mZHMgfHwgbl9mZHMgPiBydWxlLT5kLnJlY2VpdmUubWF4X2ZkcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIiAgKHBvbGljeSkgc2tpcHBpbmcgcnVsZSBiZWNhdXNlIG1lc3NhZ2UgaGFzICV1IGZkcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGhhdCBpcyBvdXRzaWRlIHJhbmdlIFsldSwldV0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2ZkcywgcnVsZS0+ZC5yZWNlaXZlLm1pbl9mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUtPmQucmVjZWl2ZS5tYXhfZmRzKTsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAgCiAgICAgICAvKiBVc2UgdGhpcyBydWxlICovCiAgICAgICBhbGxvd2VkID0gcnVsZS0+YWxsb3c7CiAgICAgICAoKnRvZ2dsZXMpKys7CmRpZmYgLS1naXQgYS9idXMvcG9saWN5LmggYi9idXMvcG9saWN5LmgKaW5kZXggZWM0M2ZmYS4uZDFkM2U3MiAxMDA2NDQKLS0tIGEvYnVzL3BvbGljeS5oCisrKyBiL2J1cy9wb2xpY3kuaApAQCAtMzksMTMgKzM5LDYgQEAKICAgQlVTX1BPTElDWV9SVUxFX0dST1VQCiB9IEJ1c1BvbGljeVJ1bGVUeXBlOwogCi10eXBlZGVmIGVudW0KLXsKLSAgQlVTX1BPTElDWV9UUklTVEFURV9BTlkgPSAwLAotICBCVVNfUE9MSUNZX1RSSVNUQVRFX0ZBTFNFLAotICBCVVNfUE9MSUNZX1RSSVNUQVRFX1RSVUUKLX0gQnVzUG9saWN5VHJpc3RhdGU7Ci0KIC8qKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHJ1bGUgYWZmZWN0cyBhIGNvbm5lY3Rpb24sIG9yIHNvbWUgZ2xvYmFsIGl0ZW0gKi8KICNkZWZpbmUgQlVTX1BPTElDWV9SVUxFX0lTX1BFUl9DTElFTlQocnVsZSkgKCEoKHJ1bGUpLT50eXBlID09IEJVU19QT0xJQ1lfUlVMRV9VU0VSIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1bGUpLT50eXBlID09IEJVU19QT0xJQ1lfUlVMRV9HUk9VUCkpCkBAIC03MCwxMiArNjMsOSBAQAogICAgICAgY2hhciAqbWVtYmVyOwogICAgICAgY2hhciAqZXJyb3I7CiAgICAgICBjaGFyICpkZXN0aW5hdGlvbjsKLSAgICAgIHVuc2lnbmVkIGludCBtYXhfZmRzOwotICAgICAgdW5zaWduZWQgaW50IG1pbl9mZHM7CiAgICAgICB1bnNpZ25lZCBpbnQgZWF2ZXNkcm9wIDogMTsKICAgICAgIHVuc2lnbmVkIGludCByZXF1ZXN0ZWRfcmVwbHkgOiAxOwogICAgICAgdW5zaWduZWQgaW50IGxvZyA6IDE7Ci0gICAgICB1bnNpZ25lZCBpbnQgYnJvYWRjYXN0IDogMjsgLyoqPCByZWFsbHkgYSBCdXNQb2xpY3lUcmlzdGF0ZSAqLwogICAgIH0gc2VuZDsKIAogICAgIHN0cnVjdApAQCAtODgsOCArNzgsNiBAQAogICAgICAgY2hhciAqbWVtYmVyOwogICAgICAgY2hhciAqZXJyb3I7CiAgICAgICBjaGFyICpvcmlnaW47Ci0gICAgICB1bnNpZ25lZCBpbnQgbWF4X2ZkczsKLSAgICAgIHVuc2lnbmVkIGludCBtaW5fZmRzOwogICAgICAgdW5zaWduZWQgaW50IGVhdmVzZHJvcCA6IDE7CiAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkX3JlcGx5IDogMTsKICAgICB9IHJlY2VpdmU7CmRpZmYgLS1naXQgYS9idXMvcmMubWVzc2FnZWJ1cy5pbiBiL2J1cy9yYy5tZXNzYWdlYnVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MmNhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9idXMvcmMubWVzc2FnZWJ1cy5pbgpAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKyMKKyMgbWVzc2FnZWJ1czogICBUaGUgRC1CVVMgc3lzdGVtd2lkZSBtZXNzYWdlIGJ1cworIworIyBjaGtjb25maWc6IDM0NSA5NyAwMworIyBkZXNjcmlwdGlvbjogIFRoaXMgaXMgYSBkYWVtb24gd2hpY2ggYnJvYWRjYXN0cyBub3RpZmljYXRpb25zIG9mIHN5c3RlbSBldmVudHMgXAorIyAgICAgICAgICAgICAgIGFuZCBvdGhlciBtZXNzYWdlcy4gU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvCisjCisjIHByb2Nlc3NuYW1lOiBkYnVzLWRhZW1vbgorIyBwaWRmaWxlOiBAREJVU19TWVNURU1fUElEX0ZJTEVACisjCisKKyMgU2FuaXR5IGNoZWNrcy4KKyNbIC14IEBFWFBBTkRFRF9CSU5ESVJAL2RidXMtZGFlbW9uIF0gfHwgZXhpdCAwCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisjLiBARVhQQU5ERURfU1lTQ09ORkRJUkAvcmMuZC9pbml0LmQvZnVuY3Rpb25zCisKKyMgc28gd2UgY2FuIHJlYXJyYW5nZSB0aGlzIGVhc2lseQorI3Byb2Nlc3NuYW1lPWRidXMtZGFlbW9uCisjc2VydmljZW5hbWU9bWVzc2FnZWJ1cworCisjUkVUVkFMPTAKKworc3RhcnQoKSB7CisgICAgZWNobyAiU3RhcnRpbmcgc3lzdGVtIG1lc3NhZ2UgYnVzIgorICAgIGlmIFsgLXggQEVYUEFOREVEX0JJTkRJUkAvZGJ1cy11dWlkZ2VuIF0gOyB0aGVuCisgICAgICAgIEBFWFBBTkRFRF9CSU5ESVJAL2RidXMtdXVpZGdlbiAtLWVuc3VyZQorICAgIGZpCisKKyAgICBpZiBbIC14IEBFWFBBTkRFRF9CSU5ESVJAL2RidXMtZGFlbW9uIF07dGhlbgorICAgIAlARVhQQU5ERURfQklORElSQC9kYnVzLWRhZW1vbiAtLXN5c3RlbQorICAgIGZpCisgICAgI2RhZW1vbiAtLWNoZWNrICRzZXJ2aWNlbmFtZSAkcHJvY2Vzc25hbWUgLS1zeXN0ZW0KKyAgICAjUkVUVkFMPSQ/CisgICAgI2VjaG8KKyAgICAjWyAkUkVUVkFMIC1lcSAwIF0gJiYgdG91Y2ggQEVYUEFOREVEX0xPQ0FMU1RBVEVESVJAL2xvY2svc3Vic3lzLyRzZXJ2aWNlbmFtZQorfQorCitzdG9wKCkgeworICAgIGVjaG8gIlN0b3BwaW5nIHN5c3RlbSBtZXNzYWdlIGJ1cyIKKworICAgICMjIHdlIGRvbid0IHdhbnQgdG8ga2lsbCBhbGwgdGhlIHBlci11c2VyICRwcm9jZXNzbmFtZSwgd2Ugd2FudAorICAgICMjIHRvIHVzZSB0aGUgcGlkIGZpbGUgKm9ubHkqOyBiZWNhdXNlIHdlIHVzZSB0aGUgZmFrZSBub25leGlzdGVudCAKKyAgICAjIyBwcm9ncmFtIG5hbWUgIiRzZXJ2aWNlbmFtZSIgdGhhdCBzaG91bGQgYmUgc2FmZS1pc2gKKyAgICBraWxsYWxsIGRidXMtZGFlbW9uCisgICAgI1JFVFZBTD0kPworICAgICNlY2hvCisgICAgI2lmIFsgJFJFVFZBTCAtZXEgMCBdOyB0aGVuCisgICAgIyAgICBybSAtZiBARVhQQU5ERURfTE9DQUxTVEFURURJUkAvbG9jay9zdWJzeXMvJHNlcnZpY2VuYW1lCisgICAgIyAgICBybSAtZiBAREJVU19TWVNURU1fUElEX0ZJTEVACisgICAgI2ZpCit9CisKKyMgU2VlIGhvdyB3ZSB3ZXJlIGNhbGxlZC4KK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBzdGFydAorICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIHN0b3AKKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAkc2VydmljZW5hbWUKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIDs7CisgICAgcmVzdGFydCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydAorICAgICAgICA7OworICAgIHJlbG9hZCkKKyAgICAgICAgZWNobyAiTWVzc2FnZSBidXMgY2FuJ3QgcmVsb2FkIGl0cyBjb25maWd1cmF0aW9uLCB5b3UgaGF2ZSB0byByZXN0YXJ0IGl0IgorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICQiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHJlbG9hZH0iCisgICAgICAgIDs7Citlc2FjCitleGl0ICRSRVRWQUwKZGlmZiAtLWdpdCBhL2J1cy9zZWxpbnV4LmMgYi9idXMvc2VsaW51eC5jCmluZGV4IGQwOWFmYjQuLmNhODg0ZWYgMTAwNjQ0Ci0tLSBhL2J1cy9zZWxpbnV4LmMKKysrIGIvYnVzL3NlbGludXguYwpAQCAtNzEsNyArNzEsNyBAQAogc3RhdGljIHB0aHJlYWRfdCBhdmNfbm90aWZ5X3RocmVhZDsKIAogLyogUHJvdG90eXBlcyBmb3IgQVZDIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICovCi1zdGF0aWMgdm9pZCBsb2dfY2FsbGJhY2sgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfREJVU19HTlVDX1BSSU5URiAoMSwgMik7CitzdGF0aWMgdm9pZCBsb2dfY2FsbGJhY2sgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHN0YXRpYyB2b2lkIGxvZ19hdWRpdF9jYWxsYmFjayAodm9pZCAqZGF0YSwgc2VjdXJpdHlfY2xhc3NfdCBjbGFzcywgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVmdCk7CiBzdGF0aWMgdm9pZCAqYXZjX2NyZWF0ZV90aHJlYWQgKHZvaWQgKCpydW4pICh2b2lkKSk7CiBzdGF0aWMgdm9pZCBhdmNfc3RvcF90aHJlYWQgKHZvaWQgKnRocmVhZCk7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgcmMgPSBwdGhyZWFkX2NyZWF0ZSAoJmF2Y19ub3RpZnlfdGhyZWFkLCBOVUxMLCAodm9pZCAqKCopICh2b2lkICopKSBydW4sIE5VTEwpOwogICBpZiAocmMgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHN0YXJ0IEFWQyB0aHJlYWQ6ICVzIiwgX2RidXNfc3RyZXJyb3IgKHJjKSk7CisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHN0YXJ0IEFWQyB0aHJlYWQ6ICVzXG4iLCBfZGJ1c19zdHJlcnJvciAocmMpKTsKICAgICAgIGV4aXQgKDEpOwogICAgIH0KICAgcmV0dXJuICZhdmNfbm90aWZ5X3RocmVhZDsKQEAgLTIyNyw3ICsyMjcsNyBAQAogICBhdmNfbXV0ZXggPSBkYnVzX25ldyAocHRocmVhZF9tdXRleF90LCAxKTsKICAgaWYgKGF2Y19tdXRleCA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgY3JlYXRlIG11dGV4OiAlcyIsIF9kYnVzX3N0cmVycm9yIChlcnJubykpOworICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBjcmVhdGUgbXV0ZXg6ICVzXG4iLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKICAgICAgIGV4aXQgKDEpOwogICAgIH0KICAgcHRocmVhZF9tdXRleF9pbml0IChhdmNfbXV0ZXgsIE5VTEwpOwpAQCAtMjcyLDE5ICsyNzIsNiBAQAogI2VuZGlmIC8qIEhBVkVfU0VMSU5VWCAqLwogfQogCi1CdXNTRUxpbnV4SUQqCi1idXNfc2VsaW51eF9nZXRfc2VsZiAodm9pZCkKLXsKLSNpZmRlZiBIQVZFX1NFTElOVVgKLSAgaWYoYnVzX3NlbGludXhfZW5hYmxlZCAoKSkKLSAgICByZXR1cm4gQlVTX1NJRF9GUk9NX1NFTElOVVggKGJ1c19zaWQpOwotICBlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQotICByZXR1cm4gTlVMTDsKLSNlbmRpZiAvKiBIQVZFX1NFTElOVVggKi8KLX0KLQogLyoqCiAgKiBEbyBlYXJseSBpbml0aWFsaXphdGlvbjsgZGV0ZXJtaW5lIHdoZXRoZXIgU0VMaW51eCBpcyBlbmFibGVkLgogICovCkBAIC0yOTksNyArMjg2LDcgQEAKICAgciA9IGlzX3NlbGludXhfZW5hYmxlZCAoKTsKICAgaWYgKHIgPCAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgdGVsbCBpZiBTRUxpbnV4IGlzIGVuYWJsZWQ6ICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgdGVsbCBpZiBTRUxpbnV4IGlzIGVuYWJsZWQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQpAQCAtMzUyLDcgKzMzOSw3IEBACiAKICAgaWYgKHNlbGludXhfc2V0X21hcHBpbmcgKGRidXNfbWFwKSA8IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBzZXQgdXAgc2VjdXJpdHkgY2xhc3MgbWFwcGluZyAoc2VsaW51eF9zZXRfbWFwcGluZygpOiVzKS4iLAorICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBzZXQgdXAgc2VjdXJpdHkgY2xhc3MgbWFwcGluZyAoc2VsaW51eF9zZXRfbWFwcGluZygpOiVzKS5cbiIsCiAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICByZXR1cm4gRkFMU0U7IAogICAgIH0KQEAgLTM2MCw3ICszNDcsNyBAQAogICBhdmNfZW50cnlfcmVmX2luaXQgKCZhZXJlZik7CiAgIGlmIChhdmNfaW5pdCAoImF2YyIsICZtZW1fY2IsICZsb2dfY2IsICZ0aHJlYWRfY2IsICZsb2NrX2NiKSA8IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBzdGFydCBBY2Nlc3MgVmVjdG9yIENhY2hlIChBVkMpLiIpOworICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBzdGFydCBBY2Nlc3MgVmVjdG9yIENhY2hlIChBVkMpLlxuIik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICBlbHNlCkBAIC0zNzEsNyArMzU4LDcgQEAKICAgaWYgKGF2Y19hZGRfY2FsbGJhY2sgKHBvbGljeV9yZWxvYWRfY2FsbGJhY2ssIEFWQ19DQUxMQkFDS19SRVNFVCwKICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgMCwgMCkgPCAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gYWRkIHBvbGljeSByZWxvYWQgY2FsbGJhY2s6ICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gYWRkIHBvbGljeSByZWxvYWQgY2FsbGJhY2s6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICBhdmNfZGVzdHJveSAoKTsKICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTQwMiw2ICszODksMzcgQEAKIH0KIAogLyoqCisgKiBEZWNyZW1lbnQgU0lEIHJlZmVyZW5jZSBjb3VudC4KKyAqIAorICogQHBhcmFtIHNpZCB0aGUgU0lEIHRvIGRlY3JlbWVudAorICovCit2b2lkCitidXNfc2VsaW51eF9pZF91bnJlZiAoQnVzU0VMaW51eElEICpzaWQpCit7CisjaWZkZWYgSEFWRV9TRUxJTlVYCisgIGlmICghc2VsaW51eF9lbmFibGVkKQorICAgIHJldHVybjsKKworICBfZGJ1c19hc3NlcnQgKHNpZCAhPSBOVUxMKTsKKyAgCisgIHNpZHB1dCAoU0VMSU5VWF9TSURfRlJPTV9CVVMgKHNpZCkpOworI2VuZGlmIC8qIEhBVkVfU0VMSU5VWCAqLworfQorCit2b2lkCitidXNfc2VsaW51eF9pZF9yZWYgKEJ1c1NFTGludXhJRCAqc2lkKQoreworI2lmZGVmIEhBVkVfU0VMSU5VWAorICBpZiAoIXNlbGludXhfZW5hYmxlZCkKKyAgICByZXR1cm47CisKKyAgX2RidXNfYXNzZXJ0IChzaWQgIT0gTlVMTCk7CisgIAorICBzaWRnZXQgKFNFTElOVVhfU0lEX0ZST01fQlVTIChzaWQpKTsKKyNlbmRpZiAvKiBIQVZFX1NFTElOVVggKi8KK30KKworLyoqCiAgKiBEZXRlcm1pbmUgaWYgdGhlIFNFTGludXggc2VjdXJpdHkgcG9saWN5IGFsbG93cyB0aGUgZ2l2ZW4gc2VuZGVyCiAgKiBzZWN1cml0eSBjb250ZXh0IHRvIGdvIHRvIHRoZSBnaXZlbiByZWNpcGllbnQgc2VjdXJpdHkgY29udGV4dC4KICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGFyZSB0byBiZQpAQCAtNDMyLDcgKzQ1MCw3IEBACiAgIGlmIChhdmNfaGFzX3Blcm0gKFNFTElOVVhfU0lEX0ZST01fQlVTIChzZW5kZXJfc2lkKSwKICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfc2lkID8KICAgICAgICAgICAgICAgICAgICAgU0VMSU5VWF9TSURfRlJPTV9CVVMgKG92ZXJyaWRlX3NpZCkgOgotICAgICAgICAgICAgICAgICAgICBidXNfc2lkLAorICAgICAgICAgICAgICAgICAgICBTRUxJTlVYX1NJRF9GUk9NX0JVUyAoYnVzX3NpZCksIAogICAgICAgICAgICAgICAgICAgICB0YXJnZXRfY2xhc3MsIHJlcXVlc3RlZCwgJmFlcmVmLCBhdXhkYXRhKSA8IDApCiAgICAgewogICAgIHN3aXRjaCAoZXJybm8pCkBAIC01MzUsNyArNTUzLDYgQEAKIAkJCSBjb25zdCBjaGFyICAgICAgICAgKm1lbWJlciwKIAkJCSBjb25zdCBjaGFyICAgICAgICAgKmVycm9yX25hbWUsCiAJCQkgY29uc3QgY2hhciAgICAgICAgICpkZXN0aW5hdGlvbiwKLQkJCSBCdXNBY3RpdmF0aW9uRW50cnkgKmFjdGl2YXRpb25fZW50cnksCiAJCQkgREJ1c0Vycm9yICAgICAgICAgICplcnJvcikKIHsKICNpZmRlZiBIQVZFX1NFTElOVVgKQEAgLTU0OSwxMCArNTY2LDYgQEAKICAgaWYgKCFzZWxpbnV4X2VuYWJsZWQpCiAgICAgcmV0dXJuIFRSVUU7CiAKLSAgLyogV2UgZG8gbm90IG1lZGlhdGUgYWN0aXZhdGlvbiBhdHRlbXB0cyB5ZXQuICovCi0gIGlmIChhY3RpdmF0aW9uX2VudHJ5KQotICAgIHJldHVybiBUUlVFOwotCiAgIGlmICghc2VuZGVyIHx8ICFkYnVzX2Nvbm5lY3Rpb25fZ2V0X3VuaXhfcHJvY2Vzc19pZCAoc2VuZGVyLCAmc3BpZCkpCiAgICAgc3BpZCA9IDA7CiAgIGlmICghcHJvcG9zZWRfcmVjaXBpZW50IHx8ICFkYnVzX2Nvbm5lY3Rpb25fZ2V0X3VuaXhfcHJvY2Vzc19pZCAocHJvcG9zZWRfcmVjaXBpZW50LCAmdHBpZCkpCkBAIC02MjAsOCArNjMzLDcgQEAKICAgICB9CiAKICAgc2VuZGVyX3NpZCA9IGJ1c19jb25uZWN0aW9uX2dldF9zZWxpbnV4X2lkIChzZW5kZXIpOwotCi0gIC8qIEEgTlVMTCBwcm9wb3NlZF9yZWNpcGllbnQgd2l0aCBubyBhY3RpdmF0aW9uIGVudHJ5IG1lYW5zIHRoZSBidXMgaXRzZWxmLiAqLworICAvKiBBIE5VTEwgcHJvcG9zZWRfcmVjaXBpZW50IG1lYW5zIHRoZSBidXMgaXRzZWxmLiAqLwogICBpZiAocHJvcG9zZWRfcmVjaXBpZW50KQogICAgIHJlY2lwaWVudF9zaWQgPSBidXNfY29ubmVjdGlvbl9nZXRfc2VsaW51eF9pZCAocHJvcG9zZWRfcmVjaXBpZW50KTsKICAgZWxzZQpAQCAtNzU3LDcgKzc2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2V0dGluZyBTSUQgZnJvbSBjb250ZXh0IFwiJXNcIjogJXNcbiIsCiAJCQljb24sIF9kYnVzX3N0cmVycm9yIChlcnJubykpOwogICAgICAgCi0gICAgICBfZGJ1c193YXJuICgiRXJyb3IgZ2V0dGluZyBTSUQgZnJvbSBjb250ZXh0IFwiJXNcIjogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkVycm9yIGdldHRpbmcgU0lEIGZyb20gY29udGV4dCBcIiVzXCI6ICVzXG4iLAogCQkgIGNvbiwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAKICAgICAgIGZyZWVjb24gKGNvbik7CkBAIC03NzEsNiArNzgzLDIxIEBACiAjZW5kaWYgLyogSEFWRV9TRUxJTlVYICovCiB9CiAKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgZnJlZWluZyBoYXNoIHRhYmxlIGRhdGEuICBUaGVzZSBTSURzCisgKiBzaG91bGQgbm8gbG9uZ2VyIGJlIHJlZmVyZW5jZWQuCisgKi8KK3N0YXRpYyB2b2lkCitidXNfc2VsaW51eF9pZF90YWJsZV9mcmVlX3ZhbHVlIChCdXNTRUxpbnV4SUQgKnNpZCkKK3sKKyNpZmRlZiBIQVZFX1NFTElOVVgKKyAgLyogTlVMTCBzb21ldGltZXMgZHVlIHRvIGhvdyBEQnVzSGFzaFRhYmxlIHdvcmtzICovCisgIGlmIChzaWQpCisgICAgYnVzX3NlbGludXhfaWRfdW5yZWYgKHNpZCk7CisjZW5kaWYgLyogSEFWRV9TRUxJTlVYICovCit9CisKIC8qKgogICogQ3JlYXRlcyBhIG5ldyB0YWJsZSBtYXBwaW5nIHNlcnZpY2UgbmFtZXMgdG8gc2VjdXJpdHkgSUQuCiAgKiBBIHNlY3VyaXR5IElEIGlzIGEgImNvbXBpbGVkIiBzZWN1cml0eSBjb250ZXh0LCBhIHNlY3VyaXR5CkBAIC03ODIsNyArODA5LDggQEAKIGJ1c19zZWxpbnV4X2lkX3RhYmxlX25ldyAodm9pZCkKIHsKICAgcmV0dXJuIF9kYnVzX2hhc2hfdGFibGVfbmV3IChEQlVTX0hBU0hfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQnVzRnJlZUZ1bmN0aW9uKSBkYnVzX2ZyZWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQnVzRnJlZUZ1bmN0aW9uKSBkYnVzX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERCdXNGcmVlRnVuY3Rpb24pIGJ1c19zZWxpbnV4X2lkX3RhYmxlX2ZyZWVfdmFsdWUpOwogfQogCiAvKiogCkBAIC04MjIsNyArODUwLDcgQEAKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAJfQogCi0gICAgICBfZGJ1c193YXJuICgiRXJyb3IgZ2V0dGluZyBTSUQgZnJvbSBjb250ZXh0IFwiJXNcIjogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkVycm9yIGdldHRpbmcgU0lEIGZyb20gY29udGV4dCBcIiVzXCI6ICVzXG4iLAogCQkgIChjaGFyICopIHNlcnZpY2VfY29udGV4dCwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmVycm9yIChlcnJubykpOwogICAgICAgZ290byBvdXQ7CkBAIC04NDQsNiArODcyLDkgQEAKICAgcmV0dmFsID0gVFJVRTsKICAgCiAgb3V0OgorICBpZiAoc2lkICE9IFNFQ1NJRF9XSUxEKQorICAgIHNpZHB1dCAoc2lkKTsKKwogICBpZiAoa2V5KQogICAgIGRidXNfZnJlZSAoa2V5KTsKIApAQCAtOTc4LDYgKzEwMDksNyBAQAogCiAgIGlmIChidXNfc2lkICE9IFNFQ1NJRF9XSUxEKQogICAgIHsKKyAgICAgIHNpZHB1dCAoYnVzX3NpZCk7CiAgICAgICBidXNfc2lkID0gU0VDU0lEX1dJTEQ7CiAKICAgICAgIGJ1c19hdmNfcHJpbnRfc3RhdHMgKCk7CmRpZmYgLS1naXQgYS9idXMvc2VsaW51eC5oIGIvYnVzL3NlbGludXguaAppbmRleCBhMDM4M2NkLi5lNDRjOTdlIDEwMDY0NAotLS0gYS9idXMvc2VsaW51eC5oCisrKyBiL2J1cy9zZWxpbnV4LmgKQEAgLTMzLDcgKzMzLDggQEAKIAogZGJ1c19ib29sX3QgYnVzX3NlbGludXhfZW5hYmxlZCAgKHZvaWQpOwogCi1CdXNTRUxpbnV4SUQgKmJ1c19zZWxpbnV4X2dldF9zZWxmICh2b2lkKTsKK3ZvaWQgYnVzX3NlbGludXhfaWRfcmVmICAgIChCdXNTRUxpbnV4SUQgKnNpZCk7Cit2b2lkIGJ1c19zZWxpbnV4X2lkX3VucmVmICAoQnVzU0VMaW51eElEICpzaWQpOwogCiBEQnVzSGFzaFRhYmxlKiBidXNfc2VsaW51eF9pZF90YWJsZV9uZXcgICAgKHZvaWQpOwogQnVzU0VMaW51eElEKiAgYnVzX3NlbGludXhfaWRfdGFibGVfbG9va3VwIChEQnVzSGFzaFRhYmxlICAgICpzZXJ2aWNlX3RhYmxlLApAQCAtNjAsNyArNjEsNiBAQAogCQkJCQkJY29uc3QgY2hhciAgICAgKm1lbWJlciwKIAkJCQkJCWNvbnN0IGNoYXIgICAgICplcnJvcl9uYW1lLAogCQkJCQkJY29uc3QgY2hhciAgICAgKmRlc3RpbmF0aW9uLAotCQkJCQkJQnVzQWN0aXZhdGlvbkVudHJ5ICphY3RpdmF0aW9uX2VudHJ5LAogCQkJCQkJREJ1c0Vycm9yICAgICAgKmVycm9yKTsKIAogQnVzU0VMaW51eElEKiBidXNfc2VsaW51eF9pbml0X2Nvbm5lY3Rpb25faWQgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLApkaWZmIC0tZ2l0IGEvYnVzL3NlcnZpY2VzLmMgYi9idXMvc2VydmljZXMuYwppbmRleCAxMjdlZGRhLi42YTRjODg0IDEwMDY0NAotLS0gYS9idXMvc2VydmljZXMuYworKysgYi9idXMvc2VydmljZXMuYwpAQCAtMzkyLDggKzM5Miw3IEBACiAgIEJ1c0FjdGl2YXRpb24gICphY3RpdmF0aW9uOwogICBCdXNTRUxpbnV4SUQgKnNpZDsKICAgQnVzT3duZXIgKnByaW1hcnlfb3duZXI7Ci0gIGludCBsaW1pdDsKLQorIAogICByZXR2YWwgPSBGQUxTRTsKIAogICBpZiAoIV9kYnVzX3ZhbGlkYXRlX2J1c19uYW1lIChzZXJ2aWNlX25hbWUsIDAsCkBAIC00NzksMjQgKzQ3OCwxNSBAQAogICAgICAgZ290byBvdXQ7CiAgICAgfQogCi0gIGxpbWl0ID0gYnVzX2NvbnRleHRfZ2V0X21heF9zZXJ2aWNlc19wZXJfY29ubmVjdGlvbiAocmVnaXN0cnktPmNvbnRleHQpOwotCi0gIGlmIChidXNfY29ubmVjdGlvbl9nZXRfbl9zZXJ2aWNlc19vd25lZCAoY29ubmVjdGlvbikgPj0gbGltaXQpCisgIGlmIChidXNfY29ubmVjdGlvbl9nZXRfbl9zZXJ2aWNlc19vd25lZCAoY29ubmVjdGlvbikgPj0KKyAgICAgIGJ1c19jb250ZXh0X2dldF9tYXhfc2VydmljZXNfcGVyX2Nvbm5lY3Rpb24gKHJlZ2lzdHJ5LT5jb250ZXh0KSkKICAgICB7Ci0gICAgICBEQnVzRXJyb3IgdG1wX2Vycm9yOwotCi0gICAgICBkYnVzX2Vycm9yX2luaXQgKCZ0bXBfZXJyb3IpOwotICAgICAgZGJ1c19zZXRfZXJyb3IgKCZ0bXBfZXJyb3IsIERCVVNfRVJST1JfTElNSVRTX0VYQ0VFREVELAorICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0xJTUlUU19FWENFRURFRCwKICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBcIiVzXCIgaXMgbm90IGFsbG93ZWQgdG8gb3duIG1vcmUgc2VydmljZXMgIgotICAgICAgICAgICAgICAgICAgICAgICIoaW5jcmVhc2UgbGltaXRzIGluIGNvbmZpZ3VyYXRpb24gZmlsZSBpZiByZXF1aXJlZDsgIgotICAgICAgICAgICAgICAgICAgICAgICJtYXhfbmFtZXNfcGVyX2Nvbm5lY3Rpb249JWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAiKGluY3JlYXNlIGxpbWl0cyBpbiBjb25maWd1cmF0aW9uIGZpbGUgaWYgcmVxdWlyZWQpIiwKICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9pc19hY3RpdmUgKGNvbm5lY3Rpb24pID8KICAgICAgICAgICAgICAgICAgICAgICBidXNfY29ubmVjdGlvbl9nZXRfbmFtZSAoY29ubmVjdGlvbikgOgotICAgICAgICAgICAgICAgICAgICAgICIoaW5hY3RpdmUpIiwKLSAgICAgICAgICAgICAgICAgICAgICBsaW1pdCk7Ci0gICAgICBidXNfY29udGV4dF9sb2cgKHJlZ2lzdHJ5LT5jb250ZXh0LCBEQlVTX1NZU1RFTV9MT0dfV0FSTklORywKLSAgICAgICAgICAiJXMiLCB0bXBfZXJyb3IubWVzc2FnZSk7Ci0gICAgICBkYnVzX21vdmVfZXJyb3IgKCZ0bXBfZXJyb3IsIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAiKGluYWN0aXZlKSIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogICAKZGlmZiAtLWdpdCBhL2J1cy9zaWduYWxzLmMgYi9idXMvc2lnbmFscy5jCmluZGV4IDZiN2E0NjQuLmU4ZGVmOWYgMTAwNjQ0Ci0tLSBhL2J1cy9zaWduYWxzLmMKKysrIGIvYnVzL3NpZ25hbHMuYwpAQCAtODcxLDcgKzg3MSw3IEBACiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTUFUQ0hfUlVMRV9JTlZBTElELAotICAgICAgICAgICAgICAiS2V5ICclcycgaW4gbWF0Y2ggcnVsZSBjb250YWlucyBqdW5rIGFmdGVyIGFyZ3VtZW50IG51bWJlciAoJWx1KS4gT25seSAnYXJnJWx1cGF0aCcgKGZvciBleGFtcGxlKSBvciAnYXJnMG5hbWVzcGFjZScgYXJlIHZhbGlkIiwga2V5LCBhcmcsIGFyZyk7CisgICAgICAgICAgICAgICJLZXkgJyVzJyBpbiBtYXRjaCBydWxlIGNvbnRhaW5zIGp1bmsgYWZ0ZXIgYXJndW1lbnQgbnVtYmVyICgldSkuIE9ubHkgJ2FyZyV1cGF0aCcgKGZvciBleGFtcGxlKSBvciAnYXJnMG5hbWVzcGFjZScgYXJlIHZhbGlkIiwga2V5LCBhcmcsIGFyZyk7CiAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICB9CkBAIC04ODksNyArODg5LDcgQEAKICAgICAgIHJ1bGUtPmFyZ3NbYXJnXSAhPSBOVUxMKQogICAgIHsKICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9NQVRDSF9SVUxFX0lOVkFMSUQsCi0gICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50ICVzIG1hdGNoZWQgbW9yZSB0aGFuIG9uY2UgaW4gbWF0Y2ggcnVsZVxuIiwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgJWQgbWF0Y2hlZCBtb3JlIHRoYW4gb25jZSBpbiBtYXRjaCBydWxlXG4iLCBrZXkpOwogICAgICAgZ290byBmYWlsZWQ7CiAgICAgfQogICAKQEAgLTE4ODcsMTggKzE4ODcsOSBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICAgIGlmIChhZGRyZXNzZWRfcmVjaXBpZW50ID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBJZiB0aGUgbWVzc2FnZSBpcyBnb2luZyB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIGRidXMtZGFlbW9uCi0gICAgICAgICAgICogaXRzZWxmLCBpdHMgZGVzdGluYXRpb24gd2lsbCBiZSAib3JnLmZyZWVkZXNrdG9wLkRCdXMiLAotICAgICAgICAgICAqIHdoaWNoIHdlIGFnYWluIG1hdGNoIGFnYWluc3QgdGhlIHJ1bGUgKHNlZSBidXNfZGlzcGF0Y2goKQotICAgICAgICAgICAqIGluIGJ1cy9kaXNwYXRjaC5jLCB3aGljaCBjaGVja3MgZm9yIG8uZmQuREJ1cyBmaXJzdCkuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiBJZiB3ZSBhcmUgbW9uaXRvcmluZyBhbmQgd2UgZG9uJ3Qga25vdyB3aG8gaXMgZ29pbmcgdG8gcmVjZWl2ZQotICAgICAgICAgICAqIHRoZSBtZXNzYWdlIChmb3IgaW5zdGFuY2UgYmVjYXVzZSB0aGV5IGhhdmVuJ3QgYmVlbiBhY3RpdmF0ZWQgeWV0KSwKLSAgICAgICAgICAgKiBhc3N1bWUgdGhleSB3aWxsIG93biB0aGUgcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgYW5kIG5vIG90aGVyLAotICAgICAgICAgICAqIGFuZCBtYXRjaCB0aGUgcnVsZSdzIGRlc3RpbmF0aW9uIGFnYWluc3QgdGhhdC4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBpZiAoc3RyY21wIChydWxlLT5kZXN0aW5hdGlvbiwgZGVzdGluYXRpb24pICE9IDApCisgICAgICAgIHsgICAgICAgICAgCisgICAgICAgICAgaWYgKHN0cmNtcCAocnVsZS0+ZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgREJVU19TRVJWSUNFX0RCVVMpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTIyMDEsNyArMjE5Miw3IEBACiAKICAgaWYgKHNob3VsZF9zdWNjZWVkICYmIHJ1bGUgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBhcnNlOiAlczogJXM6IFwiJXNcIiIsCisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHBhcnNlOiAlczogJXM6IFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZzdHIpKTsKICAgICAgIGV4aXQgKDEpOwpAQCAtMjIwOSw3ICsyMjAwLDcgQEAKIAogICBpZiAoIXNob3VsZF9zdWNjZWVkICYmIHJ1bGUgIT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIGZhaWwgdG8gcGFyc2U6IFwiJXNcIiIsCisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIGZhaWwgdG8gcGFyc2U6IFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnN0cikpOwogICAgICAgZXhpdCAoMSk7CiAgICAgfQpAQCAtMjU0OSw3ICsyNTQwLDcgQEAKIAogICAgICAgaWYgKCFtYXRjaF9ydWxlX2VxdWFsIChmaXJzdCwgc2Vjb25kKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJydWxlICVzIGFuZCAlcyBzaG91bGQgaGF2ZSBiZWVuIGVxdWFsIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgicnVsZSAlcyBhbmQgJXMgc2hvdWxkIGhhdmUgYmVlbiBlcXVhbFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBlcXVhbGl0eV90ZXN0c1tpXS5maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBlcXVhbGl0eV90ZXN0c1tpXS5zZWNvbmQpOwogICAgICAgICAgIGV4aXQgKDEpOwpAQCAtMjU2Miw5ICsyNTUzLDcgQEAKICAgICAgIF9kYnVzX2Fzc2VydCAoc2Vjb25kX3N0ciAhPSBOVUxMKTsKICAgICAgIF9kYnVzX2Fzc2VydCAoc3RyY21wIChmaXJzdF9zdHIsIHNlY29uZF9zdHIpID09IDApOwogICAgICAgZmlyc3RfcmVwYXJzZWQgPSBjaGVja19wYXJzZSAoVFJVRSwgZmlyc3Rfc3RyKTsKLSAgICAgIF9kYnVzX2Fzc2VydCAoZmlyc3RfcmVwYXJzZWQgIT0gTlVMTCk7CiAgICAgICBzZWNvbmRfcmVwYXJzZWQgPSBjaGVja19wYXJzZSAoVFJVRSwgc2Vjb25kX3N0cik7Ci0gICAgICBfZGJ1c19hc3NlcnQgKHNlY29uZF9yZXBhcnNlZCAhPSBOVUxMKTsKICAgICAgIF9kYnVzX2Fzc2VydCAobWF0Y2hfcnVsZV9lcXVhbCAoZmlyc3QsIGZpcnN0X3JlcGFyc2VkKSk7CiAgICAgICBfZGJ1c19hc3NlcnQgKG1hdGNoX3J1bGVfZXF1YWwgKHNlY29uZCwgc2Vjb25kX3JlcGFyc2VkKSk7CiAgICAgICBidXNfbWF0Y2hfcnVsZV91bnJlZiAoZmlyc3RfcmVwYXJzZWQpOwpAQCAtMjU4MywxMSArMjU3MiwxMCBAQAogICAgICAgICAgIGlmIChpICE9IGopCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNlY29uZCA9IGNoZWNrX3BhcnNlIChUUlVFLCBlcXVhbGl0eV90ZXN0c1tqXS5zZWNvbmQpOwotICAgICAgICAgICAgICBfZGJ1c19hc3NlcnQgKHNlY29uZCAhPSBOVUxMKTsKIAogICAgICAgICAgICAgICBpZiAobWF0Y2hfcnVsZV9lcXVhbCAoZmlyc3QsIHNlY29uZCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoInJ1bGUgJXMgYW5kICVzIHNob3VsZCBub3QgaGF2ZSBiZWVuIGVxdWFsIiwKKyAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJydWxlICVzIGFuZCAlcyBzaG91bGQgbm90IGhhdmUgYmVlbiBlcXVhbFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsaXR5X3Rlc3RzW2ldLmZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxpdHlfdGVzdHNbal0uc2Vjb25kKTsKICAgICAgICAgICAgICAgICAgIGV4aXQgKDEpOwpAQCAtMjY5Nyw3ICsyNjg1LDcgQEAKIAogICBpZiAobWF0Y2hlZCAhPSBleHBlY3RlZF90b19tYXRjaCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgcnVsZSAlcyB0byAlcyBtZXNzYWdlICVkLCBmYWlsZWQiLAorICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIHJ1bGUgJXMgdG8gJXMgbWVzc2FnZSAlZCwgZmFpbGVkXG4iLAogICAgICAgICAgICAgICAgICAgcnVsZV90ZXh0LCBleHBlY3RlZF90b19tYXRjaCA/CiAgICAgICAgICAgICAgICAgICAibWF0Y2giIDogIm5vdCBtYXRjaCIsIG51bWJlcik7CiAgICAgICBleGl0ICgxKTsKQEAgLTI4MjYsNyArMjgxNCw3IEBACiAgIGlmIChtYXRjaGVkICE9IHNob3VsZF9tYXRjaCkKICAgICB7CiAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgcnVsZSAlcyB0byAlcyBtZXNzYWdlICIKLSAgICAgICAgICAgICAgICAgICJ3aXRoIGZpcnN0IGFyZyAlcyBvZiB0eXBlICclYycsIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAid2l0aCBmaXJzdCBhcmcgJXMgb2YgdHlwZSAnJWMnLCBmYWlsZWRcbiIsCiAgICAgICAgICAgICAgICAgICBydWxlX3RleHQsCiAgICAgICAgICAgICAgICAgICBzaG91bGRfbWF0Y2ggPyAibWF0Y2giIDogIm5vdCBtYXRjaCIsCiAgICAgICAgICAgICAgICAgICBwYXRoLApkaWZmIC0tZ2l0IGEvYnVzL3N0YXRzLmMgYi9idXMvc3RhdHMuYwppbmRleCAxNTgyMjU1Li5kYWNlMGUyIDEwMDY0NAotLS0gYS9idXMvc3RhdHMuYworKysgYi9idXMvc3RhdHMuYwpAQCAtNTEsNiArNTEsOSBAQAogCiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCisgIGlmICghYnVzX2RyaXZlcl9jaGVja19tZXNzYWdlX2lzX2Zvcl91cyAobWVzc2FnZSwgZXJyb3IpKQorICAgIHJldHVybiBGQUxTRTsKKwogICBjb250ZXh0ID0gYnVzX3RyYW5zYWN0aW9uX2dldF9jb250ZXh0ICh0cmFuc2FjdGlvbik7CiAgIGNvbm5lY3Rpb25zID0gYnVzX2NvbnRleHRfZ2V0X2Nvbm5lY3Rpb25zIChjb250ZXh0KTsKIApAQCAtMTIwLDM3ICsxMjMsNDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgKmVycm9yKQogewotICBCdXNEcml2ZXJGb3VuZCBmb3VuZDsKKyAgY29uc3QgY2hhciAqYnVzX25hbWUgPSBOVUxMOworICBEQnVzU3RyaW5nIGJ1c19uYW1lX3N0cjsKICAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKICAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIGFycl9pdGVyOwogICBzdGF0aWMgZGJ1c191aW50MzJfdCBzdGF0c19zZXJpYWwgPSAwOwogICBkYnVzX3VpbnQzMl90IGluX21lc3NhZ2VzLCBpbl9ieXRlcywgaW5fZmRzLCBpbl9wZWFrX2J5dGVzLCBpbl9wZWFrX2ZkczsKICAgZGJ1c191aW50MzJfdCBvdXRfbWVzc2FnZXMsIG91dF9ieXRlcywgb3V0X2Zkcywgb3V0X3BlYWtfYnl0ZXMsIG91dF9wZWFrX2ZkczsKKyAgQnVzUmVnaXN0cnkgKnJlZ2lzdHJ5OworICBCdXNTZXJ2aWNlICpzZXJ2aWNlOwogICBEQnVzQ29ubmVjdGlvbiAqc3RhdHNfY29ubmVjdGlvbjsKIAogICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKIAotICBmb3VuZCA9IGJ1c19kcml2ZXJfZ2V0X2Nvbm5faGVscGVyIChjYWxsZXJfY29ubmVjdGlvbiwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRpc3RpY3MiLCBOVUxMLCAmc3RhdHNfY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICBpZiAoIWJ1c19kcml2ZXJfY2hlY2tfbWVzc2FnZV9pc19mb3JfdXMgKG1lc3NhZ2UsIGVycm9yKSkKKyAgICByZXR1cm4gRkFMU0U7CiAKLSAgc3dpdGNoIChmb3VuZCkKKyAgcmVnaXN0cnkgPSBidXNfY29ubmVjdGlvbl9nZXRfcmVnaXN0cnkgKGNhbGxlcl9jb25uZWN0aW9uKTsKKworICBpZiAoISBkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKG1lc3NhZ2UsIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZidXNfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZidXNfbmFtZV9zdHIsIGJ1c19uYW1lKTsKKyAgc2VydmljZSA9IGJ1c19yZWdpc3RyeV9sb29rdXAgKHJlZ2lzdHJ5LCAmYnVzX25hbWVfc3RyKTsKKworICBpZiAoc2VydmljZSA9PSBOVUxMKQogICAgIHsKLSAgICAgIGNhc2UgQlVTX0RSSVZFUl9GT1VORF9TRUxGOgotICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgIkdldENvbm5lY3Rpb25TdGF0cyBpcyBub3QgbWVhbmluZ2Z1bCBmb3IgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIGJ1cyBcIiVzXCIgaXRzZWxmIiwgREJVU19TRVJWSUNFX0RCVVMpOwotICAgICAgICBnb3RvIGZhaWxlZDsKLQotICAgICAgY2FzZSBCVVNfRFJJVkVSX0ZPVU5EX1BFRVI6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEJVU19EUklWRVJfRk9VTkRfRVJST1I6Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTkFNRV9IQVNfTk9fT1dORVIsCisgICAgICAgICAgICAgICAgICAgICAgIkJ1cyBuYW1lICclcycgaGFzIG5vIG93bmVyIiwgYnVzX25hbWUpOworICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAorICBzdGF0c19jb25uZWN0aW9uID0gYnVzX3NlcnZpY2VfZ2V0X3ByaW1hcnlfb3duZXJzX2Nvbm5lY3Rpb24gKHNlcnZpY2UpOwogICBfZGJ1c19hc3NlcnQgKHN0YXRzX2Nvbm5lY3Rpb24gIT0gTlVMTCk7CiAKICAgcmVwbHkgPSBfZGJ1c19hc3ZfbmV3X21ldGhvZF9yZXR1cm4gKG1lc3NhZ2UsICZpdGVyLCAmYXJyX2l0ZXIpOwpAQCAtMjEyLDEyICsyMTgsMTAgQEAKICAgcmV0dXJuIFRSVUU7CiAKIG9vbToKLSAgQlVTX1NFVF9PT00gKGVycm9yKTsKLSAgLyogZmFsbCB0aHJvdWdoICovCi1mYWlsZWQ6CiAgIGlmIChyZXBseSAhPSBOVUxMKQogICAgIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOwogCisgIEJVU19TRVRfT09NIChlcnJvcik7CiAgIHJldHVybiBGQUxTRTsKIH0KIApkaWZmIC0tZ2l0IGEvYnVzL3N5c3RlbS5jb25mLmluIGIvYnVzL3N5c3RlbS5jb25mLmluCmluZGV4IGYxMzliNTUuLjlmOWJmNDUgMTAwNjQ0Ci0tLSBhL2J1cy9zeXN0ZW0uY29uZi5pbgorKysgYi9idXMvc3lzdGVtLmNvbmYuaW4KQEAgLTY3LDggKzY3LDYgQEAKICAgICAgICAgICAgc2VuZF9pbnRlcmZhY2U9Im9yZy5mcmVlZGVza3RvcC5EQnVzIiAvPgogICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcuZnJlZWRlc2t0b3AuREJ1cyIKICAgICAgICAgICAgc2VuZF9pbnRlcmZhY2U9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIi8+Ci0gICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5mcmVlZGVza3RvcC5EQnVzIgotICAgICAgICAgICBzZW5kX2ludGVyZmFjZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcyIvPgogICAgIDwhLS0gQnV0IGRpc2FsbG93IHNvbWUgc3BlY2lmaWMgYnVzIHNlcnZpY2VzIC0tPgogICAgIDxkZW55IHNlbmRfZGVzdGluYXRpb249Im9yZy5mcmVlZGVza3RvcC5EQnVzIgogICAgICAgICAgIHNlbmRfaW50ZXJmYWNlPSJvcmcuZnJlZWRlc2t0b3AuREJ1cyIKQEAgLTEwMiwyOSArMTAwLDYgQEAKICAgPCEtLSBJbmNsdWRlIGxlZ2FjeSBjb25maWd1cmF0aW9uIGxvY2F0aW9uIC0tPgogICA8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5AU1lTQ09ORkRJUl9GUk9NX1BLR0RBVEFESVJAL2RidXMtMS9zeXN0ZW0uY29uZjwvaW5jbHVkZT4KIAotICA8IS0tIFRoZSBkZWZhdWx0cyBmb3IgdGhlc2UgbGltaXRzIGFyZSBoYXJkLWNvZGVkIGluIGRidXMtZGFlbW9uLgotICAgICAgIFNvbWUgY2xhcmlmaWNhdGlvbnM6Ci0gICAgICAgVGltZXMgYXJlIGluIG1pbGxpc2Vjb25kcyAobXMpOyAxMDAwbXMgPSAxIHNlY29uZAotICAgICAgIDEzMzE2OTE1MiBieXRlcyA9IDEyNyBNaUIKLSAgICAgICAzMzU1NDQzMiBieXRlcyA9IDMyIE1pQgotICAgICAgIDE1MDAwMG1zID0gMi41IG1pbnV0ZXMgLS0+Ci0gIDwhLS0gPGxpbWl0IG5hbWU9Im1heF9pbmNvbWluZ19ieXRlcyI+MTMzMTY5MTUyPC9saW1pdD4gLS0+Ci0gIDwhLS0gPGxpbWl0IG5hbWU9Im1heF9pbmNvbWluZ191bml4X2ZkcyI+NjQ8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ibWF4X291dGdvaW5nX2J5dGVzIj4xMzMxNjkxNTI8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ibWF4X291dGdvaW5nX3VuaXhfZmRzIj42NDwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfbWVzc2FnZV9zaXplIj4zMzU1NDQzMjwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfbWVzc2FnZV91bml4X2ZkcyI+MTY8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ic2VydmljZV9zdGFydF90aW1lb3V0Ij4yNTAwMDwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJhdXRoX3RpbWVvdXQiPjUwMDA8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0icGVuZGluZ19mZF90aW1lb3V0Ij4xNTAwMDA8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ibWF4X2NvbXBsZXRlZF9jb25uZWN0aW9ucyI+MjA0ODwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfaW5jb21wbGV0ZV9jb25uZWN0aW9ucyI+NjQ8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ibWF4X2Nvbm5lY3Rpb25zX3Blcl91c2VyIj4yNTY8L2xpbWl0PiAtLT4KLSAgPCEtLSA8bGltaXQgbmFtZT0ibWF4X3BlbmRpbmdfc2VydmljZV9zdGFydHMiPjUxMjwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfbmFtZXNfcGVyX2Nvbm5lY3Rpb24iPjUxMjwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfbWF0Y2hfcnVsZXNfcGVyX2Nvbm5lY3Rpb24iPjUxMjwvbGltaXQ+IC0tPgotICA8IS0tIDxsaW1pdCBuYW1lPSJtYXhfcmVwbGllc19wZXJfY29ubmVjdGlvbiI+MTI4PC9saW1pdD4gLS0+Ci0KICAgPCEtLSBDb25maWcgZmlsZXMgYXJlIHBsYWNlZCBoZXJlIHRoYXQgYW1vbmcgb3RoZXIgdGhpbmdzLCBwdW5jaCAKICAgICAgICBob2xlcyBpbiB0aGUgYWJvdmUgcG9saWN5IGZvciBzcGVjaWZpYyBzZXJ2aWNlcy4gLS0+CiAgIDxpbmNsdWRlZGlyPnN5c3RlbS5kPC9pbmNsdWRlZGlyPgpAQCAtMTM3LDQgKzExMiw3IEBACiAKICAgPGluY2x1ZGUgaWZfc2VsaW51eF9lbmFibGVkPSJ5ZXMiIHNlbGludXhfcm9vdF9yZWxhdGl2ZT0ieWVzIj5jb250ZXh0cy9kYnVzX2NvbnRleHRzPC9pbmNsdWRlPgogCisgIDwhLS0gQ2hyb21pdW0gdGFsa3MgdG8gbW9zdCBzZXJ2aWNlcyBvbiB0aGUgYnVzIHNvIG5lZWRzIGEgcmVsYXRpdmVseQorICAgICAgIGxhcmdlIG51bWJlciBvZiBtYXRjaCBydWxlcy4gLS0+CisgIDxsaW1pdCBuYW1lPSJtYXhfbWF0Y2hfcnVsZXNfcGVyX2Nvbm5lY3Rpb24iPjQwOTY8L2xpbWl0PgogPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS9idXMvc3lzdGVtZC11c2VyL2RidXMuc2VydmljZS5pbiBiL2J1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zZXJ2aWNlLmluCmluZGV4IDdjZWZmYmUuLmI0MWY1MjIgMTAwNjQ0Ci0tLSBhL2J1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zZXJ2aWNlLmluCisrKyBiL2J1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zZXJ2aWNlLmluCkBAIC00LDUgKzQsOCBAQAogUmVxdWlyZXM9ZGJ1cy5zb2NrZXQKIAogW1NlcnZpY2VdCi1FeGVjU3RhcnQ9QEVYUEFOREVEX0JJTkRJUkAvZGJ1cy1kYWVtb24gLS1zZXNzaW9uIC0tYWRkcmVzcz1zeXN0ZW1kOiAtLW5vZm9yayAtLW5vcGlkZmlsZSAtLXN5c3RlbWQtYWN0aXZhdGlvbiAtLXN5c2xvZy1vbmx5CitFeGVjU3RhcnQ9QEVYUEFOREVEX0JJTkRJUkAvZGJ1cy1kYWVtb24gLS1zZXNzaW9uIC0tYWRkcmVzcz1zeXN0ZW1kOiAtLW5vZm9yayAtLW5vcGlkZmlsZSAtLXN5c3RlbWQtYWN0aXZhdGlvbgogRXhlY1JlbG9hZD1ARVhQQU5ERURfQklORElSQC9kYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLXNlc3Npb24gLS10eXBlPW1ldGhvZF9jYWxsIC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZworCitbSW5zdGFsbF0KK0Fsc289ZGJ1cy5zb2NrZXQKZGlmZiAtLWdpdCBhL2J1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zb2NrZXQuaW4gYi9idXMvc3lzdGVtZC11c2VyL2RidXMuc29ja2V0LmluCmluZGV4IDMwNGFjNDAuLjQ3OTNkMWQgMTAwNjQ0Ci0tLSBhL2J1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zb2NrZXQuaW4KKysrIGIvYnVzL3N5c3RlbWQtdXNlci9kYnVzLnNvY2tldC5pbgpAQCAtNCwzICs0LDcgQEAKIFtTb2NrZXRdCiBMaXN0ZW5TdHJlYW09JXQvYnVzCiBFeGVjU3RhcnRQb3N0PS1AU1lTVEVNQ1RMQCAtLXVzZXIgc2V0LWVudmlyb25tZW50IERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz11bml4OnBhdGg9JXQvYnVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKK0Fsc289ZGJ1cy5zZXJ2aWNlCmRpZmYgLS1naXQgYS9idXMvc3lzdXNlcnMuZC9kYnVzLmNvbmYuaW4gYi9idXMvc3lzdXNlcnMuZC9kYnVzLmNvbmYuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMzU3MDIuLjAwMDAwMDAKLS0tIGEvYnVzL3N5c3VzZXJzLmQvZGJ1cy5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIHN5c3VzZXJzLmQgc25pcHBldCBmb3IgY3JlYXRpbmcgdGhlIEQtQnVzIHN5c3RlbSB1c2VyIGF1dG9tYXRpY2FsbHkKLSMgYXQgYm9vdCBvbiBzeXN0ZW1kLWJhc2VkIHN5c3RlbXMgdGhhdCBzaGlwIHdpdGggYW4gdW5wb3B1bGF0ZWQKLSMgL2V0Yy4gU2VlIHN5c3VzZXJzLmQoNSkgZm9yIGRldGFpbHMuCi0KLXUgQERCVVNfVVNFUkAgLSAiU3lzdGVtIE1lc3NhZ2UgQnVzIgpkaWZmIC0tZ2l0IGEvYnVzL3Rlc3QtbGF1bmNoLWhlbHBlci5jIGIvYnVzL3Rlc3QtbGF1bmNoLWhlbHBlci5jCmluZGV4IDU4NzJhYjIuLmM1OGQwNmUgMTAwNjQ0Ci0tLSBhL2J1cy90ZXN0LWxhdW5jaC1oZWxwZXIuYworKysgYi9idXMvdGVzdC1sYXVuY2gtaGVscGVyLmMKQEAgLTMwLDEyICszMCw3IEBACiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLWludGVybmFscy5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy1taXNjLmg+CiAKLSNpZiAhZGVmaW5lZChEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUykgfHwgIWRlZmluZWQoREJVU19VTklYKQotI2Vycm9yIFRoaXMgZmlsZSBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgZW1iZWRkZWQgdGVzdHMgb24gVW5peAotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGRpZSAoY29uc3QgY2hhciAqZmFpbHVyZSkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQorI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCiBzdGF0aWMgdm9pZAogZGllIChjb25zdCBjaGFyICpmYWlsdXJlKQogewpAQCAtNTEsNyArNDYsNyBAQAogICBwcmludGYgKCIlczogY2hlY2tpbmcgZm9yIG1lbWxlYWtzXG4iLCBuYW1lKTsKICAgaWYgKF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICgpICE9IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIiVkIGRidXNfbWFsbG9jIGJsb2NrcyB3ZXJlIG5vdCBmcmVlZCIsCisgICAgICBfZGJ1c193YXJuICgiJWQgZGJ1c19tYWxsb2MgYmxvY2tzIHdlcmUgbm90IGZyZWVkXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCkpOwogICAgICAgZGllICgibWVtbGVha3MiKTsKICAgICB9CkBAIC02Miw2ICs1Nyw4IEBACiB7CiAgIGNoZWNrX21lbWxlYWtzIChuYW1lKTsKIH0KKyNlbmRpZiAvKiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUyAqLworCiAKICNpZmRlZiBBQ1RJVkFUSU9OX0xBVU5DSEVSX0RPX09PTQogCkBAIC04Myw3ICs4MCw3IEBACiAgICAgICAvKiB3ZSBmYWlsZWQsIGJ1dCBhIE9PTSBpcyBnb29kICovCiAgICAgICBpZiAoIWRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkZBSUxFRCBTRUxGIFRFU1Q6IEVycm9yOiAlcyIsIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJGQUlMRUQgU0VMRiBURVNUOiBFcnJvcjogJXNcbiIsIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgIHJldHZhbCA9IEZBTFNFOwogICAgICAgICB9CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CkBAIC0xMDEsNiArOTgsNyBAQAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CisjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKICAgY29uc3QgY2hhciAqZGlyOwogICBEQnVzU3RyaW5nIGNvbmZpZ19maWxlOwogCkBAIC0xMzIsNyArMTMwLDcgQEAKIAogICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgiZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19hY3RpdmF0aW9uX2hlbHBlcl9vb21fdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgIm9yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZSIpKQogICAgIGRpZSAoIk9PTSBmYWlsZWQiKTsKIAogICB0ZXN0X3Bvc3RfaG9vayAoYXJndlswXSk7CkBAIC0xNDAsNCArMTM4LDExIEBACiAgIHByaW50ZiAoIiVzOiBTdWNjZXNzXG4iLCBhcmd2WzBdKTsKIAogICByZXR1cm4gMDsKKyNlbHNlIC8qIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTICovCisKKyAgcHJpbnRmICgiTm90IGNvbXBpbGVkIHdpdGggdGVzdCBzdXBwb3J0XG4iKTsKKyAgCisgIHJldHVybiAwOworI2VuZGlmCiB9CisKZGlmZiAtLWdpdCBhL2J1cy90ZXN0LW1haW4uYyBiL2J1cy90ZXN0LW1haW4uYwppbmRleCA0ZDNkZjg3Li5mYWE2Mzk1IDEwMDY0NAotLS0gYS9idXMvdGVzdC1tYWluLmMKKysrIGIvYnVzL3Rlc3QtbWFpbi5jCkBAIC0zMSwxNiArMzEsMTEgQEAKICNpbmNsdWRlIDxkYnVzL2RidXMtbWVzc2FnZS1pbnRlcm5hbC5oPgogI2luY2x1ZGUgInNlbGludXguaCIKIAotI2lmbmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwotI2Vycm9yIFRoaXMgZmlsZSBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgZW1iZWRkZWQgdGVzdHMKLSNlbmRpZgotCiAjaWZkZWYgREJVU19VTklYCiAjIGluY2x1ZGUgPGRidXMvZGJ1cy1zeXNkZXBzLXVuaXguaD4KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkaWUgKGNvbnN0IGNoYXIgKmZhaWx1cmUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KKyNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogc3RhdGljIHZvaWQKIGRpZSAoY29uc3QgY2hhciAqZmFpbHVyZSkKIHsKQEAgLTU2LDExICs1MSwxMiBAQAogICBwcmludGYgKCIlczogY2hlY2tpbmcgZm9yIG1lbWxlYWtzXG4iLCBuYW1lKTsKICAgaWYgKF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICgpICE9IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIiVkIGRidXNfbWFsbG9jIGJsb2NrcyB3ZXJlIG5vdCBmcmVlZCIsCisgICAgICBfZGJ1c193YXJuICgiJWQgZGJ1c19tYWxsb2MgYmxvY2tzIHdlcmUgbm90IGZyZWVkXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCkpOwogICAgICAgZGllICgibWVtbGVha3MiKTsKICAgICB9CiB9CisjZW5kaWYgLyogREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMgKi8KIAogc3RhdGljIERCdXNJbml0aWFsRkRzICppbml0aWFsX2ZkcyA9IE5VTEw7CiAKQEAgLTc2LDcgKzcyLDcgQEAKICAgaW5pdGlhbF9mZHMgPSBfZGJ1c19jaGVja19mZGxlYWtzX2VudGVyICgpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWUgPSAiIjsKK3N0YXRpYyBjaGFyICpwcm9nbmFtZSA9ICIiOwogCiBzdGF0aWMgdm9pZAogdGVzdF9wb3N0X2hvb2sgKHZvaWQpCkBAIC05Miw2ICs4OCw3IEBACiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKKyNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogICBjb25zdCBjaGFyICpkaXI7CiAgIGNvbnN0IGNoYXIgKm9ubHk7CiAgIERCdXNTdHJpbmcgdGVzdF9kYXRhX2RpcjsKQEAgLTE5Myw0ICsxOTAsMTAgQEAKIAogICAKICAgcmV0dXJuIDA7CisjZWxzZSAvKiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUyAqLworCisgIHByaW50ZiAoIk5vdCBjb21waWxlZCB3aXRoIHRlc3Qgc3VwcG9ydFxuIik7CisgIAorICByZXR1cm4gMDsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYnVzL3Rlc3Qtc3lzdGVtLmMgYi9idXMvdGVzdC1zeXN0ZW0uYwppbmRleCBkZTFmMDAzLi4yZDc4NDhjIDEwMDY0NAotLS0gYS9idXMvdGVzdC1zeXN0ZW0uYworKysgYi9idXMvdGVzdC1zeXN0ZW0uYwpAQCAtMjksMTIgKzI5LDcgQEAKICNpbmNsdWRlIDxkYnVzL2RidXMtc3lzZGVwcy5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy1pbnRlcm5hbHMuaD4KIAotI2lmICFkZWZpbmVkKERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTKSB8fCAhZGVmaW5lZChEQlVTX1VOSVgpCi0jZXJyb3IgVGhpcyBmaWxlIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBlbWJlZGRlZCB0ZXN0cyBvbiBVbml4Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgZGllIChjb25zdCBjaGFyICpmYWlsdXJlKSBfREJVU19HTlVDX05PUkVUVVJOOwotCisjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKIHN0YXRpYyB2b2lkCiBkaWUgKGNvbnN0IGNoYXIgKmZhaWx1cmUpCiB7CkBAIC01MCwxOCArNDUsMTkgQEAKICAgcHJpbnRmICgiJXM6IGNoZWNraW5nIGZvciBtZW1sZWFrc1xuIiwgbmFtZSk7CiAgIGlmIChfZGJ1c19nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZyAoKSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCIlZCBkYnVzX21hbGxvYyBibG9ja3Mgd2VyZSBub3QgZnJlZWQiLAorICAgICAgX2RidXNfd2FybiAoIiVkIGRidXNfbWFsbG9jIGJsb2NrcyB3ZXJlIG5vdCBmcmVlZFxuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICgpKTsKICAgICAgIGRpZSAoIm1lbWxlYWtzIik7CiAgICAgfQogfQorI2VuZGlmIC8qIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTICovCiAKIHN0YXRpYyB2b2lkCiB0ZXN0X3ByZV9ob29rICh2b2lkKQogewogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWUgPSAiIjsKK3N0YXRpYyBjaGFyICpwcm9nbmFtZSA9ICIiOwogc3RhdGljIHZvaWQKIHRlc3RfcG9zdF9ob29rICh2b2lkKQogewpAQCAtNzEsNiArNjcsNyBAQAogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CisjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKICAgY29uc3QgY2hhciAqZGlyOwogICBEQnVzU3RyaW5nIHRlc3RfZGF0YV9kaXI7CiAKQEAgLTEwMSw0ICs5OCwxMCBAQAogICBwcmludGYgKCIlczogU3VjY2Vzc1xuIiwgYXJndlswXSk7CiAKICAgcmV0dXJuIDA7CisjZWxzZSAvKiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUyAqLworCisgIHByaW50ZiAoIk5vdCBjb21waWxlZCB3aXRoIHRlc3Qgc3VwcG9ydFxuIik7CisKKyAgcmV0dXJuIDA7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2J1cy90ZXN0LmMgYi9idXMvdGVzdC5jCmluZGV4IDc2OTYwYTMuLjMxZWY0YzggMTAwNjQ0Ci0tLSBhL2J1cy90ZXN0LmMKKysrIGIvYnVzL3Rlc3QuYwpAQCAtMjcwLDE0ICsyNzAsMTQgQEAKIAogICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmY29uZmlnX2ZpbGUpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJObyBtZW1vcnkiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJObyBtZW1vcnlcbiIpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgIGlmICghX2RidXNfc3RyaW5nX2NvcHkgKHRlc3RfZGF0YV9kaXIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWdfZmlsZSwgMCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIk5vIG1lbW9yeSIpOworICAgICAgX2RidXNfd2FybiAoIk5vIG1lbW9yeVxuIik7CiAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmNvbmZpZ19maWxlKTsKICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI4Niw3ICsyODYsNyBAQAogCiAgIGlmICghX2RidXNfY29uY2F0X2Rpcl9hbmRfZmlsZSAoJmNvbmZpZ19maWxlLCAmcmVsYXRpdmUpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJObyBtZW1vcnkiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJObyBtZW1vcnlcbiIpOwogICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZjb25maWdfZmlsZSk7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICB7CiAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUICgmZXJyb3IpOwogCi0gICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyBidXMgY29udGV4dCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZSAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBjcmVhdGUgZGVidWcgYnVzIGNvbnRleHQgZnJvbSBjb25maWd1cmF0aW9uIGZpbGUgJXM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm9yLm1lc3NhZ2UpOwogCiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CmRpZmYgLS1naXQgYS9idXMvdG1wZmlsZXMuZC9kYnVzLmNvbmYuaW4gYi9idXMvdG1wZmlsZXMuZC9kYnVzLmNvbmYuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYzdkZTAuLjAwMDAwMDAKLS0tIGEvYnVzL3RtcGZpbGVzLmQvZGJ1cy5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIEZpZWxkczogdHlwZTsgcGF0aDsgbW9kZTsgdWlkOyBnaWQ7IGFnZTsgYXJndW1lbnQgKHN5bWxpbmsgdGFyZ2V0KQotCi0jIE1ha2UgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyAocmVxdWlyZWQgZm9yIHN5c3RlbWQgPCAyMzcpCi0jIEFkanVzdCBtb2RlIGFuZCBvd25lcnNoaXAgaWYgaXQgYWxyZWFkeSBleGlzdHMuCi1kIEBFWFBBTkRFRF9MT0NBTFNUQVRFRElSQC9saWIvZGJ1cyAwNzU1IC0gLSAtCi0KLSMgTWFrZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzL21hY2hpbmUtaWQgYSBzeW1saW5rIHRvIC9ldGMvbWFjaGluZS1pZAotIyBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0Ci1MIEBFWFBBTkRFRF9MT0NBTFNUQVRFRElSQC9saWIvZGJ1cy9tYWNoaW5lLWlkIC0gLSAtIC0gL2V0Yy9tYWNoaW5lLWlkCmRpZmYgLS1naXQgYS9jbGVhbnVwLW1hbi1wYWdlcy5zaCBiL2NsZWFudXAtbWFuLXBhZ2VzLnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL2NtYWtlL0NNYWtlTGlzdHMudHh0IGIvY21ha2UvQ01ha2VMaXN0cy50eHQKaW5kZXggM2FjNzFhNS4uNGRiOWM2NyAxMDA2NDQKLS0tIGEvY21ha2UvQ01ha2VMaXN0cy50eHQKKysrIGIvY21ha2UvQ01ha2VMaXN0cy50eHQKQEAgLTcsNyArNyw3IEBACiBwcm9qZWN0KGRidXMpCiAKICMgd2UgbmVlZCB0byBiZSB1cCB0byBkYXRlCi1DTUFLRV9NSU5JTVVNX1JFUVVJUkVEKFZFUlNJT04gMy4wLjIgRkFUQUxfRVJST1IpCitDTUFLRV9NSU5JTVVNX1JFUVVJUkVEKFZFUlNJT04gMi40LjQgRkFUQUxfRVJST1IpCiBpZihDT01NQU5EIGNtYWtlX3BvbGljeSkKICAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAwMDMgTkVXKQogZW5kaWYoQ09NTUFORCBjbWFrZV9wb2xpY3kpCkBAIC00MywxMSArNDMsMTAgQEAKICkKIAogaW5jbHVkZShNYWNyb3MpCi1zdHJpbmcoVElNRVNUQU1QIERCVVNfQlVJTERfVElNRVNUQU1QICIlWSVtJWQlSCVNIiBVVEMpCitUSU1FU1RBTVAoREJVU19CVUlMRF9USU1FU1RBTVApCiAKICMjIyMjIyMjIyMjIGJhc2ljIHZhcnMgIyMjIyMjIyMjIyMjIyMjCiAKLWluY2x1ZGUoR05VSW5zdGFsbERpcnMpCiAKIGlmIChEQlVTRElSKQogCXNldChEQlVTX0lOU1RBTExfRElSICIke0RCVVNESVJ9IikKQEAgLTYyLDUwICs2MSw2MiBAQAogCXNldChEQlVTX0lOU1RBTExfRElSICIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpCiBlbmRpZiAoREJVU19JTlNUQUxMX0RJUikKIAorIyBhdXRvdG9vbHMgc3R5bGUKK2lmIChOT1QgREFUQVJPT1RESVIpCisgICAgc2V0IChEQVRBUk9PVERJUiBzaGFyZSkKK2VuZGlmKCkKKworaWYgKE5PVCBEQVRBRElSKQorICAgIHNldCAoREFUQURJUiAke0RBVEFST09URElSfSkKK2VuZGlmKCkKKworaWYgKE5PVCBET0NESVIpCisgICAgU0VUKERPQ0RJUiAke0RBVEFST09URElSfS9kb2MvZGJ1cykKK2VuZGlmKCkKKworaWYgKE5PVCBEQlVTX0RBVEFESVIpCisgICAgU0VUKERCVVNfREFUQURJUiAke0RBVEFESVJ9KQorZW5kaWYoKQorCiBzZXQoREJVU19QUkVGSVggJHtEQlVTX0lOU1RBTExfRElSfSkKIAogc2V0KHByZWZpeCAgICAgICAgICAgICAgICAgICAke0RCVVNfSU5TVEFMTF9ESVJ9KQogc2V0KGV4ZWNfcHJlZml4ICAgICAgICAgICAgICAke3ByZWZpeH0pCi1zZXQoREJVU19NQUNISU5FX1VVSURfRklMRSAgICR7Q01BS0VfSU5TVEFMTF9GVUxMX0xPQ0FMU1RBVEVESVJ9L2xpYi9kYnVzL21hY2hpbmUtaWQpCi1zZXQoREJVU19CSU5ESVIgICAgICAgICAgICAgICR7Q01BS0VfSU5TVEFMTF9GVUxMX0JJTkRJUn0pCi1zZXQoREJVU19EQUVNT05ESVIgICAgICAgICAgICR7Q01BS0VfSU5TVEFMTF9GVUxMX0JJTkRJUn0pCi1zZXQoREJVU19MT0NBTFNUQVRFRElSICAgICAgICR7Q01BS0VfSU5TVEFMTF9GVUxMX0xPQ0FMU1RBVEVESVJ9KQotc2V0KERCVVNfUlVOU1RBVEVESVIgICAgICAgICAke0NNQUtFX0lOU1RBTExfRlVMTF9MT0NBTFNUQVRFRElSfS9ydW4pCitzZXQoRVhQQU5ERURfTElCRElSICAgICAgICAgICR7REJVU19JTlNUQUxMX0RJUn0vbGliKQorc2V0KEVYUEFOREVEX0lOQ0xVREVESVIgICAgICAke0RCVVNfSU5TVEFMTF9ESVJ9L2luY2x1ZGUpCitzZXQoRVhQQU5ERURfQklORElSICAgICAgICAgICR7REJVU19JTlNUQUxMX0RJUn0vYmluKQorc2V0KEVYUEFOREVEX1NZU0NPTkZESVIgICAgICAke0RCVVNfSU5TVEFMTF9ESVJ9L2V0YykKK3NldChFWFBBTkRFRF9MT0NBTFNUQVRFRElSICAgJHtEQlVTX0lOU1RBTExfRElSfS92YXIpCitzZXQoRVhQQU5ERURfREFUQURJUiAgICAgICAgICR7REJVU19JTlNUQUxMX0RJUn0vJHtEQlVTX0RBVEFESVJ9KQorc2V0KERCVVNfTUFDSElORV9VVUlEX0ZJTEUgICAke0RCVVNfSU5TVEFMTF9ESVJ9L2xpYi9kYnVzL21hY2hpbmUtaWQpCitzZXQoREJVU19CSU5ESVIgICAgICAgICAgICAgICR7RVhQQU5ERURfQklORElSfSkKK3NldChEQlVTX0RBRU1PTkRJUiAgICAgICAgICAgJHtFWFBBTkRFRF9CSU5ESVJ9KQorc2V0KERCVVNfTE9DQUxTVEFURURJUiAgICAgICAke0VYUEFOREVEX0xPQ0FMU1RBVEVESVJ9KQogCiAjIE9uIFdpbmRvd3MgdGhpcyBpcyByZWxhdGl2ZSB0byB3aGVyZSB3ZSBwdXQgdGhlIGJ1cyBzZXR1cCwgaW4KICMgJHtkYXRhZGlyfS9kYnVzLTEuIEZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRvIHRoaXMgaWYKICMgJHtzeXNjb25mZGlyfSA9ICR7cHJlZml4fS9ldGMgYW5kICR7ZGF0YWRpcn0gPSAke3ByZWZpeH0vc2hhcmUuCiAjCiAjIE9uIFVuaXgsIG9yIG9uIFdpbmRvd3Mgd2l0aCB3ZWlyZCBpbnN0YWxsIGxheW91dHMsIGl0J3MgdGhlIGFic29sdXRlIHBhdGguCi1pZihXSU4zMiBBTkQgJHtDTUFLRV9JTlNUQUxMX0ZVTExfU1lTQ09ORkRJUn0gU1RSRVFVQUwgJHtwcmVmaXh9L2V0YyBBTkQgJHtDTUFLRV9JTlNUQUxMX0ZVTExfREFUQURJUn0gU1RSRVFVQUwgJHtwcmVmaXh9L3NoYXJlKQoraWYoV0lOMzIgQU5EICR7RVhQQU5ERURfU1lTQ09ORkRJUn0gU1RSRVFVQUwgJHtwcmVmaXh9L2V0YyBBTkQgJHtFWFBBTkRFRF9EQVRBRElSfSBTVFJFUVVBTCAke3ByZWZpeH0vc2hhcmUpCiBzZXQoU1lTQ09ORkRJUl9GUk9NX1BLR0RBVEFESVIgLi4vLi4vZXRjKQogc2V0KERBVEFESVJfRlJPTV9QS0dTWVNDT05GRElSIC4uLy4uL3NoYXJlKQogZWxzZSgpCi1zZXQoU1lTQ09ORkRJUl9GUk9NX1BLR0RBVEFESVIgJHtDTUFLRV9JTlNUQUxMX0ZVTExfU1lTQ09ORkRJUn0pCi1zZXQoREFUQURJUl9GUk9NX1BLR1NZU0NPTkZESVIgJHtDTUFLRV9JTlNUQUxMX0ZVTExfREFUQURJUn0pCitzZXQoU1lTQ09ORkRJUl9GUk9NX1BLR0RBVEFESVIgJHtFWFBBTkRFRF9TWVNDT05GRElSfSkKK3NldChEQVRBRElSX0ZST01fUEtHU1lTQ09ORkRJUiAke0VYUEFOREVEX0RBVEFESVJ9KQogZW5kaWYoKQogCi1vcHRpb24gKERCVVNfUkVMT0NBVEFCTEUgIkF0dGVtcHQgdG8gbWFrZSBtZXRhZGF0YSByZWxvY2F0YWJsZSIgT04pCi0KLSMgRm9yIHNpbXBsaWNpdHksIHdlJ3JlIG5vdCByZWxvY2F0YWJsZSBpZiBDTUFLRV9JTlNUQUxMX0xJQkRJUgotIyBpcyBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCAoZS5nLiBEZWJpYW4gbXVsdGlhcmNoKTsKLSMgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRvIGNvbXB1dGUgaG93IG1hbnkgLi4vIHRvIGFkZAotaWYoQ01BS0VfSU5TVEFMTF9MSUJESVIgU1RSRVFVQUwgImxpYiIgT1IgQ01BS0VfSU5TVEFMTF9MSUJESVIgU1RSRVFVQUwgImxpYjY0IikKLSAgICAjIFdlIGtub3cgd2UgY2FuIHVzZSAuLi8gdG8gZ2V0IHRvIHRoZSBwcmVmaXguIERvIG5vdGhpbmcuCi1lbHNlaWYoREJVU19SRUxPQ0FUQUJMRSkKLSAgICAjIFNvcnJ5LCBpdCdzIHRvbyBoYXJkIHRvIG1ha2UgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHJlbG9jYXRhYmxlCi0gICAgbWVzc2FnZSgiVW51c3VhbCBDTUFLRV9JTlNUQUxMX0xJQkRJUjogdGhlIGdlbmVyYXRlZCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbG9jYXRhYmxlLiIpCi0gICAgc2V0KERCVVNfUkVMT0NBVEFCTEUgT0ZGKQotZW5kaWYoKQotCi0jIHVzZWQgaW4gdGhlIEMgY29kZQotc2V0KERCVVNfTElCRVhFQ0RJUiAgICAgICAgICAke0NNQUtFX0lOU1RBTExfRlVMTF9MSUJFWEVDRElSfSkKLXNldChEQlVTX0RBVEFESVIgICAgICAgICAgICAgJHtDTUFLRV9JTlNUQUxMX0ZVTExfREFUQURJUn0pCitzZXQoREJVU19MSUJFWEVDRElSICAgICAgICAgICR7RVhQQU5ERURfTElCRElSfSkKK3NldChEQlVTX0RBVEFESVIgICAgICAgICAgICAgJHtFWFBBTkRFRF9EQVRBRElSfSkKIAogI2VuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQgbGlicmFyeQogU0VUKEJVSUxEX1NIQVJFRF9MSUJTIE9OKQogCi1zZXQoSU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHUyBFWFBPUlQgREJ1czFUYXJnZXRzIFJVTlRJTUUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0gTElCUkFSWSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfSBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQoraWYoV0lOMzIpCisgICAgc2V0KElOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1MgIFJVTlRJTUUgREVTVElOQVRJT04gImJpbiIgTElCUkFSWSBERVNUSU5BVElPTiAibGliIiBBUkNISVZFIERFU1RJTkFUSU9OICJsaWIiKQorZWxzZSgpCisgICAgc2V0KElOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1MgIFJVTlRJTUUgREVTVElOQVRJT04gIiR7RVhQQU5ERURfTElCRElSfSIgTElCUkFSWSBERVNUSU5BVElPTiAiJHtFWFBBTkRFRF9MSUJESVJ9IiBBUkNISVZFIERFU1RJTkFUSU9OICIke0VYUEFOREVEX0xJQkRJUn0iKQorZW5kaWYoKQogCiBpZiAoQ1lHV0lOKQogICAgc2V0IChXSU4zMikKQEAgLTEyMSw2ICsxMzIsNyBAQAogZW5kaWYgKFdJTjMyKQogCiBpZihOT1QgV0lOMzIpCisJb3B0aW9uIChEQlVTX0VOQUJMRV9BQlNUUkFDVF9TT0NLRVRTICJlbmFibGUgc3VwcG9ydCBmb3IgYWJzdHJhY3Qgc29ja2V0cyIgT04pCiAJc2V0IChDTUFLRV9USFJFQURfUFJFRkVSX1BUSFJFQUQgT04pCiAJaW5jbHVkZSAoRmluZFRocmVhZHMpCiBlbmRpZihOT1QgV0lOMzIpCkBAIC0xNTcsNjcgKzE2OSw0NCBAQAogCXNldChEQlVTX1ZFUkJPU0VfQ19TIDEgQ0FDSEUgU1RSSU5HICJ2ZXJib3NlIG1vZGUiIEZPUkNFKQogZW5kaWYoVkNTKQogCi1pZihNU1ZDKQotICAgICMgY29udHJvbGwgZm9sZGVycyBpbiBtc3ZjIHByb2plY3RzCi0gICAgaW5jbHVkZShQcm9qZWN0U291cmNlR3JvdXApCi0gICAgaWYoTk9UIEdST1VQX0NPREUpCi0gICAgICAgICNzZXQoR1JPVVBfQ09ERSBzcGxpdCkgI2NtYWtlIGRlZmF1bHQKLSAgICAgICAgc2V0KEdST1VQX0NPREUgZmxhdCkKLSAgICBlbmRpZihOT1QgR1JPVVBfQ09ERSkKLSAgICBBRERfREVGSU5JVElPTlMoLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFKQotICAgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICAgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gICAvRkljb25maWcuaCIpCi0gICAgU0VUKENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtDTUFLRV9DX0ZMQUdTX1JFTEVBU0V9IC9GSWNvbmZpZy5oIikKLWVuZGlmKCkKK2lmKFdJTjMyKQorCWlmKE1TVkMpCisJCSMgY29udHJvbGwgZm9sZGVycyBpbiBtc3ZjIHByb2plY3RzCisJCWluY2x1ZGUoUHJvamVjdFNvdXJjZUdyb3VwKQorCQlpZihOT1QgR1JPVVBfQ09ERSkKKwkJCSNzZXQoR1JPVVBfQ09ERSBzcGxpdCkgI2NtYWtlIGRlZmF1bHQKKwkJCXNldChHUk9VUF9DT0RFIGZsYXQpCisJCWVuZGlmKE5PVCBHUk9VUF9DT0RFKQorCQlBRERfREVGSU5JVElPTlMoLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFKQogCi0jCi0jIHNldHVwIHdhcm5pbmdzCi0jCi1pZihNU1ZDKQotICAgICMgVXNlIHRoZSBoaWdoZXN0IHdhcm5pbmcgbGV2ZWwKLSAgICBpZihXQUxMKQotICAgICAgICBzZXQoV0FMTCAxIENBQ0hFIFNUUklORyAiYWxsIHdhcm5pbmdzIiAgRk9SQ0UpCi0gICAgICAgIHNldChDTUFLRV9DWFhfV0FSTklOR19MRVZFTCA0IENBQ0hFIFNUUklORyAid2FybmluZyBsZXZlbCIgRk9SQ0UpCi0gICAgICAgIGlmKENNQUtFX0NYWF9GTEFHUyBNQVRDSEVTICIvV1swLTRdIikKLSAgICAgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvV1swLTRdIiAiL1c0IiBDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSIpCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC9XNCIpCi0gICAgICAgIGVuZGlmKCkKIAotICAgICAgICBpZihDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi9XWzAtNF0iKQotICAgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9XWzAtNF0iICIvVzQiIENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30iKQotICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XNCIpCi0gICAgICAgIGVuZGlmKCkKLSAgICBlbHNlKCkKLSAgICAgICAgc2V0KENNQUtFX0NYWF9XQVJOSU5HX0xFVkVMIDMgQ0FDSEUgU1RSSU5HICJ3YXJuaW5nIGxldmVsIiBGT1JDRSkKLSAgICBlbmRpZigpCisJCSMgVXNlIHRoZSBoaWdoZXN0IHdhcm5pbmcgbGV2ZWwKKwkJaWYgKFdBTEwpCisJCQlzZXQoV0FMTCAxIENBQ0hFIFNUUklORyAiYWxsIHdhcm5pbmdzIiAgRk9SQ0UpCisJCQlzZXQoQ01BS0VfQ1hYX1dBUk5JTkdfTEVWRUwgNCBDQUNIRSBTVFJJTkcgIndhcm5pbmcgbGV2ZWwiIEZPUkNFKQogCi0gICAgIyBzZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96Nzg1MDNlNi5hc3B4Ci0gICAgIyA0MDE4ICdleHByZXNzaW9uJyA6IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaAotICAgIHNldChXQVJOSU5HUyAiNDAxOCIpCi0gICAgIyA0MDkwICdvcGVyYXRpb24nIDogZGlmZmVyZW50ICdtb2RpZmllcicgcXVhbGlmaWVycwotICAgICMgNDEwMSAnaWRlbnRpZmllcicgOiB1bnJlZmVyZW5jZWQgbG9jYWwgdmFyaWFibGUKLSAgICAjIDQxMjcgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudAotICAgICMgNDI0NCAnYXJndW1lbnQnIDogY29udmVyc2lvbiBmcm9tICd0eXBlMScgdG8gJ3R5cGUyJywgcG9zc2libGUgbG9zcyBvZiBkYXRhCi0gICAgc2V0KFdBUk5JTkdTX0RJU0FCTEVEICI0MDkwIDQxMDEgNDEyNyA0MjQ0IikKLSAgICAjIDQwMDIgdG9vIG1hbnkgYWN0dWFsIHBhcmFtZXRlcnMgZm9yIG1hY3JvICdpZGVudGlmaWVyJwotICAgICMgNDAwMyBub3QgZW5vdWdoIGFjdHVhbCBwYXJhbWV0ZXJzIGZvciBtYWNybyAnaWRlbnRpZmllcicKLSAgICAjIDQwMTMgJ2Z1bmN0aW9uJyB1bmRlZmluZWQ7IGFzc3VtaW5nIGV4dGVybiByZXR1cm5pbmcgaW50Ci0gICAgIyA0MDI4IGZvcm1hbCBwYXJhbWV0ZXIgJ251bWJlcicgZGlmZmVyZW50IGZyb20gZGVjbGFyYXRpb24KLSAgICAjIDQwMzEgc2Vjb25kIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBsb25nZXIgdGhhbiB0aGUgZmlyc3QgbGlzdAotICAgICMgNDA0NyBvcGVyYXRvcicgOiAnaWRlbnRpZmllcjEnIGRpZmZlcnMgaW4gbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGZyb20gJ2lkZW50aWZpZXIyJwotICAgICMgNDExNCBzYW1lIHR5cGUgcXVhbGlmaWVyIHVzZWQgbW9yZSB0aGFuIG9uY2UKLSAgICAjIDQxMzMgJ3R5cGUnIDogaW5jb21wYXRpYmxlIHR5cGVzIC0gZnJvbSAndHlwZTEnIHRvICd0eXBlMicKLSAgICBzZXQoV0FSTklOR1NfRVJST1JTICI0MDAyIDQwMDMgNDAxMyA0MDI4IDQwMzEgNDA0NyA0MTE0IDQxMzMiKQotZWxzZSgpCi0gICAgc2V0KFdBUk5JTkdTICJzaWduLWNvbXBhcmUiKQotICAgIHNldChXQVJOSU5HU19ESVNBQkxFRCAiIikKLSAgICBzZXQoV0FSTklOR1NfRVJST1JTICIiKQotZW5kaWYoKQotZ2VuZXJhdGVfd2FybmluZ19jZmxhZ3MoV0FSTklOR1NfQ0ZMQUdTICIke1dBUk5JTkdTfSIgIiR7V0FSTklOR1NfRElTQUJMRUR9IiAiJHtXQVJOSU5HU19FUlJPUlN9IikKLXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9ICR7V0FSTklOR1NfQ0ZMQUdTfSIpCi1zZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gJHtXQVJOSU5HU19DRkxBR1N9IikKKwkJCWlmKENNQUtFX0NYWF9GTEFHUyBNQVRDSEVTICIvV1swLTRdIikKKwkJCQlTVFJJTkcoUkVHRVggUkVQTEFDRSAiL1dbMC00XSIgIi9XNCIgQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30iKQorCQkJZWxzZShDTUFLRV9DWFhfRkxBR1MgTUFUQ0hFUyAiL1dbMC00XSIpCisJCQkJU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC9XNCIpCisJCQllbmRpZihDTUFLRV9DWFhfRkxBR1MgTUFUQ0hFUyAiL1dbMC00XSIpCiAKKwkJCWlmKENNQUtFX0NfRkxBR1MgTUFUQ0hFUyAiL1dbMC00XSIpCisJCQkJU1RSSU5HKFJFR0VYIFJFUExBQ0UgIi9XWzAtNF0iICIvVzQiIENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30iKQorCQkJZWxzZShDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi9XWzAtNF0iKQorCQkJCVNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XNCIpCisJCQllbmRpZihDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi9XWzAtNF0iKQorCQllbHNlIChXQUxMKQorCQkJc2V0KENNQUtFX0NYWF9XQVJOSU5HX0xFVkVMIDMgQ0FDSEUgU1RSSU5HICJ3YXJuaW5nIGxldmVsIiBGT1JDRSkKKwkJZW5kaWYgKFdBTEwpCisKKwkJU0VUKE1TVkNfV19FUlJPUiAgICIgL3dlNDAyOCAvd2U0MDEzIC93ZTQxMzMgL3dlNDA0NyAvd2U0MDMxIC93ZTQwMDIgL3dlNDAwMyAvd2U0MTE0IikKKwkJU0VUKE1TVkNfV19ESVNBQkxFICIgL3dkNDEyNyAvd2Q0MDkwIC93ZDQxMDEgL3dkNDI0NCIpCisKKwkJU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgICAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAgIC9GSWNvbmZpZy5oICR7TVNWQ19XX0VSUk9SfSAke01TVkNfV19ESVNBQkxFfSIpCisJCVNFVChDTUFLRV9DX0ZMQUdTX1JFTEVBU0UgIiR7Q01BS0VfQ19GTEFHU19SRUxFQVNFfSAvRkljb25maWcuaCAke01TVkNfV19FUlJPUn0gJHtNU1ZDX1dfRElTQUJMRX0iKQorCWVuZGlmKE1TVkMpCitlbmRpZihXSU4zMikKIAogaWYgKFVOSVggQU5EIE5PVCBEQlVTX0RJU0FCTEVfQVNTRVJUKQogCSMgcmVxdWlyZWQgZm9yIGJhY2t0cmFjZQpAQCAtMjMyLDYgKzIyMSwxMyBAQAogZW5kaWYoKQogCiBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAgLURfREVCVUciKQoraWYoTVNWQykKKyAgICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAgL3cxNDAxOCIpCisgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC93MTQwMTgiKQorZWxzZSgpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gIC1Xc2lnbi1jb21wYXJlIikKKyAgICBTRVQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gIC1Xc2lnbi1jb21wYXJlIikKK2VuZGlmKCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBXaW5kb3dzIENFICg+PSA1LjAuMCkKQEAgLTM2Myw2ICszNTksMTAgQEAKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBhdCBub3QgZm91bmQhIikKIGVuZGlmKE5PVCBFWFBBVF9GT1VORCkKIAorU0VUKFhNTF9MSUIgIkV4cGF0IikKK1NFVChYTUxfTElCUkFSWSAgICAgJHtFWFBBVF9MSUJSQVJJRVN9KQorU0VUKFhNTF9JTkNMVURFX0RJUiAke0VYUEFUX0lOQ0xVREVfRElSfSkKKwogIyBhbGwgbWlzc2luZyBvciBoYXJkY29kZWQgZm9yIG5vdwogCiAjICdoaWRkZW4nIG9uZXMKQEAgLTM4OCw2ICszODgsOSBAQAogICAgIGVuZGlmKFVOQU1FX0VYRUNVVEFCTEUpCiBlbmRpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQyBBTkQgTk9UIERCVVNfRU5BQkxFX0FOU0kpCiAKK3NldCAoREJVU19IQVZFX0FUT01JQ19JTlQgJHthdG9taWNfaW50fSBDQUNIRSBTVFJJTkcgIlNvbWUgYXRvbWljIGludGVnZXIgaW1wbGVtZW50YXRpb24gcHJlc2VudCIpCitzZXQgKERCVVNfVVNFX0FUT01JQ19JTlRfNDg2ICR7YXRvbWljX2ludF80ODZ9IENBQ0hFIFNUUklORyAiVXNlIGF0b21pYyBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIGZvciA0ODYiKQorCiBpZihYMTFfRk9VTkQpCiAgIG9wdGlvbiAoREJVU19CVUlMRF9YMTEgIkJ1aWxkIHdpdGggWDExIGF1dG9sYXVuY2ggc3VwcG9ydCAiIE9OKQogZW5kaWYoWDExX0ZPVU5EKQpAQCAtNDE5LDIyICs0MjIsMzMgQEAKIGVuZGlmIChNU1ZDX0lERSkKIAogIyMjIyBGaW5kIHNvY2tldCBkaXJlY3RvcmllcwotaWYoVU5JWCkKLSAgICBpZihOT1QgJEVOVntUTVBESVJ9IFNUUkVRVUFMICIiKQotICAgICAgICBzZXQoREJVU19TRVNTSU9OX1NPQ0tFVF9ESVIgJEVOVntUTVBESVJ9KQotICAgIGVsc2VpZihOT1QgJEVOVntURU1QfSBTVFJFUVVBTCAiIikKLSAgICAgICAgc2V0KERCVVNfU0VTU0lPTl9TT0NLRVRfRElSICRFTlZ7VEVNUH0pCi0gICAgZWxzZWlmKE5PVCAkRU5We1RNUH0gU1RSRVFVQUwgIiIpCi0gICAgICAgIHNldChEQlVTX1NFU1NJT05fU09DS0VUX0RJUiAkRU5We1RNUH0pCi0gICAgZWxzZSgpCi0gICAgICAgIHNldChEQlVTX1NFU1NJT05fU09DS0VUX0RJUiAvdG1wKQotICAgIGVuZGlmKCkKLWVuZGlmKCkKKyBpZiAoTk9UICRFTlZ7VE1QRElSfSBTVFJFUVVBTCAiIikKKyAgICAgc2V0IChEQlVTX1NFU1NJT05fU09DS0VUX0RJUiAkRU5We1RNUERJUn0pCisgZWxzZSAoTk9UICRFTlZ7VE1QRElSfSBTVFJFUVVBTCAiIikKKyAgICAgaWYgKE5PVCAkRU5We1RFTVB9IFNUUkVRVUFMICIiKQorICAgICAgICAgc2V0IChEQlVTX1NFU1NJT05fU09DS0VUX0RJUiAkRU5We1RFTVB9KQorICAgICBlbHNlIChOT1QgJEVOVntURU1QfSBTVFJFUVVBTCAiIikKKyAgICAgICAgIGlmIChOT1QgJEVOVntUTVB9IFNUUkVRVUFMICIiKQorICAgICAgICAgICAgIHNldCAoREJVU19TRVNTSU9OX1NPQ0tFVF9ESVIgJEVOVntUTVB9KQorICAgICAgICAgZWxzZSAoTk9UICRFTlZ7VE1QfSBTVFJFUVVBTCAiIikKKyAgICAgICAgIGlmIChXSU4zMikKKyAgICAgICAgICAgICAjU2hvdWxkIG5ldmVyIGhhcHBlbiwgYm90aCBUTVAgYW5kIFRFTVAgc2VlbSBhbHdheXMgc2V0IG9uIFdpbmRvd3MKKyAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZGV0ZXJtaW5lIGEgdXNhYmxlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKQorICAgICAgICAgZWxzZShXSU4zMikKKyAgICAgICAgICAgIHNldCAoREJVU19TRVNTSU9OX1NPQ0tFVF9ESVIgL3RtcCkKKyAgICAgICAgIGVuZGlmKFdJTjMyKQorICAgICAgICAgZW5kaWYgKE5PVCAkRU5We1RNUH0gU1RSRVFVQUwgIiIpCisgICAgIGVuZGlmIChOT1QgJEVOVntURU1QfSBTVFJFUVVBTCAiIikKKyBlbmRpZiAoTk9UICRFTlZ7VE1QRElSfSBTVFJFUVVBTCAiIikKIAogICMgTm90IHVzZWQgb24gV2luZG93cywgd2hlcmUgdGhlcmUgaXMgbm8gc3lzdGVtIGJ1cwotc2V0IChEQlVTX1NZU1RFTV9QSURfRklMRSAke0RCVVNfUlVOU1RBVEVESVJ9L2RidXMvcGlkKQorc2V0IChEQlVTX1NZU1RFTV9QSURfRklMRSAke0RCVVNfTE9DQUxTVEFURURJUn0vcnVuL2RidXMvcGlkKQogCi1zZXQgKERCVVNfQ09OU09MRV9BVVRIX0RJUiAiIiBDQUNIRSBTVFJJTkcgIkRpcmVjdG9yeSB0byBjaGVjayBmb3IgcGFtX2NvbnNvbGUvcGFtX2ZvcmVncm91bmQgZmxhZyBmaWxlcywgb3IgZW1wdHkgdG8gaWdub3JlIikKK2lmIChXSU4zMikKKwlzZXQgKERCVVNfQ09OU09MRV9BVVRIX0RJUiAiIikKK2Vsc2UgKFdJTjMyKQorCXNldCAoREJVU19DT05TT0xFX0FVVEhfRElSICIvdmFyL3J1bi9jb25zb2xlLyIpCitlbmRpZiAoV0lOMzIpCiAKICMgVGhpcyB3b24ndCB3b3JrIG9uIFdpbmRvd3MuIEl0J3Mgbm90IG1lYW50IHRvIC0gdGhlIHN5c3RlbSBidXMgaXMKICMgbWVhbmluZ2xlc3Mgb24gV2luZG93cyBhbnl3YXkuCkBAIC00NDQsNyArNDU4LDcgQEAKICMgYW5kIGFsc28gdG8gY29ubmVjdCB0by4gSWYgdGhpcyBldmVyIGNoYW5nZXMsIGl0J2xsIG5lZWQgdG8gYmUgc3BsaXQgaW50bwogIyB0d28gdmFyaWFibGVzLCBvbmUgZm9yIHRoZSBsaXN0ZW5pbmcgYWRkcmVzcyBhbmQgb25lIGZvciB0aGUgY29ubmVjdGluZwogIyBhZGRyZXNzLgotc2V0IChEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTICJ1bml4OnBhdGg9JHtEQlVTX1JVTlNUQVRFRElSfS9kYnVzL3N5c3RlbV9idXNfc29ja2V0IiBDQUNIRSBTVFJJTkcgInN5c3RlbSBidXMgZGVmYXVsdCBhZGRyZXNzIikKK3NldCAoREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyAidW5peDpwYXRoPSR7REJVU19MT0NBTFNUQVRFRElSfS9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCIgQ0FDSEUgU1RSSU5HICJzeXN0ZW0gYnVzIGRlZmF1bHQgYWRkcmVzcyIpCiAKIGlmIChXSU4zMikKICAgc2V0IChEQlVTX1NFU1NJT05fQlVTX0xJU1RFTl9BRERSRVNTICJhdXRvbGF1bmNoOiIgQ0FDSEUgU1RSSU5HICJzZXNzaW9uIGJ1cyBkZWZhdWx0IGxpc3RlbmluZyBhZGRyZXNzIikKQEAgLTQ5MCwxMSArNTA0LDEyIEBACiAgICAgIyBzZXQgdmFyaWFibGVzIHVzZWQgZm9yIHRoZSAuaW4gZmlsZXMgKHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZV9maWxlKSBpbiB0ZXN0L2RhdGE6CiAgICAgc2V0KERCVVNfVEVTVF9FWEVDICR7RVhFQ1VUQUJMRV9PVVRQVVRfUEFUSH0ke0lERV9CSU59KQogICAgIHNldChEQlVTX1RFU1RfREFUQSAke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3QvZGF0YSkKKyAgICBzZXQoVEVTVF9TT0NLRVRfRElSICR7REJVU19TRVNTSU9OX1NPQ0tFVF9ESVJ9ICkKICAgICBzZXQoVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSAke0VYRUNVVEFCTEVfT1VUUFVUX1BBVEh9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXItdGVzdCkKKyAgICBzZXQoVEVTVF9CVVNfTEFVTkNIX0JJTkFSWSAke0VYRUNVVEFCTEVfT1VUUFVUX1BBVEh9L2RidXMtbGF1bmNoJHtFWEVFWFR9KQogICAgIGlmIChVTklYKQotICAgICAgICBzZXQoVEVTVF9TT0NLRVRfRElSICR7REJVU19TRVNTSU9OX1NPQ0tFVF9ESVJ9KQotICAgICAgICBzZXQoVEVTVF9MSVNURU4gInVuaXg6dG1wZGlyPSR7VEVTVF9TT0NLRVRfRElSfSIpCi0gICAgZW5kaWYoKQorICAgICAgICBzZXQgKFRFU1RfTElTVEVOICJ1bml4OnRtcGRpcj0ke1RFU1RfU09DS0VUX0RJUn0iKQorICAgIGVuZGlmIChVTklYKQogICAgIGlmIChXSU4zMikKICAgICAgICAgc2V0IChURVNUX0xJU1RFTiAidGNwOmhvc3Q9bG9jYWxob3N0IikKICAgICBlbmRpZiAoV0lOMzIpCkBAIC01MTAsMzEgKzUyNSwxMSBAQAogCiBpZiAoV0lOMzIpCiBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZGJ1cy1lbnYuYmF0LmNtYWtlICR7Q01BS0VfQklOQVJZX0RJUn0vYmluL2RidXMtZW52LmJhdCApCi0gICAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi9kYnVzLWVudi5iYXQgREVTVElOQVRJT04gYmluKQoraW5zdGFsbF9maWxlcygvYmluIEZJTEVTICR7Q01BS0VfQklOQVJZX0RJUn0vYmluL2RidXMtZW52LmJhdCkKIGVuZGlmKCkKIAogYWRkX2RlZmluaXRpb25zKC1ESEFWRV9DT05GSUdfSD0xKQogCi0jCi0jIGNyZWF0ZSBjbWFrZSBmaW5kX3BhY2thZ2UgcmVsYXRlZCBmaWxlcwotIwotc2V0KElOU1RBTExfQ01BS0VfRElSICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L2NtYWtlL0RCdXMxKQotaWYoV0lOMzIpCi0gICBjb25maWd1cmVfZmlsZShEQnVzMUNvbmZpZy5jbWFrZS5pbiAiJHtDTUFLRV9CSU5BUllfRElSfS9EQnVzMUNvbmZpZy5jbWFrZSIgQE9OTFkpCi1lbHNlKCkKLSAgIGNvbmZpZ3VyZV9maWxlKERCdXMxQ29uZmlnLnBrZ2NvbmZpZy5pbiAiJHtDTUFLRV9CSU5BUllfRElSfS9EQnVzMUNvbmZpZy5jbWFrZSIgQE9OTFkpCi1lbmRpZigpCi1jb25maWd1cmVfZmlsZShEQnVzMUNvbmZpZ1ZlcnNpb24uY21ha2UuaW4gIiR7Q01BS0VfQklOQVJZX0RJUn0vREJ1czFDb25maWdWZXJzaW9uLmNtYWtlIiBAT05MWSkKLWluc3RhbGwoRklMRVMKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS9EQnVzMUNvbmZpZy5jbWFrZSIKLSAgICAiJHtDTUFLRV9CSU5BUllfRElSfS9EQnVzMUNvbmZpZ1ZlcnNpb24uY21ha2UiCi0gICAgREVTVElOQVRJT04gIiR7SU5TVEFMTF9DTUFLRV9ESVJ9IiBDT01QT05FTlQgZGV2Ci0pCi0KLWlmKFdJTjMyKQotICAgIGluc3RhbGwoRVhQT1JUIERCdXMxVGFyZ2V0cyBERVNUSU5BVElPTiAiJHtJTlNUQUxMX0NNQUtFX0RJUn0iIENPTVBPTkVOVCBkZXYpCi1lbmRpZigpCi0KICMjIyMjIyMjIyMjIHN1YmRpcnMgIyMjIyMjIyMjIyMjIyMjCiAKIGFkZF9zdWJkaXJlY3RvcnkoIGRidXMgKQpAQCAtNTU5LDE0ICs1NTQsMTQgQEAKIEdFVF9GSUxFTkFNRV9DT01QT05FTlQoQ1hYX0NPTVBJTEVSICR7Q01BS0VfQ1hYX0NPTVBJTEVSfSBOQU1FKQogCiBtZXNzYWdlKCIgICAgICAgICAgICAgICAgICBELUJVUyAke0RCVVNfVkVSU0lPTn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikKLW1lc3NhZ2UoIiAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKQorbWVzc2FnZSgiICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpCiBtZXNzYWdlKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikKIG1lc3NhZ2UoIiAgICAgICAgaW5zdGFsbCBwcmVmaXg6ICAgICAgICAgICAke3ByZWZpeH0gICAgICAgICAgICAgICAgICAgICAgICAgICAiKQogbWVzc2FnZSgiICAgICAgICBpbnN0YWxsIGV4ZWNfcHJlZml4OiAgICAgICR7ZXhlY19wcmVmaXh9ICAgICAgICAgICAgICAgICAgICAgICIpCi1tZXNzYWdlKCIgICAgICAgIGluc3RhbGwgbGliZGlyOiAgICAgICAgICAgJHtDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSfSAgICAgICAgIikKLW1lc3NhZ2UoIiAgICAgICAgaW5zdGFsbCBiaW5kaXI6ICAgICAgICAgICAke0NNQUtFX0lOU1RBTExfRlVMTF9CSU5ESVJ9ICAgICAgICAiKQotbWVzc2FnZSgiICAgICAgICBpbnN0YWxsIHN5c2NvbmZkaXI6ICAgICAgICR7Q01BS0VfSU5TVEFMTF9GVUxMX1NZU0NPTkZESVJ9ICAgICIpCi1tZXNzYWdlKCIgICAgICAgIGluc3RhbGwgZGF0YWRpcjogICAgICAgICAgJHtDTUFLRV9JTlNUQUxMX0ZVTExfREFUQURJUn0gICAgICAgIikKK21lc3NhZ2UoIiAgICAgICAgaW5zdGFsbCBsaWJkaXI6ICAgICAgICAgICAke0VYUEFOREVEX0xJQkRJUn0gICAgICAgICAgICAgICAgICAiKQorbWVzc2FnZSgiICAgICAgICBpbnN0YWxsIGJpbmRpcjogICAgICAgICAgICR7RVhQQU5ERURfQklORElSfSAgICAgICAgICAgICAgICAgICIpCittZXNzYWdlKCIgICAgICAgIGluc3RhbGwgc3lzY29uZmRpcjogICAgICAgJHtFWFBBTkRFRF9TWVNDT05GRElSfSAgICAgICAgICAgICAgIikKK21lc3NhZ2UoIiAgICAgICAgaW5zdGFsbCBkYXRhZGlyOiAgICAgICAgICAke0VYUEFOREVEX0RBVEFESVJ9ICAgICAgICAgICAgICAgICAiKQogbWVzc2FnZSgiICAgICAgICBzb3VyY2UgY29kZSBsb2NhdGlvbjogICAgICR7REJVU19TT1VSQ0VfRElSfSAgICAgICAgICAgICAgICAgICIpCiBtZXNzYWdlKCIgICAgICAgIGJ1aWxkIGRpcjogICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSAgICAgICAgICAgICAgICAgIikKIG1lc3NhZ2UoIiAgICAgICAgYyBjb21waWxlcjogICAgICAgICAgICAgICAke0NfQ09NUElMRVJ9ICAgICAgICAgICAgICAgICAgICAgICAiKQpAQCAtNTk3LDI0ICs1OTIsMTkgQEAKIG1lc3NhZ2UoIiAgICAgICAgQnVpbGRpbmcgRG94eWdlbiBkb2NzOiAgICAke0RCVVNfRU5BQkxFX0RPWFlHRU5fRE9DU30gICAgICAgICAiKQogbWVzc2FnZSgiICAgICAgICBCdWlsZGluZyBYTUwgZG9jczogICAgICAgICR7REJVU19FTkFCTEVfWE1MX0RPQ1N9ICAgICAgICAgICAgICIpCiBtZXNzYWdlKCIgICAgICAgIERhZW1vbiBleGVjdXRhYmxlIG5hbWU6ICAgJHtEQlVTX0RBRU1PTl9OQU1FfSIpCi1pZihXSU4zMikKK2lmIChXSU4zMikKK21lc3NhZ2UoIiAgICAgICAgU3lzdGVtIGJ1cyBhZGRyZXNzOiAgICAgICAke0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1N9ICAiKQogbWVzc2FnZSgiICAgICAgICBTZXNzaW9uIGJ1cyBsaXN0ZW5zIG9uOiAgICR7REJVU19TRVNTSU9OX0JVU19MSVNURU5fQUREUkVTU30gICIpCiBtZXNzYWdlKCIgICAgICAgIFNlc3Npb24gY2xpZW50cyBjb25uZWN0IHRvOiAke0RCVVNfU0VTU0lPTl9CVVNfQ09OTkVDVF9BRERSRVNTfSAiKQotZWxzZSgpCi1tZXNzYWdlKCIgICAgICAgIFN5c3RlbSBidXMgYWRkcmVzczogICAgICAgJHtEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTfSAgIikKK2Vsc2UgKFdJTjMyKQogbWVzc2FnZSgiICAgICAgICBTeXN0ZW0gYnVzIHNvY2tldDogICAgICAgICR7REJVU19TWVNURU1fU09DS0VUfSAgICAgICAgICAgICAgICIpCittZXNzYWdlKCIgICAgICAgIFN5c3RlbSBidXMgYWRkcmVzczogICAgICAgJHtEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTfSAgIikKIG1lc3NhZ2UoIiAgICAgICAgU3lzdGVtIGJ1cyBQSUQgZmlsZTogICAgICAke0RCVVNfU1lTVEVNX1BJRF9GSUxFfSAgICAgICAgICAgICAiKQotbWVzc2FnZSgiICAgICAgICBTeXN0ZW0gYnVzIHVzZXI6ICAgICAgICAgICR7REJVU19VU0VSfSAgICAgICAgICAgICAgICAgICAgICAgICIpCiBtZXNzYWdlKCIgICAgICAgIFNlc3Npb24gYnVzIHNvY2tldCBkaXI6ICAgJHtEQlVTX1NFU1NJT05fU09DS0VUX0RJUn0gICAgICAgICAgIikKLQotaWYoREJVU19DT05TT0xFX0FVVEhfRElSKQotbWVzc2FnZSgiICAgICAgICBwYW1fY29uc29sZSBhdXRoIGRpcjogICAgICR7REJVU19DT05TT0xFX0FVVEhfRElSfSAgICAgICAgICAgICIpCi1lbHNlKCkKLW1lc3NhZ2UoIiAgICAgICAgcGFtX2NvbnNvbGUgYXV0aCBkaXI6ICAgICAobm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKQotZW5kaWYoKQotCittZXNzYWdlKCIgICAgICAgIENvbnNvbGUgYXV0aCBkaXI6ICAgICAgICAgJHtEQlVTX0NPTlNPTEVfQVVUSF9ESVJ9ICAgICAgICAgICAgIikKK21lc3NhZ2UoIiAgICAgICAgU3lzdGVtIGJ1cyB1c2VyOiAgICAgICAgICAke0RCVVNfVVNFUn0gICAgICAgICAgICAgICAgICAgICAgICAiKQogbWVzc2FnZSgiICAgICAgICAnbWFrZSBjaGVjaycgc29ja2V0IGRpcjogICR7VEVTVF9TT0NLRVRfRElSfSAgICAgICAgICAgICAgICAgICIpCi1lbmRpZigpCitlbmRpZiAoV0lOMzIpCiBtZXNzYWdlKCIgICAgICAgIFRlc3QgbGlzdGVuIGFkZHJlc3M6ICAgICAgJHtURVNUX0xJU1RFTn0gICAgICAgICAgICAgICAgICAgICAgIikKIGlmIChNU1ZDKQogbWVzc2FnZSgiICAgICAgICBidWlsZCB0aW1lc3RhbXA6ICAgICAgICAgICR7REJVU19CVUlMRF9USU1FU1RBTVB9ICAgICAgICAgICAgICIpCkBAIC02NTcsMzMgKzY0NywzIEBACiAgICAgY21ha2UgLUxIIAogICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0KICkKLQotIwotIyBjcmVhdGUgcGtnY29uZmlnIGZpbGUKLSMKLWlmKFVOSVgpCi0gICAgc2V0KFBMQVRGT1JNX0xJQlMgcHRocmVhZCAke0xJQlJUfSkKLSAgICBpbmNsdWRlKEZpbmRQa2dDb25maWcgUVVJRVQpCi0gICAgaWYoUEtHX0NPTkZJR19GT1VORCkKLSAgICAgICAgIyBjb252ZXJ0IGxpc3RzIG9mIGxpbmsgbGlicmFyaWVzIGludG8gLWxzdGRjKysgLWxtIGV0Yy4uCi0gICAgICAgIGZvcmVhY2goTElCICR7Q01BS0VfQ19JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30gJHtQTEFURk9STV9MSUJTfSkKLSAgICAgICAgICAgIHNldChMSUJEQlVTX0xJQlMgIiR7TElCREJVU19MSUJTfSAtbCR7TElCfSIpCi0gICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBzZXQob3JpZ2luYWxfcHJlZml4ICIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpCi0gICAgICAgIGlmKERCVVNfUkVMT0NBVEFCTEUpCi0gICAgICAgICAgICBzZXQocGtnY29uZmlnX3ByZWZpeCAiXCR7cGNmaWxlZGlyfS8uLi8uLi8iKQotICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgIHNldChwa2djb25maWdfcHJlZml4ICJcJHtvcmlnaW5hbF9wcmVmaXh9IikKLSAgICAgICAgZW5kaWYoKQotICAgICAgICBzZXQoZXhlY19wcmVmaXggIlwke3ByZWZpeH0iKQotICAgICAgICBzZXQoYmluZGlyICJcJHtwcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9IikKLSAgICAgICAgc2V0KGxpYmRpciAiXCR7cHJlZml4fS8ke0NNQUtFX0lOU1RBTExfTElCRElSfSIpCi0gICAgICAgIHNldChpbmNsdWRlZGlyICJcJHtwcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfSIpCi0gICAgICAgIHNldChzeXNjb25mZGlyICJcJHtwcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9TWVNDT05GRElSfSIpCi0gICAgICAgIHNldChkYXRhZGlyICJcJHtwcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9EQVRBRElSfSIpCi0gICAgICAgIHNldChkYXRhcm9vdGRpciAiXCR7cHJlZml4fS8ke0NNQUtFX0lOU1RBTExfREFUQURJUn0iKQotICAgICAgICBzZXQoZGJ1c19kYWVtb25kaXIgIlwke3ByZWZpeH0vJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0iKQotICAgICAgICBjb25maWd1cmVfZmlsZSguLi9kYnVzLTEucGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9kYnVzLTEucGMgQE9OTFkpCi0gICAgICAgIGluc3RhbGwoRklMRVMgJHtDTUFLRV9CSU5BUllfRElSfS9kYnVzLTEucGMgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcGtnY29uZmlnKQotICAgIGVuZGlmKCkKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL2NtYWtlL0NvbmZpZ3VyZUNoZWNrcy5jbWFrZSBiL2NtYWtlL0NvbmZpZ3VyZUNoZWNrcy5jbWFrZQppbmRleCBhOWE1ZmM5Li4xMTliODNlIDEwMDY0NAotLS0gYS9jbWFrZS9Db25maWd1cmVDaGVja3MuY21ha2UKKysrIGIvY21ha2UvQ29uZmlndXJlQ2hlY2tzLmNtYWtlCkBAIC02MiwxMyArNjIsMTEgQEAKIGNoZWNrX3N5bWJvbF9leGlzdHMoU0NNX1JJR0hUUyAgICAic3lzL3R5cGVzLmg7c3lzL3NvY2tldC5oO3N5cy91bi5oIiBIQVZFX1VOSVhfRkRfUEFTU0lORykKIGNoZWNrX3N5bWJvbF9leGlzdHMocHJjdGwgICAgICAgICJzeXMvcHJjdGwuaCIgICAgICAgICAgICAgIEhBVkVfUFJDVEwpCiBjaGVja19zeW1ib2xfZXhpc3RzKHJhaXNlICAgICAgICAic2lnbmFsLmgiICAgICAgICAgICAgICAgICBIQVZFX1JBSVNFKQotY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRybGltaXQgICAgInN5cy9yZXNvdXJjZS5oO3N5cy90aW1lLmgiIEhBVkVfR0VUUkxJTUlUKQotY2hlY2tfc3ltYm9sX2V4aXN0cyhwcmxpbWl0ICAgICAgInN5cy9yZXNvdXJjZS5oO3N5cy90aW1lLmgiIEhBVkVfUFJMSU1JVCkKLWNoZWNrX3N5bWJvbF9leGlzdHMoc2V0cmxpbWl0ICAgICJzeXMvcmVzb3VyY2UuaDtzeXMvdGltZS5oIiBIQVZFX1NFVFJMSU1JVCkKIAogY2hlY2tfc3RydWN0X21lbWJlcihjbXNnY3JlZCBjbWNyZWRfcGlkICJzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgiIEhBVkVfQ01TR0NSRUQpICAgIyAgZGJ1cy1zeXNkZXBzLmMKIAogIyBtaXNzaW5nOgorIyBIQVZFX0FCU1RSQUNUX1NPQ0tFVFMKICMgREJVU19IQVZFX0dDQzMzX0dDT1YKIAogY2hlY2tfdHlwZV9zaXplKCJzaG9ydCIgICAgIFNJWkVPRl9TSE9SVCkKQEAgLTE3MCwzICsxNjgsMTkgQEAKICAgZW5kaWYoREJVU19IQVZFX19fVkFfQ09QWSkKIGVuZGlmKERCVVNfSEFWRV9WQV9DT1BZKQogZW5kaWYoTVNWQykgIyBfbm90XyBNU1ZDCisjIyMjIEFic3RyYWN0IHNvY2tldHMKKworaWYgKERCVVNfRU5BQkxFX0FCU1RSQUNUX1NPQ0tFVFMpCisKKyAgdHJ5X2NvbXBpbGUoSEFWRV9BQlNUUkFDVF9TT0NLRVRTCisgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAgICAgICAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9tb2R1bGVzL0NoZWNrRm9yQWJzdHJhY3RTb2NrZXRzLmMpCisKK2VuZGlmKERCVVNfRU5BQkxFX0FCU1RSQUNUX1NPQ0tFVFMpCisKK2lmKEhBVkVfQUJTVFJBQ1RfU09DS0VUUykKKyAgc2V0KERCVVNfUEFUSF9PUl9BQlNUUkFDVF9WQUxVRSBhYnN0cmFjdCkKK2Vsc2UoSEFWRV9BQlNUUkFDVF9TT0NLRVRTKQorICBzZXQoREJVU19QQVRIX09SX0FCU1RSQUNUX1ZBTFVFIHBhdGgpCitlbmRpZihIQVZFX0FCU1RSQUNUX1NPQ0tFVFMpCisKZGlmZiAtLWdpdCBhL2NtYWtlL0RCdXMxQ29uZmlnLmNtYWtlLmluIGIvY21ha2UvREJ1czFDb25maWcuY21ha2UuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzODlkNWUuLjAwMDAwMDAKLS0tIGEvY21ha2UvREJ1czFDb25maWcuY21ha2UuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIC0gQ29uZmlnIGZpbGUgZm9yIHRoZSBEQnVzMSBwYWNrYWdlCi0jIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKLSMgIERCdXMxX0ZPVU5EIC0gRmxhZyBmb3IgaW5kaWNhdGluZyB0aGF0IERCdXMxIHBhY2thZ2UgaGFzIGJlZW4gZm91bmQKLSMgIERCdXMxX0RFRklOSVRJT05TICAtIGNvbXBpbGUgZGVmaW5pdGlvbnMgZm9yIERCdXMxIFsxXQotIyAgREJ1czFfSU5DTFVERV9ESVJTIC0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgREJ1czEgWzFdCi0jICBEQnVzMV9MSUJSQVJJRVMgICAgLSBjbWFrZSB0YXJnZXRzIHRvIGxpbmsgYWdhaW5zdAotCi0jIFsxXSBUaGlzIHZhcmlhYmxlIGlzIG5vdCByZXF1aXJlZCBpZiBEQnVzMV9MSUJSQVJJRVMgaXMgYWRkZWQKLSMgICAgIHRvIGEgdGFyZ2V0IHdpdGggdGFyZ2V0X2xpbmtfbGlicmFyaWVzCi0KLSMgQ29tcHV0ZSBwYXRocwotaWYoQERCVVNfUkVMT0NBVEFCTEVAKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoREJ1czFfSU5TVEFMTF9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vLi4vLi4vLi4iIEFCU09MVVRFKQotZWxzZSgpCi0gICAgc2V0KERCdXMxX0lOU1RBTExfRElSICJAREJVU19QUkVGSVhAIikKLWVuZGlmKCkKLSMgT3VyIGxpYnJhcnkgZGVwZW5kZW5jaWVzIChjb250YWlucyBkZWZpbml0aW9ucyBmb3IgSU1QT1JURUQgdGFyZ2V0cykKLWlmKEVYSVNUUyAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9EQnVzMVRhcmdldHMuY21ha2UiKQotICAgICMgZG8gbm90IGFkZGl0aW9uYWwgc2VhcmNoIHBhdGhzIGZvciBpbXBsaWNpdCBsaWJyYXJpZXMKLSAgICAjIHNlZSBodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL3YzLjAvcG9saWN5L0NNUDAwMDMuaHRtbAotICAgIGlmKENPTU1BTkQgY21ha2VfcG9saWN5KQotICAgICAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAwMDMgTkVXKQotICAgIGVuZGlmKENPTU1BTkQgY21ha2VfcG9saWN5KQotCi0gICAgaWYoTk9UIFRBUkdFVCBkYnVzLTEpCi0gICAgICAgIGluY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vREJ1czFUYXJnZXRzLmNtYWtlIikKLSAgICBlbmRpZigpCi0KLSAgICBzZXQoREJ1czFfSU5DTFVERV9ESVJTICIke0RCdXMxX0lOU1RBTExfRElSfS9AQ01BS0VfSU5TVEFMTF9JTkNMVURFRElSQC9kYnVzLTEuMCIgIiR7REJ1czFfSU5TVEFMTF9ESVJ9L0BDTUFLRV9JTlNUQUxMX0xJQkRJUkAvZGJ1cy0xLjAvaW5jbHVkZSIpCi0gICAgc2V0KERCdXMxX0RFRklOSVRJT05TKQotICAgIHNldChEQnVzMV9MSUJSQVJJRVMgZGJ1cy0xKQotCi0gICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBkYnVzLTEgUFJPUEVSVFkgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtEQnVzMV9JTkNMVURFX0RJUlN9KQotICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgZGJ1cy0xIFBST1BFUlRZIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICR7REJ1czFfREVGSU5JVElPTlN9KQotZWxzZSgpCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiSW5jb21wbGV0ZSBjbWFrZSBzdXBwb3J0IGluIERCdXMxIGZpbmRfcGFja2FnZSBjb25maWd1cmF0aW9uIikKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL2NtYWtlL0RCdXMxQ29uZmlnLnBrZ2NvbmZpZy5pbiBiL2NtYWtlL0RCdXMxQ29uZmlnLnBrZ2NvbmZpZy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMwYTI1ZS4uMDAwMDAwMAotLS0gYS9jbWFrZS9EQnVzMUNvbmZpZy5wa2djb25maWcuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0jIC0gQ29uZmlnIGZpbGUgZm9yIHRoZSBEQnVzMSBwYWNrYWdlCi0jIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKLSMgIERCdXMxX0ZPVU5EIC0gRmxhZyBmb3IgaW5kaWNhdGluZyB0aGF0IERCdXMxIHBhY2thZ2UgaGFzIGJlZW4gZm91bmQKLSMgIERCdXMxX0RFRklOSVRJT05TICAtIGNvbXBpbGUgZGVmaW5pdGlvbnMgZm9yIERCdXMxIFsxXQotIyAgREJ1czFfSU5DTFVERV9ESVJTIC0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgREJ1czEgWzFdCi0jICBEQnVzMV9MSUJSQVJJRVMgICAgLSBjbWFrZSB0YXJnZXRzIHRvIGxpbmsgYWdhaW5zdAotCi0jIFsxXSBUaGlzIHZhcmlhYmxlIGlzIG5vdCByZXF1aXJlZCBpZiBEQnVzMV9MSUJSQVJJRVMgaXMgYWRkZWQKLSMgICAgIHRvIGEgdGFyZ2V0IHdpdGggdGFyZ2V0X2xpbmtfbGlicmFyaWVzCi0KLWdldF9maWxlbmFtZV9jb21wb25lbnQoREJ1czFfUEtHQ09ORklHX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi8uLi9wa2djb25maWciIEFCU09MVVRFKQotZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKLWlmKERFRklORUQgRU5We1BLR19DT05GSUdfRElSfSkKLSAgICBzZXQoX2RidXNfcGtnY29uZmlnX2RpciAiJEVOVntQS0dfQ09ORklHX0RJUn0iKQotZW5kaWYoKQotaWYoREVGSU5FRCBFTlZ7UEtHX0NPTkZJR19QQVRIfSkKLSAgICBzZXQoX2RidXNfcGtnY29uZmlnX3BhdGggIiRFTlZ7UEtHX0NPTkZJR19QQVRIfSIpCi1lbmRpZigpCi1pZihERUZJTkVEIEVOVntQS0dfQ09ORklHX0xJQkRJUn0pCi0gICAgc2V0KF9kYnVzX3BrZ2NvbmZpZ19saWJkaXIgIiRFTlZ7UEtHX0NPTkZJR19MSUJESVJ9IikKLWVuZGlmKCkKLXNldChFTlZ7UEtHX0NPTkZJR19ESVJ9KQotc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICR7REJ1czFfUEtHQ09ORklHX0RJUn0pCi1zZXQoRU5We1BLR19DT05GSUdfTElCRElSfSAke0RCdXMxX1BLR0NPTkZJR19ESVJ9KQotIyBmb3IgZGVidWdnaW5nCi0jc2V0KEVOVntQS0dfQ09ORklHX0RFQlVHX1NQRVd9IDEpCi1wa2dfY2hlY2tfbW9kdWxlcyhQQ19EQlVTMSBRVUlFVCBkYnVzLTEpCi1pZihERUZJTkVEIF9kYnVzX3BrZ2NvbmZpZ19kaXIpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX0RJUn0gIiR7X2RidXNfcGtnY29uZmlnX2Rpcn0iKQotZWxzZSgpCi0gICAgdW5zZXQoRU5We1BLR19DT05GSUdfRElSfSkKLWVuZGlmKCkKLWlmKERFRklORUQgX2RidXNfcGtnY29uZmlnX3BhdGgpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIke19kYnVzX3BrZ2NvbmZpZ19wYXRofSIpCi1lbHNlKCkKLSAgICB1bnNldChFTlZ7UEtHX0NPTkZJR19QQVRIfSkKLWVuZGlmKCkKLWlmKERFRklORUQgX2RidXNfcGtnY29uZmlnX2xpYmRpcikKLSAgICBzZXQoRU5We1BLR19DT05GSUdfTElCRElSfSAiJHtfZGJ1c19wa2djb25maWdfbGliZGlyfSIpCi1lbHNlKCkKLSAgICB1bnNldChFTlZ7UEtHX0NPTkZJR19MSUJESVJ9KQotZW5kaWYoKQotdW5zZXQoX2RidXNfcGtnY29uZmlnX2RpcikKLXVuc2V0KF9kYnVzX3BrZ2NvbmZpZ19wYXRoKQotdW5zZXQoX2RidXNfcGtnY29uZmlnX2xpYmRpcikKLXNldChEQnVzMV9ERUZJTklUSU9OUyAke1BDX0RCVVMxX0NGTEFHU19PVEhFUn0pCi0KLSMgZmluZCB0aGUgcmVhbCBzdHVmZiBhbmQgdXNlIHBrZ2NvbmZpZyB2YXJpYWJsZXMgYXMgaGludHMKLSMgYmVjYXVzZSBjbWFrZSBwcm92aWRlcyBtb3JlIHNlYXJjaCBvcHRpb25zCi1maW5kX3BhdGgoREJ1czFfSU5DTFVERV9ESVIgZGJ1cy9kYnVzLmgKLSAgICBISU5UUyAke1BDX0RCVVMxX0lOQ0xVREVESVJ9ICR7UENfREJVUzFfSU5DTFVERV9ESVJTfQotICAgIFBBVEhfU1VGRklYRVMgZGJ1cy0xLjApCi1maW5kX3BhdGgoREJ1czFfQVJDSF9JTkNMVURFX0RJUiBkYnVzL2RidXMtYXJjaC1kZXBzLmgKLSAgICBISU5UUyAke1BDX0RCVVMxX0lOQ0xVREVfRElSU30KLSAgICBQQVRIX1NVRkZJWEVTIGRidXMtMS4wKQotZmluZF9saWJyYXJ5KERCdXMxX0xJQlJBUlkgTkFNRVMgJHtQQ19EQlVTMV9MSUJSQVJJRVN9Ci0gICAgSElOVFMgJHtQQ19EQlVTMV9MSUJESVJ9ICR7UENfREJVUzFfTElCUkFSWV9ESVJTfSkKLQotaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKLSMgaGFuZGxlIHRoZSBRVUlFVExZIGFuZCBSRVFVSVJFRCBhcmd1bWVudHMgYW5kIHNldCBEQnVzMV9GT1VORCB0byBUUlVFCi0jIGlmIGFsbCBsaXN0ZWQgdmFyaWFibGVzIGFyZSBUUlVFCi1maW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoREJ1czEgREVGQVVMVF9NU0cKLSAgICBEQnVzMV9MSUJSQVJZIERCdXMxX0lOQ0xVREVfRElSIERCdXMxX0FSQ0hfSU5DTFVERV9ESVIpCi0KLSMgbWFrZSB0aGUgbWVudGlvbmVkIHZhcmlhYmxlcyBvbmx5IHZpc2libGUgaW4gY21ha2UgZ3VpIHdpdGggImFkdmFuY2VkIiBlbmFibGVkCi1tYXJrX2FzX2FkdmFuY2VkKERCdXMxX0lOQ0xVREVfRElSIERCdXMxX0xJQlJBUlkpCi0KLXNldChEQnVzMV9MSUJSQVJJRVMgZGJ1cy0xKQotc2V0KERCdXMxX0lOQ0xVREVfRElSUyAiJHtEQnVzMV9JTkNMVURFX0RJUn0iICIke0RCdXMxX0FSQ0hfSU5DTFVERV9ESVJ9IikKLQotIyBzZXR1cCBpbXBvcnRlZCB0YXJnZXQKLWFkZF9saWJyYXJ5KGRidXMtMSBTSEFSRUQgSU1QT1JURUQpCi1zZXRfcHJvcGVydHkoVEFSR0VUIGRidXMtMSBBUFBFTkQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gJHtEQnVzMV9MSUJSQVJZfSkKLXNldF9wcm9wZXJ0eShUQVJHRVQgZGJ1cy0xIEFQUEVORCBQUk9QRVJUWSBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAke0RCdXMxX0lOQ0xVREVfRElSU30pCi1zZXRfcHJvcGVydHkoVEFSR0VUIGRidXMtMSBBUFBFTkQgUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgJHtEQnVzMV9ERUZJTklUSU9OU30pCmRpZmYgLS1naXQgYS9jbWFrZS9EQnVzMUNvbmZpZ1ZlcnNpb24uY21ha2UuaW4gYi9jbWFrZS9EQnVzMUNvbmZpZ1ZlcnNpb24uY21ha2UuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzOWJmNTkuLjAwMDAwMDAKLS0tIGEvY21ha2UvREJ1czFDb25maWdWZXJzaW9uLmNtYWtlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotc2V0KFBBQ0tBR0VfVkVSU0lPTiBAREJVU19WRVJTSU9OQCkKLQotIyBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgUEFDS0FHRV9GSU5EX1ZFUlNJT04gaXMgY29tcGF0aWJsZQotaWYoIiR7UEFDS0FHRV9WRVJTSU9OfSIgVkVSU0lPTl9MRVNTICIke1BBQ0tBR0VfRklORF9WRVJTSU9OfSIpCi0gIHNldChQQUNLQUdFX1ZFUlNJT05fQ09NUEFUSUJMRSBGQUxTRSkKLWVsc2UoKQotICBzZXQoUEFDS0FHRV9WRVJTSU9OX0NPTVBBVElCTEUgVFJVRSkKLSAgaWYgKCIke1BBQ0tBR0VfVkVSU0lPTn0iIFZFUlNJT05fRVFVQUwgIiR7UEFDS0FHRV9GSU5EX1ZFUlNJT059IikKLSAgICBzZXQoUEFDS0FHRV9WRVJTSU9OX0VYQUNUIFRSVUUpCi0gIGVuZGlmKCkKLWVuZGlmKCkKZGlmZiAtLWdpdCBhL2NtYWtlL2J1cy9DTWFrZUxpc3RzLnR4dCBiL2NtYWtlL2J1cy9DTWFrZUxpc3RzLnR4dAppbmRleCA0YzViZGNmLi4wZGNhZTY1IDEwMDY0NAotLS0gYS9jbWFrZS9idXMvQ01ha2VMaXN0cy50eHQKKysrIGIvY21ha2UvYnVzL0NNYWtlTGlzdHMudHh0CkBAIC0yNiw2ICsyNiw3IEBACiAJY29uZmlndXJlX2ZpbGUoJHtGSUxFfSAke1RBUkdFVH0gKQogRU5ERk9SRUFDSChGSUxFKQogCitTRVQgKFhNTF9TT1VSQ0VTICR7QlVTX0RJUn0vY29uZmlnLWxvYWRlci1leHBhdC5jKQogCiBpZiAoREJVU19CVVNfRU5BQkxFX0lOT1RJRlkpCiAgICAgc2V0IChESVJfV0FUQ0hfU09VUkNFICR7QlVTX0RJUn0vZGlyLXdhdGNoLWlub3RpZnkuYykKQEAgLTQ0LDcgKzQ1LDYgQEAKIAkke0JVU19ESVJ9L2F1ZGl0LmgKIAkke0JVU19ESVJ9L2J1cy5jCQkJCQkKIAkke0JVU19ESVJ9L2J1cy5oCQkJCQkKLQkke0JVU19ESVJ9L2NvbmZpZy1sb2FkZXItZXhwYXQuYwogCSR7QlVTX0RJUn0vY29uZmlnLXBhcnNlci5jCQkJCQogCSR7QlVTX0RJUn0vY29uZmlnLXBhcnNlci5oCiAJJHtCVVNfRElSfS9jb25maWctcGFyc2VyLWNvbW1vbi5jCkBAIC03Myw2ICs3Myw3IEBACiAJJHtCVVNfRElSfS90ZXN0LmgJCQkJCQogCSR7QlVTX0RJUn0vdXRpbHMuYwkJCQkJCiAJJHtCVVNfRElSfS91dGlscy5oCQkJCQkKKwkke1hNTF9TT1VSQ0VTfQogCSR7RElSX1dBVENIX1NPVVJDRX0KICkKIGlmKERCVVNfRU5BQkxFX1NUQVRTKQpAQCAtODUsMTUgKzg2LDE1IEBACiBpbmNsdWRlX2RpcmVjdG9yaWVzKAogCSR7Q01BS0VfQklOQVJZX0RJUn0KIAkke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uCi0JJHtFWFBBVF9JTkNMVURFX0RJUn0KKwkke1hNTF9JTkNMVURFX0RJUn0KICkKIAogYWRkX2V4ZWN1dGFibGUoZGJ1cy1kYWVtb24gJHtCVVNfU09VUkNFU30gJHtCVVNfRElSfS9tYWluLmMpCi10YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy1kYWVtb24gJHtEQlVTX0lOVEVSTkFMX0xJQlJBUklFU30gJHtFWFBBVF9MSUJSQVJJRVN9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtZGFlbW9uICR7REJVU19JTlRFUk5BTF9MSUJSQVJJRVN9ICR7WE1MX0xJQlJBUll9KQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGRidXMtZGFlbW9uIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgJHtEQlVTX0RBRU1PTl9OQU1FfSkKIHNldF90YXJnZXRfcHJvcGVydGllcyhkYnVzLWRhZW1vbiBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgJHtEQlVTX0lOVEVSTkFMX0NMSUVOVF9ERUZJTklUSU9OU30pCiAKLWluc3RhbGwoVEFSR0VUUyBkYnVzLWRhZW1vbiAke0lOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1N9KQoraW5zdGFsbF90YXJnZXRzKC9iaW4gZGJ1cy1kYWVtb24pCiBpbnN0YWxsKEZJTEVTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zZXNzaW9uLmNvbmYgREVTVElOQVRJT04gc2hhcmUvZGJ1cy0xKQogaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGVnYWN5LWNvbmZpZy9zZXNzaW9uLmNvbmYgREVTVElOQVRJT04gZXRjL2RidXMtMSkKIGluc3RhbGwoRElSRUNUT1JZIERFU1RJTkFUSU9OIHNoYXJlL2RidXMtMS9zZXNzaW9uLmQpCkBAIC0xMTYsNDcgKzExNywyNCBAQAogCSkKIAogCWFkZF9leGVjdXRhYmxlKGRidXMtc2VydmljZSAke2RidXNfc2VydmljZV9TT1VSQ0VTfSApCi0JdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtc2VydmljZSAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke0VYUEFUX0xJQlJBUklFU30pCisJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtc2VydmljZSAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke1hNTF9MSUJSQVJZfSkKIAlzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZGJ1cy1zZXJ2aWNlIFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAke0RCVVNfSU5URVJOQUxfQ0xJRU5UX0RFRklOSVRJT05TfSkKLQlpbnN0YWxsKFRBUkdFVFMgZGJ1cy1zZXJ2aWNlICR7SU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHU30pCisJaW5zdGFsbF90YXJnZXRzKC9iaW4gZGJ1cy1zZXJ2aWNlICkKIGVuZGlmIChEQlVTX1NFUlZJQ0UpCiAKLXNldChMQVVOQ0hfSEVMUEVSX1NPVVJDRVMKLSAgICAke0JVU19ESVJ9L2NvbmZpZy1sb2FkZXItZXhwYXQuYwotICAgICR7QlVTX0RJUn0vY29uZmlnLXBhcnNlci1jb21tb24uYwotICAgICR7QlVTX0RJUn0vY29uZmlnLXBhcnNlci10cml2aWFsLmMKLSAgICAke0JVU19ESVJ9L2Rlc2t0b3AtZmlsZS5jCi0gICAgJHtCVVNfRElSfS91dGlscy5jCi0gICAgJHtCVVNfRElSfS9hY3RpdmF0aW9uLWhlbHBlci5jCi0pCi0KLWlmKE5PVCBXSU4zMikKLQlhZGRfZXhlY3V0YWJsZShkYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyICR7TEFVTkNIX0hFTFBFUl9TT1VSQ0VTfSAke0JVU19ESVJ9L2FjdGl2YXRpb24taGVscGVyLWJpbi5jICkKLQl0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlciAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke0VYUEFUX0xJQlJBUklFU30gKQotZW5kaWYoTk9UIFdJTjMyKQotCiBpZiAoREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMpCiAJc2V0KFNPVVJDRVMgJHtCVVNfU09VUkNFU30gJHtCVVNfRElSfS90ZXN0LW1haW4uYykKLQlhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3QtYnVzICIke1NPVVJDRVN9IiAgJHtEQlVTX0lOVEVSTkFMX0xJQlJBUklFU30gJHtFWFBBVF9MSUJSQVJJRVN9KQorCWFkZF90ZXN0X2V4ZWN1dGFibGUodGVzdC1idXMgIiR7U09VUkNFU30iICAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke1hNTF9MSUJSQVJZfSkKIAlzZXRfdGFyZ2V0X3Byb3BlcnRpZXModGVzdC1idXMgUFJPUEVSVElFUyBDT01QSUxFX0ZMQUdTICR7REJVU19JTlRFUk5BTF9DTElFTlRfREVGSU5JVElPTlN9KQogCWlmIChOT1QgV0lOMzIpCiAJCXNldCh0ZXN0X2J1c19zeXN0ZW1fU09VUkNFUwotCQkJJHtCVVNfRElSfS9jb25maWctbG9hZGVyLWV4cGF0LmMKKwkJCSR7WE1MX1NPVVJDRVN9CiAJCQkke0JVU19ESVJ9L2NvbmZpZy1wYXJzZXItY29tbW9uLmMKIAkJCSR7QlVTX0RJUn0vY29uZmlnLXBhcnNlci10cml2aWFsLmMKIAkJCSR7QlVTX0RJUn0vdXRpbHMuYwogCQkJJHtCVVNfRElSfS90ZXN0LXN5c3RlbS5jCiAJCSkKLQkJYWRkX3Rlc3RfZXhlY3V0YWJsZSh0ZXN0LWJ1cy1zeXN0ZW0gIiR7dGVzdF9idXNfc3lzdGVtX1NPVVJDRVN9IiAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke0VYUEFUX0xJQlJBUklFU30gJHtEQlVTX0JVU19MSUJTfSkKLQotCQlhZGRfZXhlY3V0YWJsZShkYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyLXRlc3QgJHtMQVVOQ0hfSEVMUEVSX1NPVVJDRVN9ICAgICAke0JVU19ESVJ9L2FjdGl2YXRpb24taGVscGVyLWJpbi5jKQotCQlzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlci10ZXN0IFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAiLURBQ1RJVkFUSU9OX0xBVU5DSEVSX1RFU1QiKQotCQl0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlci10ZXN0ICR7REJVU19JTlRFUk5BTF9MSUJSQVJJRVN9ICR7RVhQQVRfTElCUkFSSUVTfSApCi0KLQkJc2V0IChTT1VSQ0VTICR7TEFVTkNIX0hFTFBFUl9TT1VSQ0VTfSAke0JVU19ESVJ9L3Rlc3QtbGF1bmNoLWhlbHBlci5jKQotCQlhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3QtYnVzLWxhdW5jaC1oZWxwZXIgIiR7U09VUkNFU30iICAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke0VYUEFUX0xJQlJBUklFU30pCi0JCXNldF90YXJnZXRfcHJvcGVydGllcyh0ZXN0LWJ1cy1sYXVuY2gtaGVscGVyIFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAiLURBQ1RJVkFUSU9OX0xBVU5DSEVSX1RFU1QgLURBQ1RJVkFUSU9OX0xBVU5DSEVSX0RPX09PTSIpCi0JCWluc3RhbGxfdGFyZ2V0cygvbGliIGRidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIpCisJCWFkZF90ZXN0X2V4ZWN1dGFibGUodGVzdC1idXMtc3lzdGVtICIke3Rlc3RfYnVzX3N5c3RlbV9TT1VSQ0VTfSIgJHtEQlVTX0lOVEVSTkFMX0xJQlJBUklFU30gJHtYTUxfTElCUkFSWX0gJHtEQlVTX0JVU19MSUJTfSkKIAllbmRpZigpCiBlbmRpZiAoREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMpCiAKQEAgLTE3NSw2ICsxNTMsMzEgQEAKIAogIyNpbnN0YWxsX2ZpbGUoJHtjb25maWdkaXJ9L3N5c3RlbS5kIEZJTEUKIAorCitzZXQoTEFVTkNIX0hFTFBFUl9TT1VSQ0VTICR7WE1MX1NPVVJDRVN9CisgICAgJHtCVVNfRElSfS9jb25maWctcGFyc2VyLWNvbW1vbi5jCisgICAgJHtCVVNfRElSfS9jb25maWctcGFyc2VyLXRyaXZpYWwuYworICAgICR7QlVTX0RJUn0vZGVza3RvcC1maWxlLmMKKyAgICAke0JVU19ESVJ9L3V0aWxzLmMKKyAgICAke0JVU19ESVJ9L2FjdGl2YXRpb24taGVscGVyLmMKKworKQorCitpZihOT1QgV0lOMzIpCisjIFRPRE8gUEVORElORyhrZGFiKSBmaXggYnVpbGQgb24gd2luZG93cyAoYWN0aXZhdGlvbi1oZWxwZXIuYykKKyAgIGFkZF9leGVjdXRhYmxlKGRidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIgJHtMQVVOQ0hfSEVMUEVSX1NPVVJDRVN9ICR7QlVTX0RJUn0vYWN0aXZhdGlvbi1oZWxwZXItYmluLmMgKQorICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIgJHtEQlVTX0lOVEVSTkFMX0xJQlJBUklFU30gJHtYTUxfTElCUkFSWX0gKQorICAgCisgICBhZGRfZXhlY3V0YWJsZShkYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyLXRlc3QgJHtMQVVOQ0hfSEVMUEVSX1NPVVJDRVN9ICAgICAke0JVU19ESVJ9L2FjdGl2YXRpb24taGVscGVyLWJpbi5jKQorICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGRidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXItdGVzdCBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgIi1EQUNUSVZBVElPTl9MQVVOQ0hFUl9URVNUIikKKyAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyLXRlc3QgJHtEQlVTX0lOVEVSTkFMX0xJQlJBUklFU30gJHtYTUxfTElCUkFSWX0gKQorICAgCisgICBzZXQgKFNPVVJDRVMgJHtMQVVOQ0hfSEVMUEVSX1NPVVJDRVN9ICR7QlVTX0RJUn0vdGVzdC1sYXVuY2gtaGVscGVyLmMpCisgICBhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3QtYnVzLWxhdW5jaC1oZWxwZXIgIiR7U09VUkNFU30iICAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSAke1hNTF9MSUJSQVJZfSkKKyAgIHNldF90YXJnZXRfcHJvcGVydGllcyh0ZXN0LWJ1cy1sYXVuY2gtaGVscGVyIFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAiLURBQ1RJVkFUSU9OX0xBVU5DSEVSX1RFU1QgLURBQ1RJVkFUSU9OX0xBVU5DSEVSX0RPX09PTSIpCisgICBpbnN0YWxsX3RhcmdldHMoL2xpYiBkYnVzLWRhZW1vbi1sYXVuY2gtaGVscGVyKQorZW5kaWYoTk9UIFdJTjMyKQorCiAjIyMjIEluaXQgc2NyaXB0cyBmdW4KICNTQ1JJUFRfSU5fRklMRVM9bWVzc2FnZWJ1cy5pbgogIwkJcmMubWVzc2FnZWJ1cy5pbgpkaWZmIC0tZ2l0IGEvY21ha2UvY29uZmlnLmguY21ha2UgYi9jbWFrZS9jb25maWcuaC5jbWFrZQppbmRleCAxMTE5MTgyLi5kMmFmM2M5IDEwMDY0NAotLS0gYS9jbWFrZS9jb25maWcuaC5jbWFrZQorKysgYi9jbWFrZS9jb25maWcuaC5jbWFrZQpAQCAtMjUsMTQgKzI1LDE1IEBACiAjY21ha2VkZWZpbmUgREJVU19TRVNTSU9OX0JVU19DT05ORUNUX0FERFJFU1MgICJAREJVU19TRVNTSU9OX0JVU19DT05ORUNUX0FERFJFU1NAIgogI2NtYWtlZGVmaW5lIERCVVNfTUFDSElORV9VVUlEX0ZJTEUgIkBEQlVTX01BQ0hJTkVfVVVJRF9GSUxFQCIKICNjbWFrZWRlZmluZSBEQlVTX0RBRU1PTkRJUiAiQERCVVNfREFFTU9ORElSQCIKLSNjbWFrZWRlZmluZSBEQlVTX1JVTlNUQVRFRElSICJAREJVU19SVU5TVEFURURJUkAiCiAKICNjbWFrZWRlZmluZSBEQlVTX0VOQUJMRV9TVEFUUwogCiAjZGVmaW5lIFRFU1RfTElTVEVOICAgICAgICJAVEVTVF9MSVNURU5AIgogCiAvLyB0ZXN0IGJpbmFyaWVzCisjZGVmaW5lIERCVVNfVEVTVF9FWEVDICJAREJVU19URVNUX0VYRUNAIgogI2RlZmluZSBEQlVTX0VYRUVYVCAiQEVYRUVYVEAiCisjY21ha2VkZWZpbmUgVEVTVF9CVVNfTEFVTkNIX0JJTkFSWSAiQFRFU1RfQlVTX0xBVU5DSF9CSU5BUllAIgogCiAvKiBTb21lIGRidXMgZmVhdHVyZXMgKi8KICNjbWFrZWRlZmluZSBEQlVTX0VOQUJMRV9BTlNJIDEKQEAgLTQ5LDExICs1MCwzMiBAQAogLyogZG94eWdlbiAqLwogI2NtYWtlZGVmaW5lIERCVVNfR0NPVl9FTkFCTEVEIDEKIAorLyogYWJzdHJhY3Qtc29ja2V0cyAqLworCisjY21ha2VkZWZpbmUgSEFWRV9BQlNUUkFDVF9TT0NLRVRTIDEKKworI2NtYWtlZGVmaW5lIERCVVNfUEFUSF9PUl9BQlNUUkFDVF9WQUxVRSAxCisKKyNpZiAoZGVmaW5lZCBEQlVTX1BBVEhfT1JfQUJTVFJBQ1RfVkFMVUUpCisjZGVmaW5lIERCVVNfUEFUSF9PUl9BQlNUUkFDVCBAREJVU19QQVRIX09SX0FCU1RSQUNUX1ZBTFVFQAorI2VuZGlmCisKKyNpZmRlZiBEQlVTX1BBVEhfT1JfQUJTVFJBQ1RfVkFMVUUKKyN1bmRlZiBEQlVTX1BBVEhfT1JfQUJTVFJBQ1RfVkFMVUUKKyNlbmRpZgorCiAvKiBzZWxpbnV4ICovCiAvKiBrcXVldWUgKi8KICNjbWFrZWRlZmluZSBIQVZFX0NPTlNPTEVfT1dORVJfRklMRSAxCiAjZGVmaW5lIERCVVNfQ09OU09MRV9PV05FUl9GSUxFICJAREJVU19DT05TT0xFX09XTkVSX0ZJTEVAIgogCisjY21ha2VkZWZpbmUgREJVU19IQVZFX0FUT01JQ19JTlQgMQorI2NtYWtlZGVmaW5lIERCVVNfVVNFX0FUT01JQ19JTlRfNDg2IDEKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyMgZGVmaW5lIERCVVNfSEFWRV9BVE9NSUNfSU5UIDEKKyMgZGVmaW5lIERCVVNfVVNFX0FUT01JQ19JTlRfNDg2IDEKKyNlbmRpZgorCiAjY21ha2VkZWZpbmUgREJVU19CVUlMRF9YMTEgMQogLyogRm9yIHRoZSBtb21lbnQsIHRoZSBjbWFrZSBidWlsZCBzeXN0ZW0gZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgb2YKICAqIHRoZSBhdXRvY29uZiBidWlsZCBzeXN0ZW0ncyAtLWRpc2FibGUteDExLWF1dG9sYXVuY2ggKi8KQEAgLTIwNSw5ICsyMjcsNiBAQAogI2NtYWtlZGVmaW5lIEhBVkVfQUNDRVBUNCAxCiAjY21ha2VkZWZpbmUgSEFWRV9ESVJGRCAxCiAjY21ha2VkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQxIDEKLSNjbWFrZWRlZmluZSBIQVZFX0dFVFJMSU1JVCAxCi0jY21ha2VkZWZpbmUgSEFWRV9QUkxJTUlUIDEKLSNjbWFrZWRlZmluZSBIQVZFX1NFVFJMSU1JVCAxCiAjY21ha2VkZWZpbmUgSEFWRV9VTklYX0ZEX1BBU1NJTkcgMQogCiAvLyBzdHJ1Y3RzCmRpZmYgLS1naXQgYS9jbWFrZS9kYnVzL0NNYWtlTGlzdHMudHh0IGIvY21ha2UvZGJ1cy9DTWFrZUxpc3RzLnR4dAppbmRleCA4YTAxZDkxLi4xNzAxNDA4IDEwMDY0NAotLS0gYS9jbWFrZS9kYnVzL0NNYWtlTGlzdHMudHh0CisrKyBiL2NtYWtlL2RidXMvQ01ha2VMaXN0cy50eHQKQEAgLTIyLDkgKzIyLDcgQEAKIAkke0RCVVNfRElSfS9kYnVzLXN5bnRheC5oCiAJJHtEQlVTX0RJUn0vZGJ1cy10aHJlYWRzLmgKIAkke0RCVVNfRElSfS9kYnVzLXR5cGVzLmgKLSkKLXNldCAoZGJ1c2luY2x1ZGVfQVJDSF9IRUFERVJTCi0JJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2RidXMtYXJjaC1kZXBzLmgKKwlkYnVzLWFyY2gtZGVwcy5oCiApCiAKICMjIyBzb3VyY2UgY29kZSB0aGF0IGdvZXMgaW4gdGhlIGluc3RhbGxlZCBjbGllbnQgbGlicmFyeQpAQCAtMTcwLDcgKzE2OCw2IEBACiAJc2V0IChEQlVTX1VUSUxfU09VUkNFUyAKIAkJJHtEQlVTX1VUSUxfU09VUkNFU30KIAkJJHtEQlVTX0RJUn0vZGJ1cy10ZXN0LmMKLQkJJHtEQlVTX0RJUn0vZGJ1cy1zcGF3bi10ZXN0LmMKIAkpCiBlbmRpZiAoREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMpCiAKQEAgLTI0MCwxMiArMjM3LDE1IEBACiAJJHtEQlVTX0xJQl9IRUFERVJTfQogCSR7REJVU19TSEFSRURfSEVBREVSU30KICkKLQotc2V0IChCVUlMRF9GSUxFVkVSU0lPTiAke0RCVVNfTUFKT1JfVkVSU0lPTn0sJHtEQlVTX01JTk9SX1ZFUlNJT059LCR7REJVU19NSUNST19WRVJTSU9OfSwke0RCVVNfUEFUQ0hfVkVSU0lPTn0pCi1zZXQgKEJVSUxEX1RJTUVTVEFNUCAke0RCVVNfQlVJTERfVElNRVNUQU1QfSkKLQotY29uZmlndXJlX2ZpbGUoJHtEQlVTX0RJUn0vdmVyc2lvbmluZm8ucmMuaW4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ZlcnNpb25pbmZvLnJjKQotbGlzdChBUFBFTkQgbGliZGJ1c19TT1VSQ0VTIHZlcnNpb25pbmZvLnJjKQoraWYgKE1TVkMpCisgICAgc2V0IChCVUlMRF9GSUxFVkVSU0lPTiAke0RCVVNfTUFKT1JfVkVSU0lPTn0sJHtEQlVTX01JTk9SX1ZFUlNJT059LCR7REJVU19NSUNST19WRVJTSU9OfSwke0RCVVNfUEFUQ0hfVkVSU0lPTn0pCisgICAgc2V0IChCVUlMRF9USU1FU1RBTVAgJHtEQlVTX0JVSUxEX1RJTUVTVEFNUH0pCisgICAgCisgICAgY29uZmlndXJlX2ZpbGUoJHtEQlVTX0RJUn0vdmVyc2lvbmluZm8ucmMuaW4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ZlcnNpb25pbmZvLnJjKQorICAgIGZpbGUoV1JJVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2FmeHJlcy5oICIiKQorICAgIGxpc3QoQVBQRU5EIGxpYmRidXNfU09VUkNFUyB2ZXJzaW9uaW5mby5yYykKKyAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXModmVyc2lvbmluZm8ucmMgQ09NUElMRV9GTEFHUyAiLURfX0xJTkVfXz0xIikKK2VuZGlmIChNU1ZDKQogCiBpZihNU1ZDX0lERSkKIAlwcm9qZWN0X3NvdXJjZV9ncm91cCgke0dST1VQX0NPREV9IERCVVNfTElCX1NPVVJDRVMgREJVU19MSUJfSEVBREVSUykKQEAgLTI1MywxMyArMjUzLDggQEAKIAlwcm9qZWN0X3NvdXJjZV9ncm91cCgke0dST1VQX0NPREV9IERCVVNfVVRJTF9TT1VSQ0VTIERCVVNfVVRJTF9TT1VSQ0VTKQogZW5kaWYoTVNWQ19JREUpCiAKLSMgZm9yIGNsb2NrX2dldHJlcygpIG9uIGUuZy4gR05VL0xpbnV4IChidXQgbm90IEFuZHJvaWQpCi1maW5kX2xpYnJhcnkoTElCUlQgcnQpCi0KLSMgZm9yIHNvY2tldCgpIG9uIFFOWAotZmluZF9saWJyYXJ5KExJQlNPQ0tFVCBzb2NrZXQpCi0KICMjIyBDbGllbnQgbGlicmFyeQorCiBhZGRfbGlicmFyeShkYnVzLTEgU0hBUkVECiAJCQkke2xpYmRidXNfU09VUkNFU30KIAkJCSR7bGliZGJ1c19IRUFERVJTfQpAQCAtMjgwLDE5ICsyNzUsMTMgQEAKICAgICBpZihXSU5DRSkKICAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtMSB3czIpCiAgICAgZWxzZShXSU5DRSkKLSAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtMSB3czJfMzIgYWR2YXBpMzIgbmV0YXBpMzIgaXBobHBhcGkgZGJnaGVscCkKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtMSB3czJfMzIgYWR2YXBpMzIgbmV0YXBpMzIgaXBobHBhcGkpCiAgICAgZW5kaWYoV0lOQ0UpCiBlbHNlKFdJTjMyKQogICAgIGlmKERFRklORUQgREJVU19MSUJSQVJZX1JFVklTSU9OKQogICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZGJ1cy0xIFBST1BFUlRJRVMgVkVSU0lPTiAke0RCVVNfTElCUkFSWV9NQUpPUn0uJHtEQlVTX0xJQlJBUllfQUdFfS4ke0RCVVNfTElCUkFSWV9SRVZJU0lPTn0gU09WRVJTSU9OICR7REJVU19MSUJSQVJZX01BSk9SfSkKICAgICBlbmRpZigpCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtMSAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQotICAgIGlmKExJQlJUKQotICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy0xICR7TElCUlR9KQotICAgIGVuZGlmKCkKLSAgICBpZihMSUJTT0NLRVQpCi0gICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLTEgJHtMSUJTT0NLRVR9KQotICAgIGVuZGlmKCkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy0xICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0gcnQpCiBlbmRpZihXSU4zMikKIAogIyBBc3N1bWUgdGhhdCBMaW51eCBoYXMgLVdsLC0tdmVyc2lvbi1zY3JpcHQgYW5kIG90aGVyIHBsYXRmb3JtcyBkbyBub3QKQEAgLTMwMyw4ICsyOTIsNyBAQAogZW5kaWYoIiR7Q01BS0VfU1lTVEVNX05BTUV9IiBTVFJFUVVBTCAiTGludXgiKQogCiBpbnN0YWxsKFRBUkdFVFMgZGJ1cy0xICR7SU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHU30pCi1pbnN0YWxsKEZJTEVTICR7ZGJ1c2luY2x1ZGVfSEVBREVSU30gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVJ9L2RidXMtMS4wL2RidXMpCi1pbnN0YWxsKEZJTEVTICR7ZGJ1c2luY2x1ZGVfQVJDSF9IRUFERVJTfSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfS9kYnVzLTEuMC9pbmNsdWRlL2RidXMpCitpbnN0YWxsX2ZpbGVzKC9pbmNsdWRlL2RidXMgRklMRVMgJHtkYnVzaW5jbHVkZV9IRUFERVJTfSkKIAogIyMjIEludGVybmFsIGxpYnJhcnksIHVzZWQgZm9yIHRoZSBkYWVtb24sIHRvb2xzIGFuZCB0ZXN0cywgY29tcGlsZWQgc3RhdGljYWxseS4KIApAQCAtMzIwLDEzICszMDgsNyBAQAogICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy1pbnRlcm5hbCB3czJfMzIgYWR2YXBpMzIgbmV0YXBpMzIgaXBobHBhcGkpCiAgICAgZW5kaWYoV0lOQ0UpCiBlbHNlKFdJTjMyKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLWludGVybmFsICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0pCi0gICAgaWYoTElCUlQpCi0gICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLWludGVybmFsICR7TElCUlR9KQotICAgIGVuZGlmKCkKLSAgICBpZihMSUJTT0NLRVQpCi0gICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLWludGVybmFsICR7TElCU09DS0VUfSkKLSAgICBlbmRpZigpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtaW50ZXJuYWwgJHtDTUFLRV9USFJFQURfTElCU19JTklUfSBydCkKIGVuZGlmKFdJTjMyKQogCiBpZiAoREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMpCmRpZmYgLS1naXQgYS9jbWFrZS9tb2R1bGVzL0NQYWNrSW5zdGFsbENvbmZpZy5jbWFrZSBiL2NtYWtlL21vZHVsZXMvQ1BhY2tJbnN0YWxsQ29uZmlnLmNtYWtlCmluZGV4IDQ2ZThmYjYuLjc0YjY2ODkgMTAwNjQ0Ci0tLSBhL2NtYWtlL21vZHVsZXMvQ1BhY2tJbnN0YWxsQ29uZmlnLmNtYWtlCisrKyBiL2NtYWtlL21vZHVsZXMvQ1BhY2tJbnN0YWxsQ29uZmlnLmNtYWtlCkBAIC0xLDEwICsxLDEwIEBACiAKIGlmIChEQlVTX0lOU1RBTExfU1lTVEVNX0xJQlMpCiAJaWYgKE1JTkdXKQorCQlpbnN0YWxsX2ZpbGVzKC9iaW4gRklMRVMgJHtMSUJFWFBBVF9MSUJSQVJJRVN9KQogCWVsc2UgKE1JTkdXKQogCQlJTkNMVURFKEluc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcykKIAllbmRpZiAoTUlOR1cpCi0JaW5zdGFsbChGSUxFUyAke0xJQkVYUEFUX0xJQlJBUklFU30gREVTVElOQVRJT04gYmluKQogZW5kaWYgKERCVVNfSU5TVEFMTF9TWVNURU1fTElCUykKIAogU0VUKENQQUNLX1BBQ0tBR0VfREVTQ1JJUFRJT05fU1VNTUFSWSAiRC1CVVMgRm9yIFdpbmRvd3MiKQpkaWZmIC0tZ2l0IGEvY21ha2UvbW9kdWxlcy9DaGVja0ZvckFic3RyYWN0U29ja2V0cy5jIGIvY21ha2UvbW9kdWxlcy9DaGVja0ZvckFic3RyYWN0U29ja2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmI4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jbWFrZS9tb2R1bGVzL0NoZWNrRm9yQWJzdHJhY3RTb2NrZXRzLmMKQEAgLTAsMCArMSwzMyBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludCBtYWluKCkgeworICBpbnQgbGlzdGVuX2ZkOworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKworICBsaXN0ZW5fZmQgPSBzb2NrZXQgKFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKworICBpZiAobGlzdGVuX2ZkIDwgMCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzb2NrZXQoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBtZW1zZXQgKCZhZGRyLCAnXDAnLCBzaXplb2YgKGFkZHIpKTsKKyAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgc3RyY3B5IChhZGRyLnN1bl9wYXRoLCAiWC90bXAvZGJ1cy1mYWtlLXNvY2tldC1wYXRoLXVzZWQtaW4tY29uZmlndXJlLXRlc3QiKTsKKyAgYWRkci5zdW5fcGF0aFswXSA9ICdcMCc7IC8qIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBhYnN0cmFjdCAqLworCisgIGlmIChiaW5kIChsaXN0ZW5fZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmYWRkciwgU1VOX0xFTiAoJmFkZHIpKSA8IDApCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQWJzdHJhY3Qgc29ja2V0IG5hbWVzcGFjZSBiaW5kKCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgZWxzZQorICAgIGV4aXQgKDApOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NtYWtlL21vZHVsZXMvTWFjcm9zLmNtYWtlIGIvY21ha2UvbW9kdWxlcy9NYWNyb3MuY21ha2UKaW5kZXggNjNiMjE3MS4uOGQ2Y2YxMSAxMDA2NDQKLS0tIGEvY21ha2UvbW9kdWxlcy9NYWNyb3MuY21ha2UKKysrIGIvY21ha2UvbW9kdWxlcy9NYWNyb3MuY21ha2UKQEAgLTUsMzEgKzUsMzcgQEAKICAgICAgICAgICAgIFBBVEhTIC91c3IvYmluIC91c3IvbG9jYWwvYmluCiAgICAgICAgICAgICBOT19DTUFLRV9GSU5EX1JPT1RfUEFUSAogICAgICAgICApCi0gICAgICAgIGZpbmRfZmlsZShCSU5GTVRfV0lORV9TVVBQT1JUX0ZJTEUKKyAgICAgICAgZmluZF9maWxlKEhBVkVfQklORk1UX1dJTkVfU1VQUE9SVAogICAgICAgICAgICAgTkFNRVMgRE9TV2luIHdpbmUgV2luZSB3aW5kb3dzIFdpbmRvd3MKICAgICAgICAgICAgIFBBVEhTIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYwogICAgICAgICAgICAgTk9fU1lTVEVNX1BBVEggTk9fQ01BS0VfRklORF9ST09UX1BBVEgKICAgICAgICAgKQotICAgICAgICBpZihFWElTVFMgQklORk1UX1dJTkVfU1VQUE9SVF9GSUxFKQotICAgICAgICAgICAgZmlsZShSRUFEICR7QklORk1UX1dJTkVfU1VQUE9SVF9GSUxFfSBDT05URU5UKQotICAgICAgICAgICAgaWYoJHtDT05URU5UfSBNQVRDSEVTICJlbmFibGVkIikKLSAgICAgICAgICAgICAgICBzZXQoSEFWRV9CSU5GTVRfV0lORV9TVVBQT1JUIDEpCi0gICAgICAgICAgICBlbmRpZigpCi0gICAgICAgIGVuZGlmKCkKLSAgICAgICAgaWYoV0lORV9FWEVDVVRBQkxFKQorICAgICAgICBpZihXSU5FX0VYRUNVVEFCTEUgQU5EIEhBVkVfQklORk1UX1dJTkVfU1VQUE9SVCkKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEZPT1ROT1RFUyAiTk9URTogVGhlIHJlcXVpcmVtZW50cyB0byBydW4gY3Jvc3MgY29tcGlsZWQgYXBwbGljYXRpb25zIG9uIHlvdXIgaG9zdCBzeXN0ZW0gYXJlIGFjaGlldmVkLiBZb3UgbWF5IHJ1biAnbWFrZSBjaGVjaycuIikKICAgICAgICAgZW5kaWYoKQogICAgICAgICBpZihOT1QgV0lORV9FWEVDVVRBQkxFKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgRk9PVE5PVEVTICJOT1RFOiBZb3UgbWF5IGluc3RhbGwgdGhlIFdpbmRvd3MgZW11bGF0b3IgJ3dpbmUnIHRvIGJlIGFibGUgdG8gcnVuIGNyb3NzIGNvbXBpbGVkIHRlc3QgYXBwbGljYXRpb25zLiIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgICAgaWYoTk9UIEhBVkVfQklORk1UX1dJTkVfU1VQUE9SVCkKLSAgICAgICAgICAgIGxpc3QoQVBQRU5EIEZPT1ROT1RFUyAiTk9URTogWW91IG1heSBhY3RpdmF0ZSBiaW5mbXRfbWlzYyBzdXBwb3J0IGZvciB3aW5lIHRvIGJlIGFibGUgdG8gcnVuIGNyb3NzIGNvbXBpbGVkIHRlc3QgYXBwbGljYXRpb25zIGRpcmVjdGx5LiIpCisgICAgICAgICAgICBsaXN0KEFQUEVORCBGT09UTk9URVMgIk5PVEU6IFlvdSBtYXkgYWN0aXZhdGUgYmluZm10X21pc2Mgc3VwcG9ydCBmb3Igd2luZSB0byBiZSBhYmxlIHRvIHJ1biBjcm9zcyBjb21waWxlZCB0ZXN0IGFwcGxpY2F0aW9ucy4iKQogICAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpCiAgICAgICAgIGxpc3QoQVBQRU5EIEZPT1ROT1RFUyAiTk9URTogWW91IHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIGNyb3NzIGNvbXBpbGVkIGFwcGxpY2F0aW9ucyBvbiB5b3VyIGhvc3Qgc3lzdGVtLiIpCiAgICAgZW5kaWYoKQogZW5kaWYoKQogCitNQUNSTyhUSU1FU1RBTVAgUkVTVUxUKQorICAgIGlmIChDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJXaW5kb3dzIikKKyAgICAgICAgRVhFQ1VURV9QUk9DRVNTKENPTU1BTkQgImNtZCIgIiAvQyBkYXRlIC9UIiBPVVRQVVRfVkFSSUFCTEUgREFURSkKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiguLilbLy5dKC4uKVsvLl0oLi4uLikuKiIgIlxcM1xcMlxcMSIgREFURSAke0RBVEV9KQorICAgICAgICBFWEVDVVRFX1BST0NFU1MoQ09NTUFORCAiY21kIiAiIC9DIHRpbWUgL1QiIE9VVFBVVF9WQVJJQUJMRSBUSU1FKQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiKC4uKTooLi4pIiAiXFwxXFwyIiBUSU1FICR7VElNRX0pCisgICAgICAgIHNldCAoJHtSRVNVTFR9ICIke0RBVEV9JHtUSU1FfSIpCisgICAgZWxzZSAoKQorICAgICAgICBFWEVDVVRFX1BST0NFU1MoQ09NTUFORCAiZGF0ZSIgIislWSVtJWQlSCVNIiBPVVRQVVRfVkFSSUFCTEUgJHtSRVNVTFR9KQorICAgIGVuZGlmICgpCitFTkRNQUNSTygpCisKIG1hY3JvKGFkZF90ZXN0X2V4ZWN1dGFibGUgX3RhcmdldCBfc291cmNlKQogICAgIGFkZF9leGVjdXRhYmxlKCR7X3RhcmdldH0gJHtfc291cmNlfSkKICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtfdGFyZ2V0fSAke0FSR059KQpAQCAtMzcsMTEgKzQzLDcgQEAKICAgICAgICAgIyBydW4gdGVzdHMgd2l0aCBiaW5mbXRfbWlzYwogICAgICAgICBzZXQoUFJFRklYICJ6OiIpCiAgICAgICAgIHNldChfZW52ICJEQlVTX1RFU1RfREFFTU9OPSR7UFJFRklYfSR7Q01BS0VfQklOQVJZX0RJUn0vYmluL2RidXMtZGFlbW9uJHtFWEVFWFR9IikKLSAgICAgICAgaWYoSEFWRV9CSU5GTVRfV0lORV9TVVBQT1JUKQotICAgICAgICAgICAgYWRkX3Rlc3QoTkFNRSAke190YXJnZXR9IENPTU1BTkQgJDxUQVJHRVRfRklMRToke190YXJnZXR9PiAtLXRhcCkKLSAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICBhZGRfdGVzdChOQU1FICR7X3RhcmdldH0gQ09NTUFORCAke1dJTkVfRVhFQ1VUQUJMRX0gJHtQUkVGSVh9JDxUQVJHRVRfRklMRToke190YXJnZXR9PiAtLXRhcCkKLSAgICAgICAgZW5kaWYoKQorICAgICAgICBhZGRfdGVzdChOQU1FICR7X3RhcmdldH0gQ09NTUFORCAkPFRBUkdFVF9GSUxFOiR7X3RhcmdldH0+IC0tdGFwKQogICAgIGVsc2UoKQogICAgICAgICBzZXQoUFJFRklYKQogICAgICAgICBzZXQoX2VudiAiREJVU19URVNUX0RBRU1PTj0ke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi9kYnVzLWRhZW1vbiR7RVhFRVhUfSIpCkBAIC01MCwxMCArNTIsNyBAQAogICAgIGxpc3QoQVBQRU5EIF9lbnYgIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz0iKQogICAgIGxpc3QoQVBQRU5EIF9lbnYgIkRCVVNfRkFUQUxfV0FSTklOR1M9MSIpCiAgICAgbGlzdChBUFBFTkQgX2VudiAiREJVU19URVNUX0RBVEE9JHtQUkVGSVh9JHtDTUFLRV9CSU5BUllfRElSfS90ZXN0L2RhdGEiKQotICAgIGxpc3QoQVBQRU5EIF9lbnYgIkRCVVNfVEVTVF9EQlVTX0xBVU5DSD0ke1BSRUZJWH0ke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi9kYnVzLWxhdW5jaCR7RVhFRVhUfSIpCi0gICAgbGlzdChBUFBFTkQgX2VudiAiREJVU19URVNUX0VYRUM9JHtQUkVGSVh9JHtEQlVTX1RFU1RfRVhFQ30iKQogICAgIGxpc3QoQVBQRU5EIF9lbnYgIkRCVVNfVEVTVF9IT01FRElSPSR7UFJFRklYfSR7Q01BS0VfQklOQVJZX0RJUn0vZGJ1cyIpCi0gICAgbGlzdChBUFBFTkQgX2VudiAiREJVU19URVNUX1VOSU5TVEFMTEVEPTEiKQogICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKCR7X3RhcmdldH0gUFJPUEVSVElFUyBFTlZJUk9OTUVOVCAiJHtfZW52fSIpCiBlbmRtYWNybyhhZGRfdGVzdF9leGVjdXRhYmxlKQogCkBAIC02MSw1NyArNjAsMyBAQAogICAgIGFkZF9leGVjdXRhYmxlKCR7X3RhcmdldH0gJHtfc291cmNlfSkKICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtfdGFyZ2V0fSAke0FSR059KQogZW5kbWFjcm8oYWRkX2hlbHBlcl9leGVjdXRhYmxlKQotCi0KLSMKLSMgZ2VuZXJhdGUgY29tcGlsZXIgZmxhZ3MgZnJvbSBNU1ZDIHdhcm5pbmcgaWRlbnRpZmllcnMgKGUuZy4gJzQxMTQnKSBvciBnY2Mgd2FybmluZyBrZXlzIChlLmcuICdwb2ludGVyLXNpZ24nKQotIwotIyBAcGFyYW0gdGFyZ2V0IHRoZSB2YXJpYWJsZSBuYW1lIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgd2FybmluZ3MgZmxhZ3MKLSMgQHBhcmFtIHdhcm5pbmdzIGEgc3RyaW5nIHdpdGggc3BhY2UgZGVsaW1pdGVkIHdhcm5pbmdzCi0jIEBwYXJhbSBkaXNhYmxlZF93YXJuaW5ncyBhIHN0cmluZyB3aXRoIHNwYWNlIGRlbGltaXRlZCBkaXNhYmxlZCB3YXJuaW5ncwotIyBAcGFyYW0gZXJyb3Jfd2FybmluZ3MgYSBzdHJpbmcgd2l0aCBzcGFjZSBkZWxpbWl0ZWQgd2FybmluZ3Mgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbnRvIGNvbXBpbGUgZXJyb3JzCi0jCi1tYWNybyhnZW5lcmF0ZV93YXJuaW5nX2NmbGFncyB0YXJnZXQgd2FybmluZ3MgZGlzYWJsZWRfd2FybmluZ3MgZXJyb3Jfd2FybmluZ3MpCi0gICAgaWYoREVCVUdfTUFDUk9TKQotICAgICAgICBtZXNzYWdlKCJnZW5lcmF0ZV93YXJuaW5nX2NmbGFncyBnb3Q6ICR7d2FybmluZ3N9IC0gJHtkaXNhYmxlZF93YXJuaW5nc30gLSAke2Vycm9yX3dhcm5pbmdzfSIpCi0gICAgZW5kaWYoKQotICAgIGlmKE1TVkMpCi0gICAgICAgICMgbGV2ZWwgMSBpcyBkZWZhdWx0Ci0gICAgICAgIHNldChlbmFibGVkX3ByZWZpeCAiL3cxIikKLSAgICAgICAgc2V0KGVycm9yX3ByZWZpeCAiL3dlIikKLSAgICAgICAgc2V0KGRpc2FibGVkX3ByZWZpeCAiL3dkIikKLSAgICBlbHNlKCkKLSAgICAgICAgc2V0KGVuYWJsZWRfcHJlZml4ICItVyIpCi0gICAgICAgIHNldChlcnJvcl9wcmVmaXggIi1XZXJyb3I9IikKLSAgICAgICAgc2V0KGRpc2FibGVkX3ByZWZpeCAiLVduby0iKQotICAgIGVuZGlmKCkKLQotICAgIHNldCh0ZW1wKQotICAgIHN0cmluZyhSRVBMQUNFICIgIiAiOyIgd2FybmluZ3NfbGlzdCAiJHt3YXJuaW5nc30iKQotICAgIGZvcmVhY2god2FybmluZyAke3dhcm5pbmdzX2xpc3R9KQotICAgICAgICBzdHJpbmcoU1RSSVAgJHt3YXJuaW5nfSBfd2FybmluZykKLSAgICAgICAgaWYoX3dhcm5pbmcpCi0gICAgICAgICAgICBzZXQodGVtcCAiJHt0ZW1wfSAke2VuYWJsZWRfcHJlZml4fSR7X3dhcm5pbmd9IikKLSAgICAgICAgZW5kaWYoKQotICAgIGVuZGZvcmVhY2goKQotCi0gICAgc3RyaW5nKFJFUExBQ0UgIiAiICI7IiBkaXNhYmxlZF93YXJuaW5nc19saXN0ICIke2Rpc2FibGVkX3dhcm5pbmdzfSIpCi0gICAgZm9yZWFjaCh3YXJuaW5nICR7ZGlzYWJsZWRfd2FybmluZ3NfbGlzdH0pCi0gICAgICAgIHN0cmluZyhTVFJJUCAke3dhcm5pbmd9IF93YXJuaW5nKQotICAgICAgICBpZihfd2FybmluZykKLSAgICAgICAgICAgIHNldCh0ZW1wICIke3RlbXB9ICR7ZGlzYWJsZWRfcHJlZml4fSR7X3dhcm5pbmd9IikKLSAgICAgICAgZW5kaWYoKQotICAgIGVuZGZvcmVhY2goKQotCi0gICAgc3RyaW5nKFJFUExBQ0UgIiAiICI7IiBlcnJvcl93YXJuaW5nc19saXN0ICIke2Vycm9yX3dhcm5pbmdzfSIpCi0gICAgZm9yZWFjaCh3YXJuaW5nICR7ZXJyb3Jfd2FybmluZ3NfbGlzdH0pCi0gICAgICAgIHN0cmluZyhTVFJJUCAke3dhcm5pbmd9IF93YXJuaW5nKQotICAgICAgICBpZihfd2FybmluZykKLSAgICAgICAgICAgIHNldCh0ZW1wICIke3RlbXB9ICR7ZXJyb3JfcHJlZml4fSR7X3dhcm5pbmd9IikKLSAgICAgICAgZW5kaWYoKQotICAgIGVuZGZvcmVhY2goKQotICAgIHNldCgke3RhcmdldH0gIiR7dGVtcH0iKQotICAgIGlmKERFQlVHX01BQ1JPUykKLSAgICAgICAgbWVzc2FnZSgiZ2VuZXJhdGVfd2FybmluZ19jZmxhZ3MgcmV0dXJuOiAkeyR7dGFyZ2V0fX0iKQotICAgIGVuZGlmKCkKLWVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL2NtYWtlL21vZHVsZXMvTWFjcm9zQXV0b3Rvb2xzLmNtYWtlIGIvY21ha2UvbW9kdWxlcy9NYWNyb3NBdXRvdG9vbHMuY21ha2UKaW5kZXggODg4ZDVlNy4uOGJiODNjZCAxMDA2NDQKLS0tIGEvY21ha2UvbW9kdWxlcy9NYWNyb3NBdXRvdG9vbHMuY21ha2UKKysrIGIvY21ha2UvbW9kdWxlcy9NYWNyb3NBdXRvdG9vbHMuY21ha2UKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIGZvcmVhY2gobGluZSAke19jb25maWd1cmVfYWN9KQogICAgICAgICBpZihsaW5lIE1BVENIRVMgIi4qQUNfREVGSU5FKC4qJHtuYW1lfS4qKS4qIikKICAgICAgICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiLipBQ19ERUZJTkUoLiopLioiICJcXDEiIHZhbHVlICR7bGluZX0pCi0gICAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIlteW10qXFxbW15dXSpcXF0sICpcXFsoW15dXSopXFxdLC4qIiAiXFwxIiB2YWx1ZTIgJHt2YWx1ZX0pCisgICAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIi4qLCguKiksLioiICJcXDEiIHZhbHVlMiAke3ZhbHVlfSkKICAgICAgICAgICAgIHN0cmluZyAoUkVQTEFDRSAiWyIgIiIgdmFsdWUzICR7dmFsdWUyfSkKICAgICAgICAgICAgIHN0cmluZyAoUkVQTEFDRSAiXSIgIiIgdmFsdWU0ICR7dmFsdWUzfSkKICAgICAgICAgICAgIHNldCgke25hbWV9ICR7dmFsdWU0fSkKZGlmZiAtLWdpdCBhL2NtYWtlL3Rlc3QvQ01ha2VMaXN0cy50eHQgYi9jbWFrZS90ZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDE5ZTZlYjAuLmU3OGFmN2EgMTAwNjQ0Ci0tLSBhL2NtYWtlL3Rlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvY21ha2UvdGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtNzMsNyArNzMsNiBAQAogYWRkX2hlbHBlcl9leGVjdXRhYmxlKHRlc3Qtc2VnZmF1bHQgJHt0ZXN0LXNlZ2ZhdWx0X1NPVVJDRVN9ICR7REJVU19JTlRFUk5BTF9MSUJSQVJJRVN9KQogYWRkX2hlbHBlcl9leGVjdXRhYmxlKHRlc3Qtc2xlZXAtZm9yZXZlciAke3Rlc3Qtc2xlZXAtZm9yZXZlcl9TT1VSQ0VTfSAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSkKIGFkZF9oZWxwZXJfZXhlY3V0YWJsZShtYW51YWwtdGNwICR7bWFudWFsLXRjcF9TT1VSQ0VTfSAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSkKLWFkZF9oZWxwZXJfZXhlY3V0YWJsZShtYW51YWwtYmFja3RyYWNlICR7Q01BS0VfU09VUkNFX0RJUn0vLi4vdGVzdC9tYW51YWwtYmFja3RyYWNlLmMgZGJ1cy0xKQogaWYoV0lOMzIpCiAgICAgYWRkX2hlbHBlcl9leGVjdXRhYmxlKG1hbnVhbC1wYXRocyAke21hbnVhbC1wYXRoc19TT1VSQ0VTfSAke0RCVVNfSU5URVJOQUxfTElCUkFSSUVTfSkKIGVuZGlmKCkKQEAgLTEwNywxMiArMTA2LDkgQEAKICAgICBhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3QtbW9uaXRvciAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvbW9uaXRvci5jICR7VEVTVF9MSUJSQVJJRVN9KQogICAgIGFkZF90ZXN0X2V4ZWN1dGFibGUodGVzdC1yZWZzICR7Q01BS0VfU09VUkNFX0RJUn0vLi4vdGVzdC9pbnRlcm5hbHMvcmVmcy5jICR7VEVTVF9MSUJSQVJJRVN9KQogICAgIGFkZF90ZXN0X2V4ZWN1dGFibGUodGVzdC1yZWxheSAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvcmVsYXkuYyAke1RFU1RfTElCUkFSSUVTfSkKLSAgICBhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3Qtc2VydmVyLW9vbSAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvaW50ZXJuYWxzL3NlcnZlci1vb20uYyAke1RFU1RfTElCUkFSSUVTfSkKICAgICBhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3Qtc3ludGF4ICR7Q01BS0VfU09VUkNFX0RJUn0vLi4vdGVzdC9zeW50YXguYyAke1RFU1RfTElCUkFSSUVTfSkKICAgICBhZGRfdGVzdF9leGVjdXRhYmxlKHRlc3Qtc3lzbG9nICR7Q01BS0VfU09VUkNFX0RJUn0vLi4vdGVzdC9pbnRlcm5hbHMvc3lzbG9nLmMgJHtURVNUX0xJQlJBUklFU30pCi0gICAgYWRkX3Rlc3RfZXhlY3V0YWJsZSh0ZXN0LXVpZC1wZXJtaXNzaW9ucyAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvdWlkLXBlcm1pc3Npb25zLmMgJHtURVNUX0xJQlJBUklFU30pCiAgICAgYWRkX2hlbHBlcl9leGVjdXRhYmxlKG1hbnVhbC1hdXRoeiAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvbWFudWFsLWF1dGh6LmMgJHtURVNUX0xJQlJBUklFU30pCi0gICAgYWRkX2hlbHBlcl9leGVjdXRhYmxlKG1hbnVhbC10ZXN0LXRocmVhZC1ibG9ja2luZyAke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL3Rlc3QvdGhyZWFkLWJsb2NraW5nLmMgJHtURVNUX0xJQlJBUklFU30pCiBlbmRpZigpCiAKICMjIyBrZWVwIHRoZXNlIGluIGNyZWF0aW9uIG9yZGVyLCBpLmUuIHVwcGVybW9zdCBkaXJzIGZpcnN0IApAQCAtMTI5LDYgKzEyNSw3IEBACiAgICAgdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9zZXNzaW9uLmQKICAgICB0ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzLXN5c3RlbQogICAgIHRlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMtc3lzdGVtL3N5c3RlbS5kCisgICAgdGVzdC9kYXRhL3ZhbGlkLWludHJvc3BlY3Rpb24tZmlsZXMKICAgICB0ZXN0L2RhdGEvdmFsaWQtbWVzc2FnZXMKICAgICB0ZXN0L2RhdGEvdmFsaWQtc2VydmljZS1maWxlcwogICAgIHRlc3QvZGF0YS92YWxpZC1zZXJ2aWNlLWZpbGVzLXN5c3RlbQpkaWZmIC0tZ2l0IGEvY21ha2UvdG9vbHMvQ01ha2VMaXN0cy50eHQgYi9jbWFrZS90b29scy9DTWFrZUxpc3RzLnR4dAppbmRleCA0Njc4YmRkLi42YTJlOTk5IDEwMDY0NAotLS0gYS9jbWFrZS90b29scy9DTWFrZUxpc3RzLnR4dAorKysgYi9jbWFrZS90b29scy9DTWFrZUxpc3RzLnR4dApAQCAtNDgsNyArNDgsNiBAQAogICAgICAke2RidXNfbGF1bmNoX1NPVVJDRVN9CiAgICAgIC4uLy4uL3Rvb2xzL2RidXMtbGF1bmNoLXgxMS5jCiApCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7WDExX0lOQ0xVREVfRElSfSkKIGVuZGlmKERCVVNfQlVJTERfWDExKQogCiBzZXQgKGRidXNfY2xlYW51cF9zb2NrZXRzX1NPVVJDRVMKQEAgLTU3LDM1ICs1NiwyNiBAQAogCiBhZGRfZXhlY3V0YWJsZShkYnVzLXNlbmQgJHtkYnVzX3NlbmRfU09VUkNFU30pCiB0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy1zZW5kICR7REJVU19MSUJSQVJJRVN9KQotaW5zdGFsbChUQVJHRVRTIGRidXMtc2VuZCAke0lOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1N9KQoraW5zdGFsbF90YXJnZXRzKC9iaW4gZGJ1cy1zZW5kICkKIAogYWRkX2V4ZWN1dGFibGUoZGJ1cy10ZXN0LXRvb2wgJHtkYnVzX3Rlc3RfdG9vbF9TT1VSQ0VTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLXRlc3QtdG9vbCAke0RCVVNfTElCUkFSSUVTfSkKLWluc3RhbGwoVEFSR0VUUyBkYnVzLXRlc3QtdG9vbCAke0lOU1RBTExfVEFSR0VUU19ERUZBVUxUX0FSR1N9KQoraW5zdGFsbF90YXJnZXRzKC9iaW4gZGJ1cy10ZXN0LXRvb2wgKQogCi1pZihXSU4zMiBBTkQgTk9UIE1TVkMpCi0gICAgIyBhdm9pZCBkYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50IHRyaWdnZXJpbmcgVUFDCi0gICAgIyAxIGlzIHRoZSByZXNvdXJjZSBJRCwgSURfTUFOSUZFU1QKLSAgICAjIDI0IGlzIHRoZSByZXNvdXJjZSB0eXBlLCBSVF9NQU5JRkVTVAotICAgICMgY29uc3RhbnRzIGFyZSB1c2VkIGJlY2F1c2Ugb2YgYSBidWcgaW4gd2luZHJlcwotICAgICMgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMzMDAwMTU4L2VtYmVkLW1hbmlmZXN0LWZpbGUtdG8tcmVxdWlyZS1hZG1pbmlzdHJhdG9yLWV4ZWN1dGlvbi1sZXZlbC13aXRoLW1pbmd3MzIKLSAgICBmaWxlKFdSSVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9kaXNhYmxlLXVhYy5yYyAiMSAyNCBcIiR7Q01BS0VfU09VUkNFX0RJUn0vLi4vdG9vbHMvV2luMzIuTWFuaWZlc3RcIlxuIikKLSAgICBsaXN0KEFQUEVORCBkYnVzX3VwZGF0ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50X1NPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2Rpc2FibGUtdWFjLnJjKQotZW5kaWYoKQogYWRkX2V4ZWN1dGFibGUoZGJ1cy11cGRhdGUtYWN0aXZhdGlvbi1lbnZpcm9ubWVudCAke2RidXNfdXBkYXRlX2FjdGl2YXRpb25fZW52aXJvbm1lbnRfU09VUkNFU30pCiB0YXJnZXRfbGlua19saWJyYXJpZXMoZGJ1cy11cGRhdGUtYWN0aXZhdGlvbi1lbnZpcm9ubWVudCAke0RCVVNfTElCUkFSSUVTfSkKLWluc3RhbGwoVEFSR0VUUyBkYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50ICR7SU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHU30pCitpbnN0YWxsX3RhcmdldHMoL2JpbiBkYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50ICkKIAogYWRkX2V4ZWN1dGFibGUoZGJ1cy1sYXVuY2ggJHtkYnVzX2xhdW5jaF9TT1VSQ0VTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLWxhdW5jaCAke0RCVVNfTElCUkFSSUVTfSkKIGlmIChEQlVTX0JVSUxEX1gxMSkKICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRidXMtbGF1bmNoICR7WDExX0xJQlJBUklFU30gKQogZW5kaWYgKERCVVNfQlVJTERfWDExKQotaW5zdGFsbChUQVJHRVRTIGRidXMtbGF1bmNoICR7SU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHU30pCitpbnN0YWxsX3RhcmdldHMoL2JpbiBkYnVzLWxhdW5jaCApCiAKIGFkZF9leGVjdXRhYmxlKGRidXMtbW9uaXRvciAke2RidXNfbW9uaXRvcl9TT1VSQ0VTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhkYnVzLW1vbml0b3IgJHtEQlVTX0xJQlJBUklFU30pCi1pbnN0YWxsKFRBUkdFVFMgZGJ1cy1tb25pdG9yICR7SU5TVEFMTF9UQVJHRVRTX0RFRkFVTFRfQVJHU30pCitpbnN0YWxsX3RhcmdldHMoL2JpbiBkYnVzLW1vbml0b3IgKQogCiAjIGNyZWF0ZSB0aGUgL3Zhci9saWIvZGJ1cyBkaXJlY3RvcnkgZm9yIGRidXMtdXVpZGdlbgogaW5zdGFsbChESVJFQ1RPUlkgREVTVElOQVRJT04gdmFyL2xpYi9kYnVzKQpkaWZmIC0tZ2l0IGEvY21ha2UveDg2XzY0LXc2NC1taW5ndzMyLmNtYWtlIGIvY21ha2UveDg2XzY0LXc2NC1taW5ndzMyLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjliZmRkLi4wMDAwMDAwCi0tLSBhL2NtYWtlL3g4Nl82NC13NjQtbWluZ3czMi5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgVG9vbGNoYWluIGZvciBtaW5ndy13NjQgNjQtYml0IGNvbXBpbGVycywgYXMgc2hpcHBlZCBpbiBEZWJpYW4vVWJ1bnR1LgotCi1zZXQoR05VX0hPU1QgeDg2XzY0LXc2NC1taW5ndzMyKQotc2V0KENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgIng4Nl82NCIpCi0KLXNldChDT01QSUxFUl9QUkVGSVggIiR7R05VX0hPU1R9LSIpCi0KLXNldChDTUFLRV9TWVNURU1fTkFNRSAiV2luZG93cyIpCi1zZXQoQ01BS0VfQ1JPU1NDT01QSUxJTkcgVFJVRSkKLXNldChXSU4zMiBUUlVFKQotc2V0KE1JTkdXIFRSVUUpCi0KLXNldChDTUFLRV9DX0NPTVBJTEVSICR7Q09NUElMRVJfUFJFRklYfWdjYykKLXNldChDTUFLRV9DWFhfQ09NUElMRVIgJHtDT01QSUxFUl9QUkVGSVh9ZysrKQotc2V0KENNQUtFX1JDX0NPTVBJTEVSICR7Q09NUElMRVJfUFJFRklYfXdpbmRyZXMpCi0KLXNldChDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIpCi1zZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkpCi1zZXQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggM2JiOWNjZS4uYjc1YTEwNiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMiwxNyArMiwxMyBAQAogQUNfUFJFUkVRKFsyLjYzXSkKIAogbTRfZGVmaW5lKFtkYnVzX21ham9yX3ZlcnNpb25dLCBbMV0pCi1tNF9kZWZpbmUoW2RidXNfbWlub3JfdmVyc2lvbl0sIFsxMl0pCi1tNF9kZWZpbmUoW2RidXNfbWljcm9fdmVyc2lvbl0sIFsyMF0pCittNF9kZWZpbmUoW2RidXNfbWlub3JfdmVyc2lvbl0sIFsxMF0pCittNF9kZWZpbmUoW2RidXNfbWljcm9fdmVyc2lvbl0sIFsxMl0pCiBtNF9kZWZpbmUoW2RidXNfdmVyc2lvbl0sCiAgICAgICAgICAgW2RidXNfbWFqb3JfdmVyc2lvbi5kYnVzX21pbm9yX3ZlcnNpb24uZGJ1c19taWNyb192ZXJzaW9uXSkKIEFDX0lOSVQoW2RidXNdLFtkYnVzX3ZlcnNpb25dLFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1kYnVzXSxbZGJ1c10pCi0KIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQogCi1tNF9wYXR0ZXJuX2ZvcmJpZChbXkFYXyhDSEVDS19FTkFCTEVfREVCVUd8Q09ERV9DT1ZFUkFHRXxDT01QSUxFUl9GTEFHU3xDT01QSUxFUl9GTEFHU18oQ0ZMQUdTfENYWEZMQUdTfExERkxBR1MpKVxiXSwKLSAgW1VuZXhwYW5kZWQgQVhfIG1hY3JvIGZvdW5kLiBQbGVhc2UgaW5zdGFsbCBHTlUgYXV0b2NvbmYtYXJjaGl2ZV0pCi0KIEFDX0NBTk9OSUNBTF9IT1NUCiAKIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCkBAIC0zOCwxNiArMzQsMTYgQEAKICMKIAogIyMgaW5jcmVtZW50IGlmIHRoZSBpbnRlcmZhY2UgaGFzIGFkZGl0aW9ucywgY2hhbmdlcywgcmVtb3ZhbHMuCi1MVF9DVVJSRU5UPTIyCitMVF9DVVJSRU5UPTE3CiAKICMjIGluY3JlbWVudCBhbnkgdGltZSB0aGUgc291cmNlIGNoYW5nZXM7IHNldCB0bwogIyMgIDAgaWYgeW91IGluY3JlbWVudCBDVVJSRU5UCi1MVF9SRVZJU0lPTj0xMworTFRfUkVWSVNJT049OAogCiAjIyBpbmNyZW1lbnQgaWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkOyBzZXQgdG8gMAogIyMgaWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIGNoYW5nZWQgb3IgcmVtb3ZlZC4gcmVtb3ZhbCBoYXMKICMjIHByZWNlZGVuY2Ugb3ZlciBhZGRpbmcsIHNvIHNldCB0byAwIGlmIGJvdGggaGFwcGVuZWQuCi1MVF9BR0U9MTkKK0xUX0FHRT0xNAogCiBBQ19TVUJTVChMVF9DVVJSRU5UKQogQUNfU1VCU1QoTFRfUkVWSVNJT04pCkBAIC02NSwzNSArNjEsNiBAQAogQUNfU1VCU1QoREJVU19NSUNST19WRVJTSU9OKQogQUNfU1VCU1QoREJVU19WRVJTSU9OKQogCi1kbmwKLWRubCBCdWlsZCBjb25maWd1cmF0aW9uCi1kbmwKLQotZG5sIFRoaXMgbXVzdCBjb21lIGZpcnN0OiBvdGhlciBvcHRpb25zIHVzZSB0aGlzIHRvIHNldCB0aGVpciBkZWZhdWx0cy4gRG9uJ3QKLWRubCBlbmFibGUgZGV2ZWxvcGVyIG1vZGUgb24gcHJvZHVjdGlvbiBidWlsZHMuCi1BQ19BUkdfRU5BQkxFKFtkZXZlbG9wZXJdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRldmVsb3Blcl0sCi0gICAgW3NldCBkZWZhdWx0cyB0byBiZSBhcHByb3ByaWF0ZSBmb3IgYSBELUJ1cyBkZXZlbG9wZXIgaW5zdGVhZCBvZiBhIGRpc3RyaWJ1dGlvbi9lbmQtdXNlcl0pXSwKLSAgW2VuYWJsZV9kZXZlbG9wZXI9JGVuYWJsZXZhbF0sCi0gIFtlbmFibGVfZGV2ZWxvcGVyPW5vXSkKLQotZG5sICdkaXNhYmxlX2RldmVsb3BlcicgaXMgdGhlIG5lZ2F0aW9uIG9mICdlbmFibGVfZGV2ZWxvcGVyJy4gSWYKLWRubCAnZW5hYmxlLWRldmVsb3BlcicgaXMgc2V0IHRvICdubycgKHRoZSBkZWZhdWx0KSwgdGhlIHZhbHVlIG9mCi1kbmwgJ2Rpc2FibGVfZGV2ZWxvcGVyJyBpcyBzZXQgdG8gJ3llcycsIGFuZCB2aWNlIHZlcnNhLiBJdCdzIHVzZWQKLWRubCBmb3IgbWFjcm9zIHRoYXQgcmVxdWlyZSB0aGUgb3Bwb3NpdGUgb2YgJ2VuYWJsZV9kZXZlbG9wZXInLCBzdWNoCi1kbmwgYXMgc2V2ZXJhbCBBWF8gbWFjcm9zLgotZG5sIFNlZSBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1NwotQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2RldmVsb3BlciIgPSAieHllcyJdLFsKLSAgICBkaXNhYmxlX2RldmVsb3Blcj1ubwotICBdLFsKLSAgICBkaXNhYmxlX2RldmVsb3Blcj15ZXMKLSAgXSkKLQotIyBUaGUgZGVidWdnaW5nIGNoZWNrIG11c3QgcnVuIGJlZm9yZSB0aGUgY29tcGlsZXIgdGVzdHMuIE90aGVyIGNvbW1hbmQtbGluZQotIyBvcHRpb25zIGFsc28gdXNlIGl0IHRvIHNldCB0aGVpciBkZWZhdWx0cy4gV2UgZGlzYWJsZSBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCwKLSMgZXhjZXB0IGZvciBkZXZlbG9wZXIgYnVpbGRzLgotQVhfQ0hFQ0tfRU5BQkxFX0RFQlVHKFskZW5hYmxlX2RldmVsb3Blcl0pCi0KIEFDX1BST0dfQ0MKIEFNX1BST0dfQ0NfQ19PCiBBQ19QUk9HX0NYWApAQCAtMTA0LDYgKzcxLDggQEAKIEFDX0NfSU5MSU5FCiBBTV9QUk9HX0xJQlRPT0wKIEFDX1BST0dfTUtESVJfUAorQ09NUElMRVJfQ09WRVJBR0UKK0NPTVBJTEVSX09QVElNSVNBVElPTlMKIFBLR19QUk9HX1BLR19DT05GSUcKIAogIyBUQVAgdGVzdCBkcml2ZXIgc3VwcG9ydApAQCAtMTUxLDggKzEyMCwxMCBAQAogICAgICMgQXNzdW1lIERCVVNfVkVSU0lPTiBpcyBhbHdheXMgdGhyZWUgbnVtYmVycwogICAgIEJVSUxEX0ZJTEVWRVJTSU9OPWBlY2hvICIkREJVU19WRVJTSU9OIiB8IHNlZCAtZSAncy9cLi8sL2cnYCwwCiAgICAgQUNfU1VCU1QoQlVJTERfRklMRVZFUlNJT04pCi0gICAgQVNfSUYoW3Rlc3QgLXogIiRSQyJdLAotICAgICAgICBbQUNfTVNHX0VSUk9SKFtBbiBpbXBsZW1lbnRhdGlvbiBvZiB3aW5kcmVzIGlzIHJlcXVpcmVkXSldKQorICAgIEFDX0NIRUNLX1RPT0woV0lORFJFUywgd2luZHJlcywgbm8pCisgICAgaWYgdGVzdCAiJFdJTkRSRVMiID0gbm87IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbKioqIENvdWxkIG5vdCBmaW5kIGFuIGltcGxlbWVudGF0aW9uIG9mIHdpbmRyZXMgaW4geW91ciBQQVRILl0pCisgICAgZmkKICAgICBpZiB0ZXN0ICIkZGJ1c193aW5jZSIgPSB5ZXM7IHRoZW4KICAgICAgIEFDX0RFRklORShEQlVTX1dJTkNFLDEsW0RlZmluZWQgaWYgd2UgcnVuIG9uIGEgVzMyIENFIEFQSSBiYXNlZCBzeXN0ZW1dKQogICAgICAgQUNfREVGSU5FKF9XSU4zMl9XQ0UsIDB4MDUwMiwgW0RlZmluZWQgdG8gZ2V0IG5ld2VyIFczMiBDRSBBUElzXSkKQEAgLTE3Niw2ICsxNDcsMTMgQEAKIEFNX0NPTkRJVElPTkFMKERCVVNfVU5JWCwgdGVzdCAiJGRidXNfdW5peCIgPSB5ZXMpCiBBTV9DT05ESVRJT05BTChEQlVTX0NZR1dJTiwgdGVzdCAiJGRidXNfY3lnd2luIiA9IHllcykKIAorIyB0aGlzIG11c3QgY29tZSBmaXJzdDogb3RoZXIgb3B0aW9ucyB1c2UgdGhpcyB0byBzZXQgdGhlaXIgZGVmYXVsdHMKK0FDX0FSR19FTkFCTEUoW2RldmVsb3Blcl0sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZGV2ZWxvcGVyXSwKKyAgICBbc2V0IGRlZmF1bHRzIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBhIEQtQnVzIGRldmVsb3BlciBpbnN0ZWFkIG9mIGEgZGlzdHJpYnV0aW9uL2VuZC11c2VyXSldLAorICBbXSwKKyAgW2VuYWJsZV9kZXZlbG9wZXI9bm9dKQorCiBEQlVTX1NUQVRJQ19CVUlMRF9DUFBGTEFHUz0KIGlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgPSB4bm87IHRoZW4KICAgICAjIE9uIFdpbmRvd3MsIGxpbmtpbmcgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkgcmVxdWlyZXMgc3BlY2lhbCBlZmZvcnQKQEAgLTE5Niw2ICsxNzQsNyBAQAogICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZHVja3R5cGUtZG9jc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidWlsZCBEdWNrdHlwZSBkb2N1bWVudGF0aW9uIChyZXF1aXJlcyBEdWNrdHlwZSldKSwKICAgICAgICAgICAgICAgW2VuYWJsZV9kdWNrdHlwZV9kb2NzPSRlbmFibGV2YWxdLCBbZW5hYmxlX2R1Y2t0eXBlX2RvY3M9YXV0b10pCitBQ19BUkdfRU5BQkxFKGFic3RyYWN0LXNvY2tldHMsIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hYnN0cmFjdC1zb2NrZXRzXSxbdXNlIGFic3RyYWN0IHNvY2tldCBuYW1lc3BhY2UgKGxpbnV4IG9ubHkpXSksZW5hYmxlX2Fic3RyYWN0X3NvY2tldHM9JGVuYWJsZXZhbCxlbmFibGVfYWJzdHJhY3Rfc29ja2V0cz1hdXRvKQogQUNfQVJHX0VOQUJMRShzZWxpbnV4LCBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2VsaW51eF0sW2J1aWxkIHdpdGggU0VMaW51eCBzdXBwb3J0XSksZW5hYmxlX3NlbGludXg9JGVuYWJsZXZhbCxlbmFibGVfc2VsaW51eD1hdXRvKQogQUNfQVJHX0VOQUJMRShbYXBwYXJtb3JdLAogICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFwcGFybW9yXSwgW2J1aWxkIHdpdGggQXBwQXJtb3Igc3VwcG9ydF0pXSwKQEAgLTIwOCw2ICsxODcsNyBAQAogQUNfQVJHX0VOQUJMRShsYXVuY2hkLCBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbGF1bmNoZF0sW2J1aWxkIHdpdGggbGF1bmNoZCBhdXRvLWxhdW5jaCBzdXBwb3J0XSksZW5hYmxlX2xhdW5jaGQ9JGVuYWJsZXZhbCxlbmFibGVfbGF1bmNoZD1hdXRvKQogQUNfQVJHX0VOQUJMRShzeXN0ZW1kLCBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3lzdGVtZF0sW2J1aWxkIHdpdGggc3lzdGVtZCBhdF9jb25zb2xlIHN1cHBvcnRdKSxlbmFibGVfc3lzdGVtZD0kZW5hYmxldmFsLGVuYWJsZV9zeXN0ZW1kPWF1dG8pCiAKK0FDX0FSR19XSVRIKGluaXQtc2NyaXB0cywgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1pbml0LXNjcmlwdHM9W3JlZGhhdF1dLFtTdHlsZSBvZiBpbml0IHNjcmlwdHMgdG8gaW5zdGFsbF0pKQogQUNfQVJHX1dJVEgoc2Vzc2lvbi1zb2NrZXQtZGlyLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXNlc3Npb24tc29ja2V0LWRpcj1bZGlybmFtZV1dLFtXaGVyZSB0byBwdXQgc29ja2V0cyBmb3IgdGhlIHBlci1sb2dpbi1zZXNzaW9uIG1lc3NhZ2UgYnVzXSkpCiBBQ19BUkdfV0lUSCh0ZXN0LXNvY2tldC1kaXIsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtdGVzdC1zb2NrZXQtZGlyPVtkaXJuYW1lXV0sW1doZXJlIHRvIHB1dCBzb2NrZXRzIGZvciBtYWtlIGNoZWNrXSkpCiBBQ19BUkdfV0lUSChzeXN0ZW0tcGlkLWZpbGUsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzdGVtLXBpZC1maWxlPVtwaWRmaWxlXV0sW1BJRCBmaWxlIGZvciBzeXN0ZW13aWRlIGRhZW1vbl0pKQpAQCAtMjU4LDIyICsyMzgsMTUgQEAKICMgZGVmYXVsdCAodW5sZXNzIHlvdSBkb24ndCBoYXZlIEdMaWIpLCBiZWNhdXNlIHRoZXkgZG9uJ3QgYmxvYXQgdGhlIGxpYnJhcnkKICMgb3IgYmluYXJpZXMuCiAKLWRubCBEb24ndCBkbyBhbnl0aGluZyB0b28gc3VidGxlIGhlcmUsIGJlY2F1c2UgdGhlIENNYWtlIGJ1aWxkIHN5c3RlbQotZG5sIHBhcnNlcyB0aGVzZSBsaW5lcyB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIElmIG5lY2Vzc2FyeSwgYWRqdXN0Ci1kbmwgY21ha2UvbW9kdWxlcy9NYWNyb3NBdXRvdG9vbHMuY21ha2UgdG8gY29tcGVuc2F0ZS4KLUFDX0RFRklORShbR0xJQl9WRVJTSU9OX01JTl9SRVFVSVJFRF0sIFtHTElCX1ZFUlNJT05fMl80MF0sIFtJZ25vcmUgcG9zdC0yLjQwIGRlcHJlY2F0aW9uc10pCi1BQ19ERUZJTkUoW0dMSUJfVkVSU0lPTl9NQVhfQUxMT1dFRF0sIFtHX0VOQ09ERV9WRVJTSU9OKDIsNDQpXSwgW1ByZXZlbnQgcG9zdC0yLjQ0IEFQSXNdKQorQUNfREVGSU5FKFtHTElCX1ZFUlNJT05fTUlOX1JFUVVJUkVEXSwgW0dMSUJfVkVSU0lPTl8yXzM2XSwgW0lnbm9yZSBwb3N0LTIuMzYgZGVwcmVjYXRpb25zXSkKK0FDX0RFRklORShbR0xJQl9WRVJTSU9OX01BWF9BTExPV0VEXSwgW0dMSUJfVkVSU0lPTl8yXzM4XSwgW1ByZXZlbnQgcG9zdC0yLjM4IEFQSXNdKQogCiB3aXRoX2dsaWI9eWVzCiAKIEFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9tb2R1bGFyX3Rlc3RzIiAhPSB4bm9dLAogICBbCi0gIFBLR19DSEVDS19NT0RVTEVTKFtHTElCXSwgW2dsaWItMi4wID49IDIuNDAsIGdpby0yLjAgPj0gMi40MF0sCi0gICAgWwotICAgICAgQVNfSUYoW3Rlc3QgIngkZGJ1c191bml4IiA9IHh5ZXNdLAotICAgICAgICBbUEtHX0NIRUNLX01PRFVMRVMoW0dJT19VTklYXSwgW2dpby11bml4LTIuMF0sCi0gICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfR0lPX1VOSVhdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgZ2lvLXVuaXgtMi4wXSldLCBbXSldKQotICAgIF0sCisgIFBLR19DSEVDS19NT0RVTEVTKFtHTElCXSwgW2dsaWItMi4wID49IDIuMzYsIGdpby0yLjAgPj0gMi4zNl0sCisgICAgW10sCiAgICAgW2lmIHRlc3QgIngkZW5hYmxlX21vZHVsYXJfdGVzdHMiID0geHllczsgdGhlbgogICAgICAgQUNfTVNHX05PVElDRShbRnVsbCB0ZXN0IGNvdmVyYWdlICgtLWVuYWJsZS1tb2R1bGFyLXRlc3RzPXllcyBvciAtLWVuYWJsZS10ZXN0cz15ZXMpIHJlcXVpcmVzIEdMaWJdKQogICAgICAgQUNfTVNHX0VSUk9SKFskR0xJQl9FUlJPUlNdKQpAQCAtMzIzLDMxICsyOTYsMTQgQEAKICAgICBBQ19ERUZJTkUoREJVU19FTkFCTEVfVkVSQk9TRV9NT0RFLDEsW1N1cHBvcnQgYSB2ZXJib3NlIG1vZGVdKQogZmkKIAotZG5sIEludGVudGlvbmFsOgotZG5sIC0gJERJU0FCTEVfV0FSTklOR1MgZGlzYWJsZXMgdW51c2VkLWxhYmVsIHdhcm5pbmdzIGlmIG5vdAotZG5sICAgY2hlY2tpbmcgb3Igbm90IGFzc2VydGluZyAodGVzdGVkIGZ1cnRoZXIgYmVsb3cpCi1kbmwgLSB3ZSBhcmUgbm90IGdvaW5nIHRvIHN0b3AgdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMgb24gYSBzdGFibGUKLWRubCAgIGJyYW5jaAotZG5sIC0gbWlzc2luZyBmaWVsZCBpbml0aWFsaXplcnMgYmVpbmcgMCBpcyBhIEMgZmVhdHVyZSwgbm90IGEgYnVnCi1kbmwgLSB1bnVzZWQtcGFyYW1ldGVyIGlzIHRvIG1ha2Ugd3JpdGluZyBjYWxsYmFja3MgbGVzcyBhbm5veWluZwotZG5sIC0gY2FzdC1mdW5jdGlvbi10eXBlIGlzIGZvciB0aGUKLWRubCAgIGZvcmVhY2gobGlzdCwgKERCdXNGb3JlYWNoRnVuY3Rpb24pIGZyZWUsIE5VTEwpIGlkaW9tIHdoaWNoIHdvdWxkCi1kbmwgICBiZSB0b28gaW50cnVzaXZlIHRvIHJlcGxhY2UgaW4gYSBzdGFibGUgYnJhbmNoCi1ESVNBQkxFX1dBUk5JTkdTPSIkRElTQUJMRV9XQVJOSU5HUwotICAgICAgICAgICAgICAgICAgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucwotICAgICAgICAgICAgICAgICAgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycwotICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtcGFyYW1ldGVyCi0gICAgICAgICAgICAgICAgICAtV25vLWNhc3QtZnVuY3Rpb24tdHlwZSIKLQogaWYgdGVzdCB4JGVuYWJsZV9hc3NlcnRzID0geG5vOyB0aGVuCiAgICAgQUNfREVGSU5FKERCVVNfRElTQUJMRV9BU1NFUlQsMSxbRGlzYWJsZSBhc3NlcnRpb24gY2hlY2tpbmddKQotICAgIERJU0FCTEVfV0FSTklOR1M9IiRESVNBQkxFX1dBUk5JTkdTIC1Xbm8tdW51c2VkLWxhYmVsIgorICAgIERJU0FCTEVfVU5VU0VEX1dBUk5JTkdTPSJ1bnVzZWQtbGFiZWwiCiAgICAgUl9EWU5BTUlDX0xERkxBRz0iIgogICAgIGlmIHRlc3QgeCRlbmFibGVfZW1iZWRkZWRfdGVzdHMgPSB4eWVzOyB0aGVuCi0gICAgICAgIERJU0FCTEVfV0FSTklOR1M9IiRESVNBQkxFX1dBUk5JTkdTCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bnVzZWQtZnVuY3Rpb24iCisgICAgICAgIERJU0FCTEVfVU5VU0VEX1dBUk5JTkdTPSIkRElTQUJMRV9VTlVTRURfV0FSTklOR1MgXAorICAgICAgICAgICAgICAgIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlIHVudXNlZC12YXJpYWJsZSBcCisgICAgICAgICAgICAgICAgdW51c2VkLWZ1bmN0aW9uIgogICAgIGZpCiBlbHNlCiAgICAgIyAtcmR5bmFtaWMgaXMgbmVlZGVkIGZvciBnbGliYydzIGJhY2t0cmFjZV9zeW1ib2xzIHRvIHdvcmsuCkBAIC0zNjUsNyArMzIxLDcgQEAKIGlmIHRlc3QgeCRlbmFibGVfY2hlY2tzID0geG5vOyB0aGVuCiAgICAgQUNfREVGSU5FKERCVVNfRElTQUJMRV9DSEVDS1MsMSxbRGlzYWJsZSBwdWJsaWMgQVBJIHNhbml0eSBjaGVja2luZ10pCiAgICAgQUNfREVGSU5FKEdfRElTQUJMRV9DSEVDS1MsMSxbRGlzYWJsZSBHTGliIHB1YmxpYyBBUEkgc2FuaXR5IGNoZWNraW5nXSkKLSAgICBESVNBQkxFX1dBUk5JTkdTPSIkRElTQUJMRV9XQVJOSU5HUyAtV25vLXVudXNlZC1sYWJlbCIKKyAgICBESVNBQkxFX1VOVVNFRF9XQVJOSU5HUz0idW51c2VkLWxhYmVsIgogZmkKIAogQUhfQk9UVE9NKFsKQEAgLTM3NywxNCArMzMzLDM1IEBACiAjICBkZWZpbmUgREJVU19FTkFCTEVfQ0hFQ0tTIDEKICNlbmRpZl0pCiAKLSMgVGVzdCBmb3IgY29kZS1jb3ZlcmFnZSB0b29scyBpZiAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlCi1BWF9DT0RFX0NPVkVSQUdFCitpZiB0ZXN0IHgkZW5hYmxlX2NvbXBpbGVyX2NvdmVyYWdlID0geHllczsgdGhlbgorICAgICAjIyBzbyB0aGF0IGNvbmZpZy5oIGNoYW5nZXMgd2hlbiB5b3UgdG9nZ2xlIGdjb3Ygc3VwcG9ydAorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoREJVU19HQ09WX0VOQUJMRUQsIDEsIFtEZWZpbmVkIGlmIGdjb3YgaXMgZW5hYmxlZCB0byBmb3JjZSBhIHJlYnVpbGQgZHVlIHRvIGNvbmZpZy5oIGNoYW5naW5nXSkKK2ZpCiAKLUFTX0lGKFt0ZXN0IHgkZW5hYmxlX2NvZGVfY292ZXJhZ2UgPSB4eWVzXSxbCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKAotICAgICAgW0RCVVNfR0NPVl9FTkFCTEVEXSwgWzFdLAotICAgICAgW0RlZmluZWQgaWYgZ2NvdiBpcyBlbmFibGVkIHRvIGZvcmNlIGEgcmVidWlsZCBkdWUgdG8gY29uZmlnLmggY2hhbmdpbmddKQotICBdKQorIyBnbGliYzIxLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisjIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisgIGFjX2N2X2dudV9saWJyYXJ5XzJfMSwKKyAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorICAgIFsKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIF9fR05VX0xJQlJBUllfXworICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisgICAgXSwKKyAgICBhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorICAgIGFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKKyAgXQorKQogCiAjIyMjIEludGVnZXIgc2l6ZXMKIApAQCAtNDA0LDIxICszODEsMzIgQEAKICAgZGJ1c2ludDY0PWludAogICBkYnVzaW50NjRfY29uc3RhbnQ9Jyh2YWwpJwogICBkYnVzdWludDY0X2NvbnN0YW50PScodmFsKScKKyAgZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllcj0nIiInCiAgIDs7CiAkYWNfY3Zfc2l6ZW9mX2xvbmcpCiAgIGRidXNpbnQ2ND1sb25nCiAgIGRidXNpbnQ2NF9jb25zdGFudD0nKHZhbCMjTCknCiAgIGRidXN1aW50NjRfY29uc3RhbnQ9Jyh2YWwjI1VMKScKKyAgZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllcj0nImwiJwogICA7OwogJGFjX2N2X3NpemVvZl9sb25nX2xvbmcpCiAgIGRidXNpbnQ2ND0nbG9uZyBsb25nJwogICBkYnVzaW50NjRfY29uc3RhbnQ9Jyh2YWwjI0xMKScKICAgZGJ1c3VpbnQ2NF9jb25zdGFudD0nKHZhbCMjVUxMKScKKyAgIyBJZGVhbGx5IHdlIGRpc2NvdmVyIHdoYXQgdGhlIGZvcm1hdCBpcywgYnV0IHRoaXMgaXMKKyAgIyBvbmx5IHVzZWQgaW4gdmVyYm9zZSBtb2RlLCBzbyBlaC4uLgorICBpZiB0ZXN0IHgiJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIgPSB4eWVzOyB0aGVuCisgICAgZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllcj0nImxsIicKKyAgZmkKICAgOzsKICRhY19jdl9zaXplb2ZfX19pbnQ2NCkKICAgZGJ1c2ludDY0PV9faW50NjQKICAgZGJ1c2ludDY0X2NvbnN0YW50PScodmFsIyNpNjQpJwogICBkYnVzdWludDY0X2NvbnN0YW50PScodmFsIyN1aTY0KScKKyAgIyBTZWUgYWJvdmUgY2FzZQorICBpZiB0ZXN0IHgiJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIgPSB4eWVzOyB0aGVuCisgICAgZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllcj0nImxsIicKKyAgZmkKICAgOzsKIGVzYWMKIApAQCAtNDM2LDYgKzQyNCw5IEBACiAgICAgICAgIERCVVNfSU5UNjRfVFlQRT0iJGRidXNpbnQ2NCIKICAgICAgICAgREJVU19JTlQ2NF9DT05TVEFOVD0iJGRidXNpbnQ2NF9jb25zdGFudCIKICAgICAgICAgREJVU19VSU5UNjRfQ09OU1RBTlQ9IiRkYnVzdWludDY0X2NvbnN0YW50IgorCWlmIHRlc3QgeCIkZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllciIgIT0geDsgdGhlbgorCQlBQ19ERUZJTkVfVU5RVU9URUQoREJVU19JTlQ2NF9QUklOVEZfTU9ESUZJRVIsIFskZGJ1c2ludDY0X3ByaW50Zl9tb2RpZmllcl0sIFtEZWZpbmUgdG8gcHJpbnRmIG1vZGlmaWVyIGZvciA2NCBiaXQgaW50ZWdlciB0eXBlXSkKKwlmaQogICAgICAgICBBQ19NU0dfUkVTVUxUKCREQlVTX0lOVDY0X1RZUEUpCiAgIF0pCiAKQEAgLTUwNywxMCArNDk4LDYgQEAKIAkJOzsKIGVzYWMKIAotIyBBcyBhIEdOVSBleHRlbnNpb24sIGdsaWJjIGRlY2xhcmVzIGVudmlyb24gaW4gdW5pc3RkLmgsIHdoaWNoIGlzIG9uZSBvZgotIyB0aGUgQUNfSU5DTFVERVNfREVGQVVMVC4KLUFDX0NIRUNLX0RFQ0xTKFtlbnZpcm9uXSkKLQogZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIGRubCAqKiogdmFfY29weSBjaGVja3MgKGZyb20gR0xpYikgKioqCiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjE5LDcgKzYwNiw3IEBACiBBQ19TRUFSQ0hfTElCUyhzb2NrZXQsW3NvY2tldCBuZXR3b3JrXSkKIEFDX0NIRUNLX0ZVTkMoZ2V0aG9zdGJ5bmFtZSwsW0FDX0NIRUNLX0xJQihuc2wsZ2V0aG9zdGJ5bmFtZSldKQogCi1BQ19DSEVDS19GVU5DUyhbdnNucHJpbnRmIHZhc3ByaW50ZiBuYW5vc2xlZXAgdXNsZWVwIHNldGVudiBjbGVhcmVudiB1bnNldGVudiBzb2NrZXRwYWlyIGdldGdyb3VwbGlzdCBmcGF0aGNvbmYgc2V0cmxpbWl0IHBvbGwgc2V0bG9jYWxlIGxvY2FsZWNvbnYgc3RydG9sbCBzdHJ0b3VsbCBpc3NldHVnaWQgZ2V0cmVzdWlkIHNldHJlc3VpZCBnZXRybGltaXQgcHJsaW1pdF0pCitBQ19DSEVDS19GVU5DUyhbdnNucHJpbnRmIHZhc3ByaW50ZiBuYW5vc2xlZXAgdXNsZWVwIHNldGVudiBjbGVhcmVudiB1bnNldGVudiBzb2NrZXRwYWlyIGdldGdyb3VwbGlzdCBmcGF0aGNvbmYgc2V0cmxpbWl0IHBvbGwgc2V0bG9jYWxlIGxvY2FsZWNvbnYgc3RydG9sbCBzdHJ0b3VsbCBpc3NldHVnaWQgZ2V0cmVzdWlkIHNldHJlc3VpZCBnZXRybGltaXRdKQogCiBBQ19DSEVDS19IRUFERVJTKFtzeXNsb2cuaF0pCiBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNsb2dfaCIgPSAieHllcyI7IHRoZW4KQEAgLTYzMCw2ICs2MTcsMzQgQEAKIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3ByY3RsLmhdKQogQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcHJjdGwgcmFpc2VdKQogCisjIyMjIENoZWNrIGZvciBicm9rZW4gcG9sbDsgdGFrZW4gZnJvbSBHbGliJ3MgY29uZmlndXJlCisKK0FDX01TR19DSEVDS0lORyhbZm9yIGJyb2tlbiBwb2xsXSkKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICNpbmNsdWRlIDxmY250bC5oPgorICAgICNpbmNsdWRlIDxwb2xsLmg+CisgICAgI2lmZGVmIEhBVkVfU1lTX1BPTExfSAorICAgICNpbmNsdWRlIDxzeXMvcG9sbC5oPgorICAgICNlbmRpZgorICAgIGludCBtYWluKHZvaWQpIHsKKyAgICAgIHN0cnVjdCBwb2xsZmQgZmRzWzFdOworICAgICAgaW50IGZkOworICAgICAgZmQgPSBvcGVuKCIvZGV2L251bGwiLCAxKTsKKyAgICAgIGZkc1swXS5mZCA9IGZkOworICAgICAgZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKKyAgICAgIGZkc1swXS5yZXZlbnRzID0gMDsKKyAgICAgIGlmIChwb2xsKGZkcywgMSwgMCkgPCAwIHx8IChmZHNbMF0ucmV2ZW50cyAmIFBPTExOVkFMKSAhPSAwKSB7CisgICAgICAgICAgICBleGl0KDEpOyAgLyogRG9lcyBub3Qgd29yayBmb3IgZGV2aWNlcyAtLSBmYWlsICovCisgICAgICB9CisgICAgICBleGl0KDApOworICAgIH1dXSldLAorICBbYnJva2VuX3BvbGw9bm9dLAorICBbYnJva2VuX3BvbGw9eWVzCisgICBBQ19ERUZJTkUoQlJPS0VOX1BPTEwsMSxbcG9sbCBkb2Vzbid0IHdvcmsgb24gZGV2aWNlc10pXSwKKyAgW2Jyb2tlbl9wb2xsPSJubyAoY3Jvc3MgY29tcGlsaW5nKSJdKQorQUNfTVNHX1JFU1VMVCgkYnJva2VuX3BvbGwpCisKIEFDX01TR19DSEVDS0lORyhmb3IgZGlyZmQpCiBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC02NjYsNyArNjgxLDYgQEAKIGZpCiAKIEFDX0NIRUNLX0hFQURFUlMoc3lzL3Jlc291cmNlLmgpCi1BQ19DSEVDS19IRUFERVJTKFtzeXMvdGltZS5oXSkKIAogQUNfQ0hFQ0tfSEVBREVSUyhkaXJlbnQuaCkKIApAQCAtODMwLDE1ICs4NDQsOTkgQEAKIAogQUNfQ0hFQ0tfRlVOQ1MocGlwZTIgYWNjZXB0NCkKIAotUEtHX0NIRUNLX01PRFVMRVMoW0VYUEFUXSwgW2V4cGF0XSkKKyMjIyMgQWJzdHJhY3Qgc29ja2V0cwogCi1zYXZlX2NmbGFncz0iJENGTEFHUyIKLXNhdmVfbGlicz0iJExJQlMiCi1DRkxBR1M9IiRDRkxBR1MgJEVYUEFUX0NGTEFHUyIKLUxJQlM9IiRMSUJTICRFWFBBVF9MSUJTIgotQUNfQ0hFQ0tfRlVOQ1MoW1hNTF9TZXRIYXNoU2FsdF0pCi1DRkxBR1M9IiRzYXZlX2NmbGFncyIKLUxJQlM9IiRzYXZlX2xpYnMiCitpZiB0ZXN0IHgkZW5hYmxlX2Fic3RyYWN0X3NvY2tldHMgPSB4YXV0bzsgdGhlbgorQUNfTEFOR19QVVNIKEMpCit3YXJuX29uX3hjb21waWxlPW5vCitBQ19DQUNIRV9DSEVDSyhbYWJzdHJhY3Qgc29ja2V0IG5hbWVzcGFjZV0sCisJCWFjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cywKKwkJW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKK1tbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK11dLAorW1sKKyAgc2l6ZV90IHNsZW47CisgIGludCBsaXN0ZW5fZmQ7CisgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworCisgIGxpc3Rlbl9mZCA9IHNvY2tldCAoUEZfVU5JWCwgU09DS19TVFJFQU0sIDApOworCisgIGlmIChsaXN0ZW5fZmQgPCAwKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInNvY2tldCgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIG1lbXNldCAoJmFkZHIsICdcMCcsIHNpemVvZiAoYWRkcikpOworICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICBzdHJjcHkgKGFkZHIuc3VuX3BhdGgsICJYL3RtcC9kYnVzLWZha2Utc29ja2V0LXBhdGgtdXNlZC1pbi1jb25maWd1cmUtdGVzdCIpOworICAvKiBTVU5fTEVOIHVzZXMgc3RybGVuKCkgc28gbmVlZCB0byBjYWxjdWxhdGUgaXQgYmVmb3JlIGFkZGluZyBcMCBhdCB0aGUKKyAgICogYmVnaW5uaW5nLgorICAgKi8KKyAgc2xlbiA9IFNVTl9MRU4oJmFkZHIpOworICBhZGRyLnN1bl9wYXRoWzBdID0gJ1wwJzsgLyogdGhpcyBpcyB3aGF0IG1ha2VzIGl0IGFic3RyYWN0ICovCisKKyAgaWYgKGJpbmQgKGxpc3Rlbl9mZCwgKHN0cnVjdCBzb2NrYWRkciopICZhZGRyLCBzbGVuKSA8IDApCisgICAgeworICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkFic3RyYWN0IHNvY2tldCBuYW1lc3BhY2UgYmluZCgpIGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgZXhpdCAoMSk7CisgICAgfQorICBlbHNlCisgICAgZXhpdCAoMCk7CitdXSldLAorICAgICAgICAgICAgICBbYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc10sCisgICAgICAgICAgICAgIFthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm9dLAorICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPW5vCisgICAgICAgICAgICAgICAgd2Fybl9vbl94Y29tcGlsZT15ZXMKKyAgICAgICAgICAgICAgXQorKV0pCitpZiB0ZXN0IHgkd2Fybl9vbl94Y29tcGlsZSA9IHh5ZXMgOyB0aGVuCisgIEFDX01TR19XQVJOKFtDYW5ub3QgY2hlY2sgZm9yIGFic3RyYWN0IHNvY2tldHMgd2hlbiBjcm9zcy1jb21waWxpbmcsIHBsZWFzZSB1c2UgLS1lbmFibGUtYWJzdHJhY3Qtc29ja2V0c10pCitmaQorQUNfTEFOR19QT1AoQykKK2ZpCisKK2lmIHRlc3QgeCRlbmFibGVfYWJzdHJhY3Rfc29ja2V0cyA9IHh5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHgkYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzID0geG5vOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtBYnN0cmFjdCBzb2NrZXRzIGV4cGxpY2l0bHkgcmVxdWlyZWQsIGFuZCBzdXBwb3J0IG5vdCBkZXRlY3RlZC5dKQorICAgIGZpCitmaQorCitpZiB0ZXN0IHgkZW5hYmxlX2Fic3RyYWN0X3NvY2tldHMgPSB4bm87IHRoZW4KKyAgIGFjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ubzsKK2ZpCisKK2lmIHRlc3QgeCRhY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHMgPSB4eWVzIDsgdGhlbgorICAgREJVU19QQVRIX09SX0FCU1RSQUNUPWFic3RyYWN0CisgICBBQ19ERUZJTkUoSEFWRV9BQlNUUkFDVF9TT0NLRVRTLDEsW0hhdmUgYWJzdHJhY3Qgc29ja2V0IG5hbWVzcGFjZV0pCitlbHNlCisgICBEQlVTX1BBVEhfT1JfQUJTVFJBQ1Q9cGF0aAorZmkKKworIyB0aGlzIGlzIHVzZWQgaW4gYWRkcmVzc2VzIHRvIHByZWZlciBhYnN0cmFjdCwgZS5nLgorIyB1bml4OnBhdGg9L2ZvbyBvciB1bml4OmFic3RyYWN0PS9mb28KK0FDX1NVQlNUKERCVVNfUEFUSF9PUl9BQlNUUkFDVCkKKworIyMjIyBTb3J0IG91dCBYTUwgbGlicmFyeQorCitBQ19DSEVDS19MSUIoZXhwYXQsIFhNTF9QYXJzZXJDcmVhdGVfTU0sCisgICAgICAgICAgICAgWyBBQ19DSEVDS19IRUFERVJTKGV4cGF0LmgsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBleHBhdC5oLCBjaGVjayBjb25maWcubG9nIGZvciBmYWlsZWQgYXR0ZW1wdHNdKV0pIF0sCisgICAgICAgICAgICAgWyBBQ19NU0dfRVJST1IoW0V4cGxpY2l0bHkgcmVxdWVzdGVkIGV4cGF0IGJ1dCBleHBhdCBub3QgZm91bmRdKSBdKQorCitYTUxfTElCUz0tbGV4cGF0CitYTUxfQ0ZMQUdTPQorQUNfU1VCU1QoW1hNTF9DRkxBR1NdKQorQUNfU1VCU1QoW1hNTF9MSUJTXSkKIAogIyBUaHJlYWQgbGliIGRldGVjdGlvbgogQUNfQVJHX1ZBUihbVEhSRUFEX0xJQlNdKQpAQCAtOTE2LDggKzEwMTQsMjEgQEAKICAgICBoYXZlX3NlbGludXg9bm87CiBlbHNlCiAgICAgIyBTZWUgaWYgd2UgaGF2ZSBTRUxpbnV4IGxpYnJhcnkKLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbU0VMSU5VWF0sIFtsaWJzZWxpbnV4ID49IDIuMC44Nl0sCi0gICAgICAgICAgICAgICAgIFtoYXZlX3NlbGludXg9eWVzXSwgW2hhdmVfc2VsaW51eD1ub10pCisgICAgQUNfQ0hFQ0tfTElCKHNlbGludXgsIGlzX3NlbGludXhfZW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgaGF2ZV9zZWxpbnV4PXllcywgaGF2ZV9zZWxpbnV4PW5vKQorCisgICAgIyBzZWUgaWYgd2UgaGF2ZSB0aGUgU0VMaW51eCBoZWFkZXIgd2l0aCB0aGUgbmV3IEQtQnVzIHN0dWZmIGluIGl0CisgICAgaWYgdGVzdCB4JGhhdmVfc2VsaW51eCA9IHh5ZXMgOyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIERCVVMgRmxhc2sgcGVybWlzc2lvbnMgaW4gc2VsaW51eC9hdl9wZXJtaXNzaW9ucy5oXSkKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzZWxpbnV4L2F2X3Blcm1pc3Npb25zLmg+XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbI2lmZGVmIERCVVNfX0FDUVVJUkVfU1ZDIHJldHVybiAwOworCQkJICAgICNlbHNlCisJCQkgICAgI2Vycm9yIERCVVNfX0FDUVVJUkVfU1ZDIG5vdCBkZWZpbmVkCisJCQkgICAgI2VuZGlmXV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfc2VsaW51eD15ZXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9zZWxpbnV4PW5vXSkKKwlBQ19NU0dfUkVTVUxUKCRoYXZlX3NlbGludXgpCisgICAgZmkKIAogICAgIGlmIHRlc3QgeCRlbmFibGVfc2VsaW51eCA9IHhhdXRvIDsgdGhlbgogICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9zZWxpbnV4ID0geG5vIDsgdGhlbgpAQCAtOTM4LDcgKzEwNDksNyBAQAogICAgIEFDX0NIRUNLX0ZVTkMocHRocmVhZF9jcmVhdGUsLFtBQ19DSEVDS19MSUIocHRocmVhZCxwdGhyZWFkX2NyZWF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTRUxJTlVYX1RIUkVBRF9MSUJTPSItbHB0aHJlYWQiXSldKQogCi0gICAgU0VMSU5VWF9MSUJTPSIkU0VMSU5VWF9MSUJTICRTRUxJTlVYX1RIUkVBRF9MSUJTIgorICAgIFNFTElOVVhfTElCUz0iLWxzZWxpbnV4ICRTRUxJTlVYX1RIUkVBRF9MSUJTIgogICAgIEFDX0RFRklORShIQVZFX1NFTElOVVgsMSxbU0VMaW51eCBzdXBwb3J0XSkKIGVsc2UKICAgICBTRUxJTlVYX0xJQlM9CkBAIC05NTAsOCArMTA2MSw2IEBACiAgIFsKICAgUEtHX0NIRUNLX01PRFVMRVMoW0FQUEFSTU9SXSwgW2xpYmFwcGFybW9yID49IDIuOC45NV0sCiAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2FwcGFybW9yPXllc10sIFtoYXZlX2FwcGFybW9yPW5vXSkKLSAgUEtHX0NIRUNLX01PRFVMRVMoW0FQUEFSTU9SXzJfMTBdLCBbbGliYXBwYXJtb3IgPj0gMi4xMF0sCi0gICAgICAgICAgICAgICAgICAgIFtoYXZlX2FwcGFybW9yXzJfMTA9eWVzXSwgW2hhdmVfYXBwYXJtb3JfMl8xMD1ub10pCiAKICAgQVNfSUYoW3Rlc3QgeCRlbmFibGVfYXBwYXJtb3IgPSB4YXV0byAmJiB0ZXN0IHgkaGF2ZV9hcHBhcm1vciA9IHhub10sCiAgICAgICAgIFtBQ19NU0dfV0FSTihbU3VmZmljaWVudGx5IG5ldyBBcHBBcm1vciBsaWJyYXJ5IG5vdCBmb3VuZF0pXSkKQEAgLTk2MSw5ICsxMDcwLDYgQEAKIAogQVNfSUYoW3Rlc3QgeCRoYXZlX2FwcGFybW9yID0geHllc10sCiAgICAgICBbQUNfREVGSU5FKFtIQVZFX0FQUEFSTU9SXSwgWzFdLCBbQXBwQXJtb3IgU3VwcG9ydF0pXSkKLUFTX0lGKFt0ZXN0IHgkaGF2ZV9hcHBhcm1vcl8yXzEwID0geHllc10sCi0gICAgICBbQUNfREVGSU5FKFtIQVZFX0FQUEFSTU9SXzJfMTBdLCBbMV0sCi0gICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgbGliYXBwYXJtb3IgaXMgdmVyc2lvbiAyLjEwIG9yIGxhdGVyXSldKQogCiAjIGlub3RpZnkgY2hlY2tzCiBpZiB0ZXN0IHgkZW5hYmxlX2lub3RpZnkgPSB4bm8gOyB0aGVuCkBAIC0xMTYyLDcgKzEyNjgsNyBAQAogICBpZiB0ZXN0IHgkZGJ1c193aW5jZSA9IHh5ZXMgOyB0aGVuCiAgICAgTkVUV09SS19saWJzPSItbHdzMiIKICAgZWxzZQotICAgIE5FVFdPUktfbGlicz0iLWx3czJfMzIgLWxpcGhscGFwaSAtbGRiZ2hlbHAiCisgICAgTkVUV09SS19saWJzPSItbHdzMl8zMiAtbGlwaGxwYXBpIgogICBmaQogZmkKIApAQCAtMTIzMCw1NSArMTMzNiw4MyBAQAogaWYgdGVzdCAieCRlbmFibGVfeDExX2F1dG9sYXVuY2giID0geHllcyA7IHRoZW4KICAgIEFDX0RFRklORShbREJVU19FTkFCTEVfWDExX0FVVE9MQVVOQ0hdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIFgxMSBhdXRvLWxhdW5jaF0pCiBmaQotQU1fQ09ORElUSU9OQUwoW0RCVVNfRU5BQkxFX1gxMV9BVVRPTEFVTkNIXSwKLSAgW3Rlc3QgIngkZW5hYmxlX3gxMV9hdXRvbGF1bmNoIiA9IHh5ZXNdKQogCiBBQ19TVUJTVChbREJVU19YX0NGTEFHU10pCiBBQ19TVUJTVChbREJVU19YX0xJQlNdKQogCi0jIFdlJ3JlIHRyZWF0aW5nIC1mbm8tY29tbW9uIGxpa2UgYSB3YXJuaW5nOiBpdCBtYWtlcyB0aGUgbGlua2VyIG1vcmUKLSMgc3RyaWN0LCBiZWNhdXNlIG9uIHNvbWUgc3lzdGVtcyB0aGUgbGlua2VyIGlzICphbHdheXMqIHRoaXMgc3RyaWN0Ci1URVNUX0NGTEFHUz0iJFRFU1RfQ0ZMQUdTIC1mbm8tY29tbW9uIgorIyMjIyBnY2Mgd2FybmluZyBmbGFncwogCi1BU19JRihbdGVzdCAieCRlbmFibGVfYW5zaSIgPSAieHllcyJdLFsKLSAgICBURVNUX0NGTEFHUz0iJFRFU1RfQ0ZMQUdTIC1hbnNpIC1wZWRhbnRpYyIKLSAgICBBQ19ERUZJTkUoW19QT1NJWF9DX1NPVVJDRV0sWzE5OTMwOUxdLFtEZWZpbmUgdG8gZW5hYmxlIFBPU0lYIGZlYXR1cmVzXSkKLSAgICBBQ19ERUZJTkUoW19CU0RfU09VUkNFXSxbMV0sW0RlZmluZSB0byBlbmFibGUgQlNEIGZlYXR1cmVzXSkKK2NjX3N1cHBvcnRzX2ZsYWcoKSB7CisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBzdXBwb3J0cyAiJCoiKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkKiIKKyAgQUNfVFJZX0NPTVBJTEUoW10sIFtdLCBbcmM9eWVzXSwgW3JjPW5vXSkKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIEFDX01TR19SRVNVTFQoWyRyY10pCisgIHRlc3QgIngkcmMiID0geHllcworfQorCitUUF9DT01QSUxFUl9XQVJOSU5HUyhbV0FSTklOR19DRkxBR1NdLAorICBkbmwgVXNlIC1XZXJyb3IgYnkgZGVmYXVsdCBpZjoKKyAgZG5sIC0gd2UncmUgbm90IG9uIFdpbmRvd3MgKHRvbyBtYW55IHdhcm5pbmdzKSwgYW5kCisgIGRubCAtIHdlJ3JlIGluIGRldmVsb3BlciBtb2RlIChhIEQtQnVzIGRldmVsb3Blciwgbm90IGEgZGlzdHJvIG9yIGVuZC11c2VyKQorICBkbmwgT3ZlcnJpZGUgd2l0aCAtLWVuYWJsZS1XZXJyb3Igb3IgLS1kaXNhYmxlLVdlcnJvcgorICBbdGVzdCB4JGRidXNfd2luICE9IHh5ZXMgLWEgeCRkYnVzX2N5Z3dpbiAhPSB4eWVzIC1hIHgkZW5hYmxlX2RldmVsb3BlciA9IHh5ZXNdLAorCisgIGRubCBFbmFibGUgdGhlc2Ugd2FybmluZ3MgaWYgcG9zc2libGU6CisgIFthbGwgXAorICAgZXh0cmEgXAorICAgY2hhci1zdWJzY3JpcHRzIFwKKyAgIG1pc3NpbmctZGVjbGFyYXRpb25zIFwKKyAgIG1pc3NpbmctcHJvdG90eXBlcyBcCisgICBuZXN0ZWQtZXh0ZXJucyBcCisgICBwb2ludGVyLWFyaXRoIFwKKyAgIGNhc3QtYWxpZ24gXAorICAgbm8tYWRkcmVzcyBcCisgICBmbG9hdC1lcXVhbCBcCisgICBkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgXAorICBdLAorCisgIGRubCBEaXNhYmxlIHRoZXNlIHdhcm5pbmdzIGlmIHBvc3NpYmxlLCBtYWtlIHRoZW0gbm9uLWZhdGFsIGlmIHBvc3NpYmxlLAorICBkbmwgYW5kIGRvbid0IGVuYWJsZSAtV2Vycm9yIHVubGVzcyB3ZSBzdWNjZWVkZWQuCisgIGRubAorICBkbmwgSW50ZW50aW9uYWw6CisgIGRubCAtICRESVNBQkxFX1VOVVNFRF9XQVJOSU5HUyBkaXNhYmxlcyB1bnVzZWQtbGFiZWwgd2FybmluZ3MgaWYgbm90CisgIGRubCAgIGNoZWNraW5nIG9yIG5vdCBhc3NlcnRpbmcKKyAgZG5sIC0gbWlzc2luZyBmaWVsZCBpbml0aWFsaXplcnMgYmVpbmcgMCBpcyBhIEMgZmVhdHVyZSwgbm90IGEgYnVnCisgIGRubCAtIHVudXNlZC1wYXJhbWV0ZXIgaXMgdG8gbWFrZSB3cml0aW5nIGNhbGxiYWNrcyBsZXNzIGFubm95aW5nCisgIGRubAorICBkbmwgVG8gYmUgZml4ZWQgb25lIGRheToKKyAgZG5sIC0gcG9pbnRlci1zaWduIGlzIGEgd29ya2Fyb3VuZCBmb3IgZmQubyAjMTU1MjIKKyAgZG5sIC0gdHlwZS1saW1pdHMgaXMgcHJvYmFibHkgYSBidWcgdG9vLCBidXQgaGF2aW5nIHRoZSByZXN0IG9mIC1XZXh0cmEKKyAgZG5sICAgaXMgYmV0dGVyIHRoYW4gbm90aGluZworICBbJERJU0FCTEVfVU5VU0VEX1dBUk5JTkdTIFwKKyAgIGRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIFwKKyAgIG1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIFwKKyAgIHVudXNlZC1wYXJhbWV0ZXIgXAorICAgcG9pbnRlci1zaWduIFwKKyAgIHR5cGUtbGltaXRzIFwKICAgXSkKIAotZG5sIFdlIGFyZSBvbmx5IGNhbGxpbmcgdGhpcyBmb3IgaXRzIHNpZGUtZWZmZWN0IG9mIHNldHRpbmcgdXAKLWRubCAtLWVuYWJsZS1jb21waWxlLXdhcm5pbmdzOyB0aGUgV0FSTl9DRkxBR1MsIGV0Yy4gYXJlIGlnbm9yZWQsCi1kbmwgdG8gd29yayBhcm91bmQgaHR0cHM6Ly9naXRodWIuY29tL3BldGkvYXV0b2NvbmYtYXJjaGl2ZS9wdWxsLzk2Ci1BWF9DT01QSUxFUl9GTEFHUyhbXSwgW10sIFskZGlzYWJsZV9kZXZlbG9wZXJdKQoraWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisgICMgV2UncmUgdHJlYXRpbmcgLWZuby1jb21tb24gbGlrZSBhIHdhcm5pbmc6IGl0IG1ha2VzIHRoZSBsaW5rZXIgbW9yZQorICAjIHN0cmljdCwgYmVjYXVzZSBvbiBzb21lIHN5c3RlbXMgdGhlIGxpbmtlciBpcyAqYWx3YXlzKiB0aGlzIHN0cmljdAorICBUUF9BRERfQ09NUElMRVJfRkxBRyhbV0FSTklOR19DRkxBR1NdLCBbLWZuby1jb21tb25dKQogCi1kbmwgV29yayBhcm91bmQgaHR0cHM6Ly9naXRodWIuY29tL3BldGkvYXV0b2NvbmYtYXJjaGl2ZS9wdWxsLzk2IGJ5IHVzaW5nCi1kbmwgYSBub24tZGVmYXVsdCB2YXJpYWJsZSBuYW1lIGhlcmUgKGluIHBhcnRpY3VsYXIgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwKLWRubCBBWF9DT01QSUxFUl9GTEFHUyB0byBub3QgdXNlIFdBUk5fQ1hYRkxBR1MpCi1BWF9DT01QSUxFUl9GTEFHU19DRkxBR1MoW0VYVFJBX0NGTEFHU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgWyRkaXNhYmxlX2RldmVsb3Blcl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgWyRURVNUX0NGTEFHU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgWy1XY2hhci1zdWJzY3JpcHRzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLVdmbG9hdC1lcXVhbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC1XcG9pbnRlci1zaWduIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJERJU0FCTEVfV0FSTklOR1NdKQotZG5sIGNjMXBsdXM6IHdhcm5pbmc6IGNvbW1hbmQgbGluZSBvcHRpb24g4oCYLVdwb2ludGVyLXNpZ27igJkgaXMgdmFsaWQgZm9yCi1kbmwgQy9PYmpDIGJ1dCBub3QgZm9yIEMrKwotQVhfQ09NUElMRVJfRkxBR1NfQ1hYRkxBR1MoW0VYVFJBX0NYWEZMQUdTXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFskZGlzYWJsZV9kZXZlbG9wZXJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbLVdjaGFyLXN1YnNjcmlwdHMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XZmxvYXQtZXF1YWwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRESVNBQkxFX1dBUk5JTkdTXSkKLUFYX0NPTVBJTEVSX0ZMQUdTX0xERkxBR1MoW0VYVFJBX0xERkxBR1NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJGRpc2FibGVfZGV2ZWxvcGVyXSkKKyAgIyBodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTk5CisgIFRQX0FERF9DT01QSUxFUl9GTEFHKFtXQVJOSU5HX0NGTEFHU10sIFstZm5vLXN0cmljdC1hbGlhc2luZ10pCiAKLWRubCBUT0RPOiBJbiBwcmluY2lwbGUgd2Ugc2hvdWxkIHB1dCBFWFRSQV9DRkxBR1MgaW4gZWFjaCBNYWtlZmlsZS5hbSBsaWtlCisgIGlmIHRlc3QgIngkZW5hYmxlX2Fuc2kiID0gInh5ZXMiOyB0aGVuCisgICAgVFBfQUREX0NPTVBJTEVSX0ZMQUcoW1dBUk5JTkdfQ0ZMQUdTXSwKKyAgICAgIFstYW5zaSAtRF9QT1NJWF9DX1NPVVJDRT0xOTkzMDlMIC1EX0JTRF9TT1VSQ0UgLXBlZGFudGljXSkKKyAgZmkKK2ZpCisKK2RubCBJbiBwcmluY2lwbGUgd2Ugc2hvdWxkIHB1dCBXQVJOSU5HX0NGTEFHUyBpbiBlYWNoIE1ha2VmaWxlLmFtIGxpa2UKIGRubCB0ZWxlcGF0aHktZ2xpYiBkb2VzLCBzaW5jZSBDRkxBR1MgaXMgbWVhbnQgdG8gYmUgcmVzZXJ2ZWQgZm9yIHRoZSB1c2VyLi4uCiBkbmwgYnV0IHByZXBlbmRpbmcgdG8gQ0ZMQUdTIChzbyB0aGUgdXNlciBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBsYXRlciBDRkxBR1MpCi1kbmwgaXMgdGhlIG5leHQgYmVzdCB0aGluZy4KLUNGTEFHUz0iJEVYVFJBX0NGTEFHUyAkQ0ZMQUdTIgotQ1hYRkxBR1M9IiRFWFRSQV9DWFhGTEFHUyAkQ1hYRkxBR1MiCi1MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkTERGTEFHUyIKK2RubCBpcyB0aGUgbmV4dCBiZXN0IHRoaW5nCitDRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAkQ0ZMQUdTIgogCiBjYXNlICRob3N0X29zIGluCiAgICAgc29sYXJpcyopCkBAIC0xMzkxLDExICsxNTI1LDYgQEAKICAgICBbdGVzdCB4JGVuYWJsZV9kb3h5Z2VuX2RvY3MgPSB4eWVzICYmIHRlc3QgeCRlbmFibGVfeG1sX2RvY3MgPSB4eWVzICYmCiAgICAgIHRlc3QgeCRlbmFibGVfZHVja3R5cGVfZG9jcyA9IHh5ZXNdKQogCi0jIEF1dG9jb25mIDIuNzAgd2lsbCBzdXBwb3J0IHRoaXMsIGFuZCBtYW55IGRpc3Ryb3MgcGF0Y2ggdGhpcyBvcHRpb24gaW4sCi0jIGJ1dCBBdXRvY29uZiAyLjcwIGhhc24ndCBhY3R1YWxseSBiZWVuIHJlbGVhc2VkIHlldC4KLUFTX0lGKFt0ZXN0IC16ICIke3J1bnN0YXRlZGlyfSJdLCBbcnVuc3RhdGVkaXI9JyR7bG9jYWxzdGF0ZWRpcn0vcnVuJ10pCi1BQ19TVUJTVChbcnVuc3RhdGVkaXJdKQotCiAjIyMjIEhhdmUgdG8gZ28gJGxvY2Fsc3RhdGVkaXItPiRwcmVmaXgvdmFyLT4vdXNyL2xvY2FsL3ZhcgogCiAjIyMjIGZpbmQgdGhlIGFjdHVhbCB2YWx1ZSBmb3IgJHByZWZpeCB0aGF0IHdlJ2xsIGVuZCB1cCB3aXRoCkBAIC0xNDA4LDcgKzE1MzcsMzUgQEAKIEFTX0FDX0VYUEFORChFWFBBTkRFRF9MSUJESVIsICIkbGliZGlyIikKIEFTX0FDX0VYUEFORChFWFBBTkRFRF9MSUJFWEVDRElSLCAiJGxpYmV4ZWNkaXIiKQogQVNfQUNfRVhQQU5EKEVYUEFOREVEX0RBVEFESVIsICIkZGF0YWRpciIpCi1BU19BQ19FWFBBTkQoRVhQQU5ERURfUlVOU1RBVEVESVIsICIkcnVuc3RhdGVkaXIiKQorCisjIyMjIENoZWNrIG91ciBvcGVyYXRpbmcgc3lzdGVtCitvcGVyYXRpbmdfc3lzdGVtPXVua25vd24KK2lmIHRlc3QgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3JlZGhhdC1yZWxlYXNlIDsgdGhlbgorICAgb3BlcmF0aW5nX3N5c3RlbT1yZWRoYXQKK2ZpCisKK2lmIHRlc3QgLWYgL2V0Yy9zbGFja3dhcmUtdmVyc2lvbiB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3NsYWNrd2FyZS12ZXJzaW9uIDsgdGhlbgorICAgb3BlcmF0aW5nX3N5c3RlbT1zbGFja3dhcmUKK2ZpCisKK2lmIHRlc3QgLWYgL3Vzci9iaW4vY3lnd2luMS5kbGwgfHwgdGVzdCAtZiAkRVhQQU5ERURfQklORElSL2N5Z3dpbjEuZGxsIDsgdGhlbgorICAgb3BlcmF0aW5nX3N5c3RlbT1jeWd3aW4KK2ZpCisKKyMjIyMgU29ydCBvdXQgaW5pdCBzY3JpcHRzCisKK2lmIHRlc3QgeCR3aXRoX2luaXRfc2NyaXB0cyA9IHg7IHRoZW4KKyAgICBjYXNlIHgkb3BlcmF0aW5nX3N5c3RlbSBpbgorICAgICAgICB4cmVkaGF0KQl3aXRoX2luaXRfc2NyaXB0cz1yZWRoYXQgOzsKKyAgICAgICAgeHNsYWNrd2FyZSkJd2l0aF9pbml0X3NjcmlwdHM9c2xhY2t3YXJlIDs7CisgICAgICAgIHhjeWd3aW4pCXdpdGhfaW5pdF9zY3JpcHRzPWN5Z3dpbiA7OworICAgICAgICAqKQkJCXdpdGhfaW5pdF9zY3JpcHRzPW5vbmUgOzsKKyAgICBlc2FjCitmaQorCitBTV9DT05ESVRJT05BTChEQlVTX0lOSVRfU0NSSVBUU19SRURfSEFULCB0ZXN0IHgkd2l0aF9pbml0X3NjcmlwdHMgPSB4cmVkaGF0KQorQU1fQ09ORElUSU9OQUwoREJVU19JTklUX1NDUklQVFNfU0xBQ0tXQVJFLCB0ZXN0IHgkd2l0aF9pbml0X3NjcmlwdHMgPSB4c2xhY2t3YXJlKQorQU1fQ09ORElUSU9OQUwoREJVU19JTklUX1NDUklQVFNfQ1lHV0lOLCB0ZXN0IHgkd2l0aF9pbml0X3NjcmlwdHMgPSB4Y3lnd2luKQogCiAjIyMjIyBzeXN0ZW1kIHVuaXQgZmlsZXMKIEFDX0FSR19XSVRIKFtzeXN0ZW1kc3lzdGVtdW5pdGRpcl0sCkBAIC0xNDM4LDkgKzE1OTUsNiBAQAogaWYgISB0ZXN0IC16ICIkd2l0aF9zeXN0ZW1fc29ja2V0IjsgdGhlbgogICAgREJVU19TWVNURU1fU09DS0VUPSR3aXRoX3N5c3RlbV9zb2NrZXQKIGVsc2UKLSAgICMgV2UgZG9uJ3QgdXNlIHJ1bnN0YXRlZGlyIGZvciB0aGlzICh5ZXQ/KSwgYmVjYXVzZSAvdmFyL3J1biBoYXMgYmVlbiB0aGUKLSAgICMgaW50ZXJvcGVyYWJsZSBzeXN0ZW0gYnVzIHNvY2tldCBmb3IgMTArIHllYXJzLgotICAgIyBTZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNjI4CiAgICBEQlVTX1NZU1RFTV9TT0NLRVQ9JHtFWFBBTkRFRF9MT0NBTFNUQVRFRElSfS9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldAogZmkKIApAQCAtMTQ2NSwxNyArMTYxOSwyMyBAQAogIyMjIyBTZXQgdXAgdGhlIHBpZCBmaWxlCiBpZiAhIHRlc3QgLXogIiR3aXRoX3N5c3RlbV9waWRfZmlsZSI7IHRoZW4KICAgIERCVVNfU1lTVEVNX1BJRF9GSUxFPSR3aXRoX3N5c3RlbV9waWRfZmlsZQorZWxpZiB0ZXN0IHgkd2l0aF9pbml0X3NjcmlwdHMgPSB4cmVkaGF0IDsgdGhlbgorICAgREJVU19TWVNURU1fUElEX0ZJTEU9JHtFWFBBTkRFRF9MT0NBTFNUQVRFRElSfS9ydW4vbWVzc2FnZWJ1cy5waWQKIGVsc2UKLSAgIERCVVNfU1lTVEVNX1BJRF9GSUxFPSIke0VYUEFOREVEX1JVTlNUQVRFRElSfS9kYnVzL3BpZCIKKyAgIERCVVNfU1lTVEVNX1BJRF9GSUxFPSR7RVhQQU5ERURfTE9DQUxTVEFURURJUn0vcnVuL2RidXMvcGlkCiBmaQogCiBBQ19TVUJTVChEQlVTX1NZU1RFTV9QSURfRklMRSkKIAogIyMjIyBEaXJlY3RvcnkgdG8gY2hlY2sgZm9yIGNvbnNvbGUgb3duZXJzaGlwCi1BU19JRihbdGVzdCAtbiAiJHdpdGhfY29uc29sZV9hdXRoX2RpciIgJiYgdGVzdCAieCR3aXRoX2NvbnNvbGVfYXV0aF9kaXIiICE9IHhub10sCi0gICAgW0FDX0RFRklORV9VTlFVT1RFRChbREJVU19DT05TT0xFX0FVVEhfRElSXSwgWyIkd2l0aF9jb25zb2xlX2F1dGhfZGlyIl0sCi0gICAgICAgIFtEaXJlY3RvcnkgdG8gY2hlY2sgZm9yIHBhbV9jb25zb2xlL3BhbV9mb3JlZ3JvdW5kIGZsYWcgZmlsZXMsIG9yIHVuZGVmaW5lZF0pXSwKLSAgICBbd2l0aF9jb25zb2xlX2F1dGhfZGlyPV0pCitpZiAhIHRlc3QgLXogIiR3aXRoX2NvbnNvbGVfYXV0aF9kaXIiOyB0aGVuCisgICBEQlVTX0NPTlNPTEVfQVVUSF9ESVI9JHdpdGhfY29uc29sZV9hdXRoX2RpcgorZWxzZQorICAgREJVU19DT05TT0xFX0FVVEhfRElSPS92YXIvcnVuL2NvbnNvbGUvCitmaQorCitBQ19TVUJTVChEQlVTX0NPTlNPTEVfQVVUSF9ESVIpCitBQ19ERUZJTkVfVU5RVU9URUQoREJVU19DT05TT0xFX0FVVEhfRElSLCAiJERCVVNfQ09OU09MRV9BVVRIX0RJUiIsIFtEaXJlY3RvcnkgdG8gY2hlY2sgZm9yIGNvbnNvbGUgb3duZXJoaXBdKQogCiAjIyMjIEZpbGUgdG8gY2hlY2sgZm9yIGNvbnNvbGUgb3duZXJzaGlwCiBpZiB0ZXN0IHgkaGF2ZV9jb25zb2xlX293bmVyX2ZpbGUgPSB4eWVzOyB0aGVuCkBAIC0xNTIwLDcgKzE2ODAsNyBAQAogIyMjIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCBkYnVzLWRhZW1vbgogaWYgdGVzdCAteiAiJHdpdGhfZGJ1c19kYWVtb25kaXIiIDsgdGhlbgogICAgIERCVVNfREFFTU9ORElSPSRFWFBBTkRFRF9CSU5ESVIKLSAgICBkYnVzX2RhZW1vbmRpcj0nJHtiaW5kaXJ9JworICAgIGRidXNfZGFlbW9uZGlyPSckYmluZGlyJwogZWxzZQogICAgIERCVVNfREFFTU9ORElSPSR3aXRoX2RidXNfZGFlbW9uZGlyCiAgICAgZGJ1c19kYWVtb25kaXI9JHdpdGhfZGJ1c19kYWVtb25kaXIKQEAgLTE1MzksNDUgKzE2OTksNiBAQAogQUNfU1VCU1QoREJVU19MSUJFWEVDRElSKQogQUNfREVGSU5FX1VOUVVPVEVEKERCVVNfTElCRVhFQ0RJUiwiJERCVVNfTElCRVhFQ0RJUiIsIFtEaXJlY3RvcnkgZm9yIGluc3RhbGxpbmcgdGhlIGxpYmV4ZWMgYmluYXJpZXNdKQogCi1BQ19BUkdfRU5BQkxFKFtyZWxvY2F0aW9uXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yZWxvY2F0aW9uWz15ZXMvbm8vYXV0b11dLAotICAgIFtNYWtlIHBrZy1jb25maWcgbWV0YWRhdGEgcmVsb2NhdGFibGUgW2RlZmF1bHQ9YXV0b11dKV0sCi0gIFtdLCBbZW5hYmxlX3JlbG9jYXRpb249YXV0b10pCi0KLWNhbl9yZWxvY2F0ZT15ZXMKLQotQVNfQ0FTRShbIiR7ZXhlY19wcmVmaXh9Il0sCi0gIFsnTk9ORSd8JyR7cHJlZml4fSddLAotICAgIFs6XSwKLSAgWypdLAotICAgIFtjYW5fcmVsb2NhdGU9bm9dKQotCi1BU19DQVNFKFsiJHtsaWJkaXJ9Il0sCi0gIFsnJHtwcmVmaXh9L2xpYid8JyR7cHJlZml4fS9saWI2NCd8JyR7ZXhlY19wcmVmaXh9L2xpYid8JyR7ZXhlY19wcmVmaXh9L2xpYjY0J10sCi0gICAgWzpdLAotICBbKl0sCi0gICAgW2Nhbl9yZWxvY2F0ZT1ub10pCi0KLSMgSWYgdGhlIHVzZXIgc2FpZCAtLWVuYWJsZS1yZWxvY2F0aW9uIGJ1dCB3ZSBjYW4ndCBkbyBpdCwgZXJyb3Igb3V0Ci1BU19JRihbdGVzdCAieCRjYW5fcmVsb2NhdGUiID0geG5vICYmIHRlc3QgIngkZW5hYmxlX3JlbG9jYXRpb24iID0geHllc10sCi0gIFtBQ19NU0dfRVJST1IoW1JlbG9jYXRhYmxlIHBrZy1jb25maWcgbWV0YWRhdGEgcmVxdWlyZXMgLS1leGVjLXByZWZpeD0nXCR7cHJlZml4fScgYW5kIHRoZSBkZWZhdWx0IGxpYmRpcl0pXSkKLQotIyBCeSBkZWZhdWx0LCBvbiBXaW5kb3dzIHdlIGFyZSByZWxvY2F0YWJsZSBpZiBwb3NzaWJsZQotQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3JlbG9jYXRpb24iID0geGF1dG8gJiYgdGVzdCAieCRkYnVzX3dpbiIgPSB4eWVzXSwKLSAgW2VuYWJsZV9yZWxvY2F0aW9uPSIkY2FuX3JlbG9jYXRlIl0pCi0KLSMgQnkgZGVmYXVsdCwgb24gbm9uLVdpbmRvd3Mgd2UgYXJlIG5vdCByZWxvY2F0YWJsZSBiZWNhdXNlIGl0IGNhbiBpbnRlcmZlcmUKLSMgd2l0aCBwa2ctY29uZmlnJ3MgYWJpbGl0eSB0byBmaWx0ZXIgb3V0IHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLAotIyByZXN1bHRpbmcgaW4gbGlua2luZyBhbiBvdXRkYXRlZCBzeXN0ZW0td2lkZSBsaWJyYXJ5IGluIHByZWZlcmVuY2UgdG8gYQotIyBuZXdlciB2ZXJzaW9uIGluc3RhbGxlZCBlbHNld2hlcmUKLUFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9yZWxvY2F0aW9uIiA9IHhhdXRvXSwKLSAgW2VuYWJsZV9yZWxvY2F0aW9uPSJubyJdKQotCi0KLUFTX0lGKFt0ZXN0ICJ4JGVuYWJsZV9yZWxvY2F0aW9uIiA9IHh5ZXNdLAotICBbQUNfU1VCU1QoW3BrZ2NvbmZpZ19wcmVmaXhdLCBbJyR7cGNmaWxlZGlyfS8uLi8uLi8nXSldLAotICBbQUNfU1VCU1QoW3BrZ2NvbmZpZ19wcmVmaXhdLCBbJyR7b3JpZ2luYWxfcHJlZml4fSddKV0pCi0KICMjIyMgRGlyZWN0b3J5IHRvIHNvdXJjZSBzeXNjb25mZGlyIGNvbmZpZ3VyYXRpb24gZnJvbQogCiAjIE9uIFdpbmRvd3MgdGhpcyBpcyByZWxhdGl2ZSB0byB3aGVyZSB3ZSBwdXQgdGhlIGJ1cyBzZXR1cCwgaW4KQEAgLTE2MDgsOSArMTcyOSwxNCBAQAogQUNfU1VCU1QoW0RCVVNfVEVTVF9EQVRBXSkKIEFDX1NVQlNUKFtEQlVTX1RFU1RfRVhFQ10pCiAKK0FDX0RFRklORV9VTlFVT1RFRChbREJVU19URVNUX0VYRUNdLCBbIiREQlVTX1RFU1RfRVhFQyJdLAorICAgICAgICAgICAgICAgICAgIFtGdWxsIHBhdGggdG8gdGhlIGRhZW1vbiBpbiB0aGUgYnVpbGRkaXJdKQogQUNfREVGSU5FX1VOUVVPVEVEKFtEQlVTX0VYRUVYVF0sIFsiJEVYRUVYVCJdLAogICAgICAgICAgICAgICAgICAgIFtFeHRlbnNpb24gZm9yIGV4ZWN1dGFibGVzLCB0eXBpY2FsbHkgZW1wdHkgb3IgLmV4ZV0pCiAKK0FDX0RFRklORV9VTlFVT1RFRChURVNUX0JVU19MQVVOQ0hfQklOQVJZLCBbIiREQlVTX1BXRC90b29scy9kYnVzLWxhdW5jaCRFWEVFWFQiXSwKKyAgICAgICAgICAgICAgICAgICBbRnVsbCBwYXRoIHRvIHRoZSBkYnVzLWxhdW5jaCBpbiB0aGUgYnVpbGRkaXJdKQorCiAjIyBFeHBvcnQgdGhlIG5vbi1zZXR1aWQgZXh0ZXJuYWwgaGVscGVyCiBURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZPSIkREJVU19QV0QvYnVzL2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXItdGVzdCRFWEVFWFQiCiBBQ19TVUJTVChURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZKQpAQCAtMTc1MywxMyArMTg3OSwxNCBAQAogYnVzL2xlZ2FjeS1jb25maWcvc2Vzc2lvbi5jb25mCiBidXMvZXhhbXBsZS1zeXN0ZW0tZW5hYmxlLXN0YXRzLmNvbmYKIGJ1cy9leGFtcGxlLXNlc3Npb24tZGlzYWJsZS1zdGF0cy5jb25mCitidXMvbWVzc2FnZWJ1cworYnVzL21lc3NhZ2VidXMtY29uZmlnCiBidXMvb3JnLmZyZWVkZXNrdG9wLmRidXMtc2Vzc2lvbi5wbGlzdAorYnVzL3JjLm1lc3NhZ2VidXMKIGJ1cy9kYnVzLnNlcnZpY2UKIGJ1cy9kYnVzLnNvY2tldAogYnVzL3N5c3RlbWQtdXNlci9kYnVzLnNlcnZpY2UKIGJ1cy9zeXN0ZW1kLXVzZXIvZGJ1cy5zb2NrZXQKLWJ1cy9zeXN1c2Vycy5kL2RidXMuY29uZgotYnVzL3RtcGZpbGVzLmQvZGJ1cy5jb25mCiBNYWtlZmlsZQogZGJ1cy9NYWtlZmlsZQogYnVzL01ha2VmaWxlCkBAIC0xNzc4LDggKzE5MDUsNiBAQAogZG9jL2RidXMtdXVpZGdlbi4xLnhtbAogZGJ1cy0xLnBjCiBkYnVzLTEtdW5pbnN0YWxsZWQucGMKLWNtYWtlL0RCdXMxQ29uZmlnLmNtYWtlOmNtYWtlL0RCdXMxQ29uZmlnLnBrZ2NvbmZpZy5pbgotY21ha2UvREJ1czFDb25maWdWZXJzaW9uLmNtYWtlCiBdKQogQUNfT1VUUFVUCiAKQEAgLTE3OTUsMTQgKzE5MjAsMTIgQEAKICAgICAgICAgYmluZGlyOiAgICAgICAgICAgICAgICAgICAke0VYUEFOREVEX0JJTkRJUn0KICAgICAgICAgc3lzY29uZmRpcjogICAgICAgICAgICAgICAke0VYUEFOREVEX1NZU0NPTkZESVJ9CiAgICAgICAgIGxvY2Fsc3RhdGVkaXI6ICAgICAgICAgICAgJHtFWFBBTkRFRF9MT0NBTFNUQVRFRElSfQotICAgICAgICBydW5zdGF0ZWRpcjogICAgICAgICAgICAgICR7RVhQQU5ERURfUlVOU1RBVEVESVJ9CiAJZGF0YWRpcjogICAgICAgICAgICAgICAgICAke0VYUEFOREVEX0RBVEFESVJ9CiAJc291cmNlIGNvZGUgbG9jYXRpb246CSAgJHtzcmNkaXJ9CiAJY29tcGlsZXI6CQkgICR7Q0N9CiAJY2ZsYWdzOgkJICAgICAgICAgICR7Q0ZMQUdTfQogCWNwcGZsYWdzOgkJICAke0NQUEZMQUdTfQogCWN4eGZsYWdzOgkJICAke0NYWEZMQUdTfQotCWxkZmxhZ3M6CQkgICR7TERGTEFHU30KIAk2NC1iaXQgaW50OgkJICAke0RCVVNfSU5UNjRfVFlQRX0KIAkzMi1iaXQgaW50OgkJICAke0RCVVNfSU5UMzJfVFlQRX0KIAkxNi1iaXQgaW50OgkJICAke0RCVVNfSU5UMTZfVFlQRX0KQEAgLTE4MTMsNyArMTkzNiw3IEBACiAKIGVjaG8gIgogICAgICAgICBSZWJ1aWxkaW5nIGdlbmVyYXRlZCBmaWxlczogJHtVU0VfTUFJTlRBSU5FUl9NT0RFfQotICAgICAgICBnY2MgY292ZXJhZ2UgcHJvZmlsaW5nOiAgICR7ZW5hYmxlX2NvZGVfY292ZXJhZ2V9CisgICAgICAgIGdjYyBjb3ZlcmFnZSBwcm9maWxpbmc6ICAgJHtlbmFibGVfY29tcGlsZXJfY292ZXJhZ2V9CiAgICAgICAgIEJ1aWxkaW5nIGVtYmVkZGVkIHRlc3RzOiAgJHtlbmFibGVfZW1iZWRkZWRfdGVzdHN9CiAgICAgICAgIEJ1aWxkaW5nIG1vZHVsYXIgdGVzdHM6ICAgJHtlbmFibGVfbW9kdWxhcl90ZXN0c30KICAgICAgICAgICAgIC0gd2l0aCBHTGliOiAgICAgICAgICAke3dpdGhfZ2xpYn0KQEAgLTE4MzIsMTIgKzE5NTUsMTQgQEAKICAgICAgICAgQnVpbGRpbmcgRHVja3R5cGUgZG9jczogICAke2VuYWJsZV9kdWNrdHlwZV9kb2NzfQogICAgICAgICBCdWlsZGluZyBYTUwgZG9jczogICAgICAgICR7ZW5hYmxlX3htbF9kb2NzfQogICAgICAgICBCdWlsZGluZyBsYXVuY2hkIHN1cHBvcnQ6ICR7aGF2ZV9sYXVuY2hkfQorICAgICAgICBJbml0IHNjcmlwdHMgc3R5bGU6ICAgICAgICR7d2l0aF9pbml0X3NjcmlwdHN9CisgICAgICAgIEFic3RyYWN0IHNvY2tldCBuYW1lczogICAgJHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHN9CiAgICAgICAgIFN5c3RlbSBidXMgc29ja2V0OiAgICAgICAgJHtEQlVTX1NZU1RFTV9TT0NLRVR9CiAgICAgICAgIFN5c3RlbSBidXMgYWRkcmVzczogICAgICAgJHtEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTfQogICAgICAgICBTeXN0ZW0gYnVzIFBJRCBmaWxlOiAgICAgICR7REJVU19TWVNURU1fUElEX0ZJTEV9CiAgICAgICAgIFNlc3Npb24gYnVzIGxpc3RlbnMgb246ICAgJHtEQlVTX1NFU1NJT05fQlVTX0xJU1RFTl9BRERSRVNTfQogICAgICAgICBTZXNzaW9uIGNsaWVudHMgY29ubmVjdCB0bzogJHtEQlVTX1NFU1NJT05fQlVTX0NPTk5FQ1RfQUREUkVTU30KLSAgICAgICAgcGFtX2NvbnNvbGUgYXV0aCBkaXI6ICAgICAke3dpdGhfY29uc29sZV9hdXRoX2RpcjotKG5vbmUpfQorICAgICAgICBDb25zb2xlIGF1dGggZGlyOiAgICAgICAgICR7REJVU19DT05TT0xFX0FVVEhfRElSfQogICAgICAgICBDb25zb2xlIG93bmVyIGZpbGU6ICAgICAgICR7aGF2ZV9jb25zb2xlX293bmVyX2ZpbGV9CiAgICAgICAgIENvbnNvbGUgb3duZXIgZmlsZSBwYXRoOiAgJHtEQlVTX0NPTlNPTEVfT1dORVJfRklMRX0KIAlTeXN0ZW0gYnVzIHVzZXI6ICAgICAgICAgICR7REJVU19VU0VSfQpAQCAtMTg1NSw5ICsxOTgwLDkgQEAKIGlmIHRlc3QgeCRlbmFibGVfZW1iZWRkZWRfdGVzdHMgPSB4eWVzIC1hIHgkZW5hYmxlX2Fzc2VydHMgPSB4bm87IHRoZW4KICAgICAgICAgZWNobyAiTk9URTogYnVpbGRpbmcgd2l0aCBlbWJlZGRlZCB0ZXN0cyBidXQgd2l0aG91dCBhc3NlcnRpb25zIG1lYW5zIHRlc3RzIG1heSBub3QgcHJvcGVybHkgcmVwb3J0IGZhaWx1cmVzICh0aGlzIGNvbmZpZ3VyYXRpb24gaXMgb25seSB1c2VmdWwgd2hlbiBkb2luZyBzb21ldGhpbmcgbGlrZSBwcm9maWxpbmcgdGhlIHRlc3RzKSIKIGZpCi1BU19JRihbdGVzdCB4JGVuYWJsZV9jb2RlX2NvdmVyYWdlID0geHllc10sWwotICAgIEFDX01TR19XQVJOKFtCdWlsZGluZyB3aXRoIGNvdmVyYWdlIHByb2ZpbGluZyBpcyBkZWZpbml0ZWx5IGZvciBkZXZlbG9wZXJzIG9ubHkuXSkKLSAgXSkKK2lmIHRlc3QgeCRlbmFibGVfY29tcGlsZXJfY292ZXJhZ2UgPSB4eWVzOyB0aGVuCisgICAgICAgIGVjaG8gIk5PVEU6IGJ1aWxkaW5nIHdpdGggY292ZXJhZ2UgcHJvZmlsaW5nIGlzIGRlZmluaXRlbHkgZm9yIGRldmVsb3BlcnMgb25seS4iCitmaQogaWYgdGVzdCB4JGVuYWJsZV92ZXJib3NlX21vZGUgPSB4eWVzOyB0aGVuCiAgICAgICAgIGVjaG8gIk5PVEU6IGJ1aWxkaW5nIHdpdGggdmVyYm9zZSBtb2RlIGluY3JlYXNlcyBsaWJyYXJ5IHNpemUsIG1heSBzbGlnaHRseSBpbmNyZWFzZSBzZWN1cml0eSByaXNrLCBhbmQgZGVjcmVhc2VzIHBlcmZvcm1hbmNlLiIKIGZpCmRpZmYgLS1naXQgYS9kYnVzLTEucGMuaW4gYi9kYnVzLTEucGMuaW4KaW5kZXggMzU4MWJlNi4uZjkzZDE1NiAxMDA2NDQKLS0tIGEvZGJ1cy0xLnBjLmluCisrKyBiL2RidXMtMS5wYy5pbgpAQCAtMSw1ICsxLDQgQEAKLW9yaWdpbmFsX3ByZWZpeD1AcHJlZml4QAotcHJlZml4PUBwa2djb25maWdfcHJlZml4QAorcHJlZml4PUBwcmVmaXhACiBleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBiaW5kaXI9QGJpbmRpckAKIGxpYmRpcj1AbGliZGlyQApkaWZmIC0tZ2l0IGEvZGJ1cy8uZ2l0aWdub3JlIGIvZGJ1cy8uZ2l0aWdub3JlCmluZGV4IGZkOTFjY2UuLmU0OTVjYjMgMTAwNjQ0Ci0tLSBhL2RidXMvLmdpdGlnbm9yZQorKysgYi9kYnVzLy5naXRpZ25vcmUKQEAgLTQsMTIgKzQsMTEgQEAKIE1ha2VmaWxlLmluCiAqLmxvCiAqLmxhCi10ZXN0LWRidXMKK2RidXMtdGVzdAogKi5iYgogKi5iYmcKICouZ2NvdgogKi5kYQotZGJ1cy1hcmNoLWRlcHMuaAogLmRidXMta2V5cmluZ3MKIGRidXMtZ2xpYi1lcnJvci1lbnVtLmgKICouZ2NubwpkaWZmIC0tZ2l0IGEvZGJ1cy9BbmRyb2lkLm1rIGIvZGJ1cy9BbmRyb2lkLm1rCmluZGV4IGM4ZmI4YjYuLjFlN2VkOGEgMTAwNjQ0Ci0tLSBhL2RidXMvQW5kcm9pZC5taworKysgYi9kYnVzL0FuZHJvaWQubWsKQEAgLTI5LDcgKzI5LDYgQEAKICAgICAgICAgZGJ1cy1tZW1vcnkuYyBcCiAgICAgICAgIGRidXMtbWVtcG9vbC5jIFwKICAgICAgICAgZGJ1cy1tZXNzYWdlLmMgXAotICAgICAgICBkYnVzLW1lc3NhZ2UtdXRpbC5jIFwKICAgICAgICAgZGJ1cy1taXNjLmMgXAogICAgICAgICBkYnVzLW5vbmNlLmMgXAogICAgICAgICBkYnVzLW9iamVjdC10cmVlLmMgXApkaWZmIC0tZ2l0IGEvZGJ1cy9CVUlMRC5nbiBiL2RidXMvQlVJTEQuZ24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMTE4MmYuLjAwMDAwMDAKLS0tIGEvZGJ1cy9CVUlMRC5nbgorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLQotaW1wb3J0KCIvL2Nocm9tZWNhc3QvaW50ZXJuYWwvY2hyb21lY2FzdF9pbnRlcm5hbC5nbmkiKQotCi1zb3VyY2Vfc2V0KCJkYnVzIikgewotICBjZmxhZ3NfYyA9IFsKLSAgICAiLVduby11bnJlYWNoYWJsZS1jb2RlIiwKLSAgICAiLVduby1nbnUtZm9sZGluZy1jb25zdGFudCIsCi0gIF0KLQotICBkZWZpbmVzID0gWwotICAgICJEQlVTX0NPTVBJTEFUSU9OIiwKLSAgICAiSEFWRV9NT05PVE9OSUNfQ0xPQ0siLAotICAgICJEQlVTX01BQ0hJTkVfVVVJRF9GSUxFPVwiL2V0Yy9tYWNoaW5lLWlkXCIiLAotICAgICJEQlVTX1NZU1RFTV9DT05GSUdfRklMRT1cIi9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mXCIiLAotICAgICJEQlVTX1NFU1NJT05fQ09ORklHX0ZJTEU9XCIvZXRjL2RidXMtMS9zZXNzaW9uLmNvbmZcIiIKLSAgXQotCi0gIHNvdXJjZXMgPSBbCi0gICAgImRidXMtYWRkcmVzcy5jIiwKLSAgICAiZGJ1cy1hc3YtdXRpbC5jIiwKLSAgICAiZGJ1cy1hdXRoLmMiLAotICAgICJkYnVzLWJ1cy5jIiwKLSAgICAiZGJ1cy1jb25uZWN0aW9uLmMiLAotICAgICJkYnVzLWNyZWRlbnRpYWxzLmMiLAotICAgICJkYnVzLWRhdGFzbG90LmMiLAotICAgICJkYnVzLWVycm9ycy5jIiwKLSAgICAiZGJ1cy1maWxlLmMiLAotICAgICJkYnVzLWZpbGUtdW5peC5jIiwKLSAgICAiZGJ1cy1oYXNoLmMiLAotICAgICJkYnVzLWludGVybmFscy5jIiwKLSAgICAiZGJ1cy1rZXlyaW5nLmMiLAotICAgICJkYnVzLWxpc3QuYyIsCi0gICAgImRidXMtbWFpbmxvb3AuYyIsCi0gICAgImRidXMtbWFyc2hhbC1iYXNpYy5jIiwKLSAgICAiZGJ1cy1tYXJzaGFsLWJ5dGVzd2FwLmMiLAotICAgICJkYnVzLW1hcnNoYWwtaGVhZGVyLmMiLAotICAgICJkYnVzLW1hcnNoYWwtcmVjdXJzaXZlLmMiLAotICAgICJkYnVzLW1hcnNoYWwtdmFsaWRhdGUuYyIsCi0gICAgImRidXMtbWVtb3J5LmMiLAotICAgICJkYnVzLW1lbXBvb2wuYyIsCi0gICAgImRidXMtbWVzc2FnZS5jIiwKLSAgICAiZGJ1cy1tZXNzYWdlLXV0aWwuYyIsCi0gICAgImRidXMtbWlzYy5jIiwKLSAgICAiZGJ1cy1ub25jZS5jIiwKLSAgICAiZGJ1cy1vYmplY3QtdHJlZS5jIiwKLSAgICAiZGJ1cy1wZW5kaW5nLWNhbGwuYyIsCi0gICAgImRidXMtcGlwZS5jIiwKLSAgICAiZGJ1cy1waXBlLXVuaXguYyIsCi0gICAgImRidXMtcmVzb3VyY2VzLmMiLAotICAgICJkYnVzLXNlcnZlci5jIiwKLSAgICAiZGJ1cy1zZXJ2ZXItZGVidWctcGlwZS5jIiwKLSAgICAiZGJ1cy1zZXJ2ZXItbGF1bmNoZC5jIiwKLSAgICAiZGJ1cy1zZXJ2ZXItc29ja2V0LmMiLAotICAgICJkYnVzLXNlcnZlci11bml4LmMiLAotICAgICJkYnVzLXNoYS5jIiwKLSAgICAiZGJ1cy1zaGVsbC5jIiwKLSAgICAiZGJ1cy1zaWduYXR1cmUuYyIsCi0gICAgImRidXMtc29ja2V0LXNldC5jIiwKLSAgICAiZGJ1cy1zb2NrZXQtc2V0LWVwb2xsLmMiLAotICAgICJkYnVzLXNvY2tldC1zZXQtcG9sbC5jIiwKLSAgICAiZGJ1cy1zcGF3bi5jIiwKLSAgICAiZGJ1cy1zdHJpbmcuYyIsCi0gICAgImRidXMtc3RyaW5nLXV0aWwuYyIsCi0gICAgImRidXMtc3ludGF4LmMiLAotICAgICJkYnVzLXN5c2RlcHMuYyIsCi0gICAgImRidXMtc3lzZGVwcy1wdGhyZWFkLmMiLAotICAgICJkYnVzLXN5c2RlcHMtdW5peC5jIiwKLSAgICAiZGJ1cy1zeXNkZXBzLXV0aWwuYyIsCi0gICAgImRidXMtc3lzZGVwcy11dGlsLXVuaXguYyIsCi0gICAgImRidXMtdGhyZWFkcy5jIiwKLSAgICAiZGJ1cy10aW1lb3V0LmMiLAotICAgICJkYnVzLXRyYW5zcG9ydC5jIiwKLSAgICAiZGJ1cy10cmFuc3BvcnQtc29ja2V0LmMiLAotICAgICJkYnVzLXRyYW5zcG9ydC11bml4LmMiLAotICAgICJkYnVzLXVzZXJkYi5jIiwKLSAgICAiZGJ1cy11c2VyZGItdXRpbC5jIiwKLSAgICAiZGJ1cy11dWlkZ2VuLmMiLAotICAgICJkYnVzLXdhdGNoLmMiLAotICBdCi19CmRpZmYgLS1naXQgYS9kYnVzL01ha2VmaWxlLmFtIGIvZGJ1cy9NYWtlZmlsZS5hbQppbmRleCBlYzhlMmE1Li5hN2IzNDkxIDEwMDY0NAotLS0gYS9kYnVzL01ha2VmaWxlLmFtCisrKyBiL2RidXMvTWFrZWZpbGUuYW0KQEAgLTIsNyArMiw2IEBACiBkYnVzZGF0YWRpcj0kKGRhdGFkaXIpL2RidXMtMQogCiBBTV9DUFBGTEFHUyA9IFwKLQkkKENPREVfQ09WRVJBR0VfQ1BQRkxBR1MpIFwKIAktSSQodG9wX2J1aWxkZGlyKSBcCiAJLUkkKHRvcF9zcmNkaXIpIFwKIAkkKERCVVNfU1RBVElDX0JVSUxEX0NQUEZMQUdTKSBcCkBAIC0xMiwxMiArMTEsOSBAQAogCS1EREJVU19NQUNISU5FX1VVSURfRklMRT1cIiIkKGxvY2Fsc3RhdGVkaXIpL2xpYi9kYnVzL21hY2hpbmUtaWQiXCIgXAogCS1EREJVU19TWVNURU1fQ09ORklHX0ZJTEU9XCIiJChkYnVzZGF0YWRpcikvc3lzdGVtLmNvbmYiXCIgXAogCS1EREJVU19TRVNTSU9OX0NPTkZJR19GSUxFPVwiIiQoZGJ1c2RhdGFkaXIpL3Nlc3Npb24uY29uZiJcIiBcCi0JLUREQlVTX1JVTlNUQVRFRElSPVwiIiQocnVuc3RhdGVkaXIpIlwiIFwKIAkkKE5VTEwpCiAKLUFNX0NGTEFHUyA9IFwKLQkkKENPREVfQ09WRVJBR0VfQ0ZMQUdTKSBcCi0JJChOVUxMKQorQU1fQ0ZMQUdTID0KIAogaWYgSEFWRV9WSVNJQklMSVRZCiBpZiAhREJVU19XSU4KQEAgLTM3LDE4ICszMywzMCBAQAogCiBsaWJfTFRMSUJSQVJJRVM9bGliZGJ1cy0xLmxhCiAKLSMgSW5pdGlhbGl6ZSB0byBlbXB0eSBzbyB0aGF0IHdlIGNhbiBhcHBlbmQgbGF0ZXIKLW5vZGlzdF9saWJkYnVzXzFfbGFfU09VUkNFUyA9Ci0KICMKICMgRGVhbCB3aXRoIFczMiAuZGVmIGFuZCB2ZXJzaW9uLWluZm8ucmMgc3R1ZmYKICMKIGlmIERCVVNfV0lOCiAKLVNVRkZJWEVTID0gLnJjCitTVUZGSVhFUyA9IHJjCiAKLS5yYy5sbzoKLQkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9UkMgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKFJDKSAkPCAtbyAkQAorLnJjLm86CisJJChXSU5EUkVTKSAkPCAtbyAkQAorCitkYnVzX3JlcyA9IHZlcnNpb25pbmZvLm8KK2RidXNfcmVzX2xkZmxhZyA9IC1XbCwkKGRidXNfcmVzKQorbm9fdW5kZWZpbmVkID0gLW5vLXVuZGVmaW5lZAorZXhwb3J0X3N5bWJvbHMgPQorCitFWFRSQV9saWJkYnVzXzFfbGFfREVQRU5ERU5DSUVTID0gJChkYnVzX3JlcykKK2ludGxsaWJzID0KKworZWxzZQorZGJ1c19yZXMgPQorZGJ1c19yZXNfbGRmbGFnID0KK25vX3VuZGVmaW5lZCA9CisKK2ludGxsaWJzID0gQExUTElCSU5UTEAKIAogZW5kaWYKIApAQCAtNTksMTIgKzY3LDcgQEAKIGlmIERCVVNfV0lOCiBEQlVTX0xJQl9hcmNoX3NvdXJjZXMgPSAJCQlcCiAJZGJ1cy1zZXJ2ZXItd2luLmMgCQkJXAotCWRidXMtc2VydmVyLXdpbi5oCQkJXAotCSQoTlVMTCkKLQotbm9kaXN0X2xpYmRidXNfMV9sYV9TT1VSQ0VTICs9IFwKLQl2ZXJzaW9uaW5mby5yYyBcCi0JJChOVUxMKQorCWRidXMtc2VydmVyLXdpbi5oCiAKIGlmIERCVVNfV0lOQ0UKIHdpbmNlX3NvdXJjZSA9IGRidXMtc3lzZGVwcy13aW5jZS1nbHVlLmggZGJ1cy1zeXNkZXBzLXdpbmNlLWdsdWUuYwpAQCAtMjY1LDEwICsyNjgsNiBAQAogCWRidXMtdGVzdC5jCQkJCVwKIAlkYnVzLXRlc3QuaAogCi1pZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwotREJVU19VVElMX1NPVVJDRVMgKz0gZGJ1cy1zcGF3bi10ZXN0LmMKLWVuZGlmCi0KIGxpYmRidXNfMV9sYV9TT1VSQ0VTPQkJCQlcCiAJJChEQlVTX0xJQl9TT1VSQ0VTKQkJCVwKIAkkKERCVVNfU0hBUkVEX1NPVVJDRVMpCkBAIC0zMDMsMTAgKzMwMiw2IEBACiBsaWJkYnVzX2ludGVybmFsX2xhX0xJQkFERD0kKExJQkRCVVNfTElCUykgbGliZGJ1cy0xLmxhCiAKIGlmIERCVVNfV0lOCi1BTV9DWFhGTEFHUyA9IFwKLQkkKENPREVfQ09WRVJBR0VfQ1hYRkxBR1MpIFwKLQkkKE5VTEwpCi0KICMgVGhpcyBtdXN0IGJlIGEgc2VwYXJhdGUgY29udmVuaWVuY2UgbGlicmFyeSwgb3RoZXJ3aXNlIGxpYnRvb2wgbm90aWNlcwogIyB0aGF0IGxpYmRidXMtMSBtaWdodCBjb250YWluIEMrKywgbGlua3MgaXQgd2l0aCBnKysgYW5kIGxpbmtzIGluIGxpYnN0ZGMrKywKICMgZXZlbiBvbiBVbml4IHdoZXJlIGluIGZhY3QgaXQgZG9lc24ndCBjb250YWluIGFueSBDKysuIEZvciBXaW5kb3dzLCB3aGVyZQpAQCAtMzI4LDggKzMyMyw2IEBACiAKIHRlc3RfZGJ1c19MREFERCA9IGxpYmRidXMtaW50ZXJuYWwubGEKIAotIyBBZGQgcnVsZXMgZm9yIGNvZGUtY292ZXJhZ2UgdGVzdGluZywgYXMgZGVmaW5lZCBieSBBWF9DT0RFX0NPVkVSQUdFCi1pbmNsdWRlICQodG9wX3NyY2RpcikvYW1pbmNsdWRlX3N0YXRpYy5hbQotCisjIyBtb3AgdXAgdGhlIGdjb3YgZmlsZXMKIGNsZWFuLWxvY2FsOgotCSQoQU1fVl9hdClybSAtZnIgLi8uZGJ1cy1rZXlyaW5ncworCS9iaW4vcm0gKi5iYiAqLmJiZyAqLmRhICouZ2NvdiAubGlicy8qLmRhIC5saWJzLyouYmJnIHx8IHRydWUKZGlmZiAtLWdpdCBhL2RidXMvVmVyc2lvbiBiL2RidXMvVmVyc2lvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI4YmMzZS4uMDAwMDAwMAotLS0gYS9kYnVzL1ZlcnNpb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1MSUJEQlVTXzFfMyB7Ci0gIGdsb2JhbDoKLSAgICBkYnVzXyo7Ci0gIGxvY2FsOgotICAgICo7Ci19OwotTElCREJVU19QUklWQVRFXzEuMTIuMjAgewotICBnbG9iYWw6Ci0gICAgX2RidXNfKjsKLX07CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtYWRkcmVzcy5jIGIvZGJ1cy9kYnVzLWFkZHJlc3MuYwppbmRleCA2NmIyNmQ1Li5jNGNmYmJlIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtYWRkcmVzcy5jCisrKyBiL2RidXMvZGJ1cy1hZGRyZXNzLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogICByZXQgPSBGQUxTRTsKIAogICBvcmlnX2xlbiA9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChlc2NhcGVkKTsKLSAgcCA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfdWRhdGEgKHVuZXNjYXBlZCk7CisgIHAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHVuZXNjYXBlZCk7CiAgIGVuZCA9IHAgKyBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAodW5lc2NhcGVkKTsKICAgd2hpbGUgKHAgIT0gZW5kKQogICAgIHsKQEAgLTM1NCwxNCArMzU0LDE0IEBACiAgKiBpbiB0aGUgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IHNob3VsZCBiZSB0cmllZCBmaXJzdC4KICAqIAogICogQHBhcmFtIGFkZHJlc3MgdGhlIGFkZHJlc3MuCi0gKiBAcGFyYW0gZW50cnlfcmVzdWx0IHJldHVybiBsb2NhdGlvbiB0byBhbiBhcnJheSBvZiBlbnRyaWVzLgorICogQHBhcmFtIGVudHJ5IHJldHVybiBsb2NhdGlvbiB0byBhbiBhcnJheSBvZiBlbnRyaWVzLgogICogQHBhcmFtIGFycmF5X2xlbiByZXR1cm4gbG9jYXRpb24gZm9yIGFycmF5IGxlbmd0aC4KICAqIEBwYXJhbSBlcnJvciBhZGRyZXNzIHdoZXJlIGFuIGVycm9yIGNhbiBiZSByZXR1cm5lZC4KICAqIEByZXR1cm5zICNUUlVFIG9uIHN1Y2Nlc3MsICNGQUxTRSBvdGhlcndpc2UuCiAgKi8KIGRidXNfYm9vbF90CiBkYnVzX3BhcnNlX2FkZHJlc3MgKGNvbnN0IGNoYXIgICAgICAgICAqYWRkcmVzcywKLQkJICAgIERCdXNBZGRyZXNzRW50cnkgKioqZW50cnlfcmVzdWx0LAorCQkgICAgREJ1c0FkZHJlc3NFbnRyeSAqKiplbnRyeSwKIAkJICAgIGludCAgICAgICAgICAgICAgICAqYXJyYXlfbGVuLAogICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgKmVycm9yKQogewpAQCAtNTUzLDcgKzU1Myw3IEBACiAgICAgfQogCiAgIF9kYnVzX2xpc3RfY2xlYXIgKCZlbnRyaWVzKTsKLSAgKmVudHJ5X3Jlc3VsdCA9IGVudHJ5X2FycmF5OworICAqZW50cnkgPSBlbnRyeV9hcnJheTsKIAogICByZXR1cm4gVFJVRTsKIApAQCAtNzE3LDcgKzcxNyw3IEBACiAKICAgICAgIGlmIChzdHJjbXAgKGVzY2FwZWQsIHRlc3QtPmVzY2FwZWQpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRXNjYXBlZCAnJXMnIGFzICclcycgc2hvdWxkIGhhdmUgYmVlbiAnJXMnIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiRXNjYXBlZCAnJXMnIGFzICclcycgc2hvdWxkIGhhdmUgYmVlbiAnJXMnXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHRlc3QtPnVuZXNjYXBlZCwgZXNjYXBlZCwgdGVzdC0+ZXNjYXBlZCk7CiAgICAgICAgICAgZXhpdCAoMSk7CiAgICAgICAgIH0KQEAgLTcyNiw3ICs3MjYsNyBAQAogICAgICAgdW5lc2NhcGVkID0gZGJ1c19hZGRyZXNzX3VuZXNjYXBlX3ZhbHVlICh0ZXN0LT5lc2NhcGVkLCAmZXJyb3IpOwogICAgICAgaWYgKHVuZXNjYXBlZCA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byB1bmVzY2FwZSAnJXMnOiAlcyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byB1bmVzY2FwZSAnJXMnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LT5lc2NhcGVkLCBlcnJvci5tZXNzYWdlKTsKICAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICAgICAgZXhpdCAoMSk7CkBAIC03MzQsNyArNzM0LDcgQEAKIAogICAgICAgaWYgKHN0cmNtcCAodW5lc2NhcGVkLCB0ZXN0LT51bmVzY2FwZWQpICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiVW5lc2NhcGVkICclcycgYXMgJyVzJyBzaG91bGQgaGF2ZSBiZWVuICclcyciLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmVzY2FwZWQgJyVzJyBhcyAnJXMnIHNob3VsZCBoYXZlIGJlZW4gJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LT5lc2NhcGVkLCB1bmVzY2FwZWQsIHRlc3QtPnVuZXNjYXBlZCk7CiAgICAgICAgICAgZXhpdCAoMSk7CiAgICAgICAgIH0KQEAgLTc1Miw3ICs3NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpOwogICAgICAgaWYgKHVuZXNjYXBlZCAhPSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIlNob3VsZCBub3QgaGF2ZSBzdWNjZXNzZnVsbHkgdW5lc2NhcGVkICclcycgdG8gJyVzJyIsCisgICAgICAgICAgX2RidXNfd2FybiAoIlNob3VsZCBub3QgaGF2ZSBzdWNjZXNzZnVsbHkgdW5lc2NhcGVkICclcycgdG8gJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX2VzY2FwZWRfdmFsdWVzW2ldLCB1bmVzY2FwZWQpOwogICAgICAgICAgIGRidXNfZnJlZSAodW5lc2NhcGVkKTsKICAgICAgICAgICBleGl0ICgxKTsKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1hZGRyZXNzLmggYi9kYnVzL2RidXMtYWRkcmVzcy5oCmluZGV4IGZlZmIzMjAuLmU1MWVmMGEgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1hZGRyZXNzLmgKKysrIGIvZGJ1cy9kYnVzLWFkZHJlc3MuaApAQCAtNDIsNyArNDIsNyBAQAogCiBEQlVTX0VYUE9SVAogZGJ1c19ib29sX3QgZGJ1c19wYXJzZV9hZGRyZXNzICAgICAgICAgICAgKGNvbnN0IGNoYXIgICAgICAgICAqYWRkcmVzcywKLQkJCQkJICAgREJ1c0FkZHJlc3NFbnRyeSAqKiplbnRyeV9yZXN1bHQsCisJCQkJCSAgIERCdXNBZGRyZXNzRW50cnkgKioqZW50cnksCiAJCQkJCSAgIGludCAgICAgICAgICAgICAgICAqYXJyYXlfbGVuLAogCQkJCQkgICBEQnVzRXJyb3IgICAgICAgICAgKmVycm9yKTsKIERCVVNfRVhQT1JUCkBAIC01OSwyNSArNTksNiBAQAogY2hhciogZGJ1c19hZGRyZXNzX3VuZXNjYXBlX3ZhbHVlIChjb25zdCBjaGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAqZXJyb3IpOwogCi0vKioKLSAqIENsZWFyIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlciB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IG9mICNEQnVzQWRkcmVzc0VudHJ5LgotICogSWYgaXQgZG9lcyBub3QgY29udGFpbiAjTlVMTCwgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkKLSAqIHRoZXJlIGFyZSBmcmVlZCB3aXRoIGRidXNfYWRkcmVzc19lbnRyaWVzX2ZyZWUoKS4KLSAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZGJ1c19jbGVhcl9jb25uZWN0aW9uKCk6IHNlZSB0aGF0IGZ1bmN0aW9uCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIEBwYXJhbSBwb2ludGVyX3RvX2VudHJpZXMgQSBwb2ludGVyIHRvIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlci4KLSAqIHBvaW50ZXJfdG9fZW50cmllcyBtdXN0IG5vdCBiZSAjTlVMTCwgYnV0ICpwb2ludGVyX3RvX2VudHJpZXMKLSAqIG1heSBiZSAjTlVMTC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1kYnVzX2NsZWFyX2FkZHJlc3NfZW50cmllcyAoREJ1c0FkZHJlc3NFbnRyeSAqKipwb2ludGVyX3RvX2VudHJpZXMpCi17Ci0gIF9kYnVzX2NsZWFyX3BvaW50ZXJfaW1wbCAoREJ1c0FkZHJlc3NFbnRyeSAqLCBwb2ludGVyX3RvX2VudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19hZGRyZXNzX2VudHJpZXNfZnJlZSk7Ci19Ci0KIC8qKiBAfSAqLwogCiBEQlVTX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWFyY2gtZGVwcy5oIGIvZGJ1cy9kYnVzLWFyY2gtZGVwcy5oCmluZGV4IGRlOGM0ZTcuLjM2MWIwMmYgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1hcmNoLWRlcHMuaAorKysgYi9kYnVzL2RidXMtYXJjaC1kZXBzLmgKQEAgLTM2LDggKzM2LDggQEAKIF9EQlVTX0dOVUNfRVhURU5TSU9OIHR5cGVkZWYgbG9uZyBsb25nIGRidXNfaW50NjRfdDsKIF9EQlVTX0dOVUNfRVhURU5TSU9OIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGRidXNfdWludDY0X3Q7CiAKLSNkZWZpbmUgREJVU19JTlQ2NF9DT05TVEFOVCh2YWwpICAoX0RCVVNfR05VQ19FWFRFTlNJT04gKHZhbCMjTCkpCi0jZGVmaW5lIERCVVNfVUlOVDY0X0NPTlNUQU5UKHZhbCkgKF9EQlVTX0dOVUNfRVhURU5TSU9OICh2YWwjI1VMKSkKKyNkZWZpbmUgREJVU19JTlQ2NF9DT05TVEFOVCh2YWwpICAoX0RCVVNfR05VQ19FWFRFTlNJT04gKHZhbCMjTEwpKQorI2RlZmluZSBEQlVTX1VJTlQ2NF9DT05TVEFOVCh2YWwpIChfREJVU19HTlVDX0VYVEVOU0lPTiAodmFsIyNVTEwpKQogCiB0eXBlZGVmIGludCBkYnVzX2ludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBkYnVzX3VpbnQzMl90OwpAQCAtNDksMTIgKzQ5LDEyIEBACiAgKiBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIGdlbmVyYXRlZCBoZWFkZXIganVzdCBmb3IgdGhpcwogICovCiAjZGVmaW5lIERCVVNfTUFKT1JfVkVSU0lPTiAxCi0jZGVmaW5lIERCVVNfTUlOT1JfVkVSU0lPTiAxMgotI2RlZmluZSBEQlVTX01JQ1JPX1ZFUlNJT04gMjAKKyNkZWZpbmUgREJVU19NSU5PUl9WRVJTSU9OIDEwCisjZGVmaW5lIERCVVNfTUlDUk9fVkVSU0lPTiAxMgogCi0jZGVmaW5lIERCVVNfVkVSU0lPTl9TVFJJTkcgIjEuMTIuMjAiCisjZGVmaW5lIERCVVNfVkVSU0lPTl9TVFJJTkcgIjEuMTAuMTIiCiAKLSNkZWZpbmUgREJVU19WRVJTSU9OICgoMSA8PCAxNikgfCAoMTIgPDwgOCkgfCAoMjApKQorI2RlZmluZSBEQlVTX1ZFUlNJT04gKCgxIDw8IDE2KSB8ICgxMCA8PCA4KSB8ICgxMikpIAogCiBEQlVTX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtYXN2LXV0aWwuYyBiL2RidXMvZGJ1cy1hc3YtdXRpbC5jCmluZGV4IGZiYjJlNTEuLmQzYWM1ZTkgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1hc3YtdXRpbC5jCisrKyBiL2RidXMvZGJ1cy1hc3YtdXRpbC5jCkBAIC04MCw3ICs4MCw3IEBACiAgKiBAcGFyYW0gdmFyX2l0ZXIgd2lsbCBiZSBpbml0aWFsaXplZCB0byBhcHBlbmQgKGkuZS4gd3JpdGUpIHRvIHRoZSB2YXJpYW50CiAgKiBAcmV0dXJucyAjVFJVRSBvbiBzdWNjZXNzLCBvciAjRkFMU0UgaWYgbm90IGVub3VnaCBtZW1vcnkKICAqLwotZGJ1c19ib29sX3QKK3N0YXRpYyBkYnVzX2Jvb2xfdAogX2RidXNfYXN2X29wZW5fZW50cnkgKERCdXNNZXNzYWdlSXRlciAqYXJyX2l0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICplbnRyeV9pdGVyLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAqa2V5LApAQCAtMTE4LDcgKzExOCw3IEBACiAgKiBAcGFyYW0gdmFyX2l0ZXIgdGhlIGl0ZXJhdG9yIGFwcGVuZGluZyB0byB0aGUgdmFyaWFudCwgd2lsbCBiZSBjbG9zZWQKICAqIEByZXR1cm5zICNUUlVFIG9uIHN1Y2Nlc3MsIG9yICNGQUxTRSBpZiBub3QgZW5vdWdoIG1lbW9yeQogICovCi1kYnVzX2Jvb2xfdAorc3RhdGljIGRidXNfYm9vbF90CiBfZGJ1c19hc3ZfY2xvc2VfZW50cnkgKERCdXNNZXNzYWdlSXRlciAqYXJyX2l0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciAqZW50cnlfaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJfaXRlcikKQEAgLTE2Miw3ICsxNjIsNyBAQAogICogQHBhcmFtIGFycl9pdGVyIHRoZSBpdGVyYXRvciBhcHBlbmRpbmcgdG8gdGhlIGFycmF5LCB3aWxsIGJlIGNsb3NlZAogICogQHJldHVybnMgI1RSVUUgb24gc3VjY2Vzcywgb3IgI0ZBTFNFIGlmIG5vdCBlbm91Z2ggbWVtb3J5CiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBfZGJ1c19hc3ZfYWJhbmRvbl9lbnRyeSAoREJ1c01lc3NhZ2VJdGVyICphcnJfaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKmVudHJ5X2l0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJfaXRlcikKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1hc3YtdXRpbC5oIGIvZGJ1cy9kYnVzLWFzdi11dGlsLmgKaW5kZXggYTQzOTAwOC4uMjc3YWI4MCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLWFzdi11dGlsLmgKKysrIGIvZGJ1cy9kYnVzLWFzdi11dGlsLmgKQEAgLTQ2LDE2ICs0Niw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgICAgICAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIG5fZWxlbWVudHMpOwotZGJ1c19ib29sX3QgIF9kYnVzX2Fzdl9vcGVuX2VudHJ5ICAgICAgICAoREJ1c01lc3NhZ2VJdGVyICphcnJfaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciAqZW50cnlfaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJfaXRlcik7Ci1kYnVzX2Jvb2xfdCAgX2RidXNfYXN2X2Nsb3NlX2VudHJ5ICAgICAgIChEQnVzTWVzc2FnZUl0ZXIgKmFycl9pdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICplbnRyeV9pdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJfaXRlcik7Ci12b2lkICAgICAgICAgX2RidXNfYXN2X2FiYW5kb25fZW50cnkgICAgIChEQnVzTWVzc2FnZUl0ZXIgKmFycl9pdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICplbnRyeV9pdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICp2YXJfaXRlcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWF1dGgtc2NyaXB0LmMgYi9kYnVzL2RidXMtYXV0aC1zY3JpcHQuYwppbmRleCA0NzUwMDRiLi5hYWFlZDMwIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtYXV0aC1zY3JpcHQuYworKysgYi9kYnVzL2RidXMtYXV0aC1zY3JpcHQuYwpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgImRidXMtY3JlZGVudGlhbHMuaCIKICNpbmNsdWRlICJkYnVzLWludGVybmFscy5oIgogCi0jaW5jbHVkZSAidGVzdC90ZXN0LXV0aWxzLmgiCi0KIC8qKgogICogQGRlZmdyb3VwIERCdXNBdXRoU2NyaXB0IGNvZGUgZm9yIHJ1bm5pbmcgdW5pdCB0ZXN0IHNjcmlwdHMgZm9yIERCdXNBdXRoCiAgKiBAaW5ncm91cCAgREJ1c0ludGVybmFscwpAQCAtNzcsNyArNzUsNyBAQAogICAgICAgICAgICAgYSA9ICdcXCc7CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiYmFkIGJhY2tzbGFzaGVkIGJ5dGUgJWMiLCBiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoImJhZCBiYWNrc2xhc2hlZCBieXRlICVjXG4iLCBiKTsKICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgfQogCkBAIC0xNDgsNyArMTQ2LDcgQEAKICAgZWxzZSBpZiAoX2RidXNfc3RyaW5nX3N0YXJ0c193aXRoX2Nfc3RyIChzdHIsICJBVVRIRU5USUNBVEVEIikpCiAgICAgcmV0dXJuIERCVVNfQVVUSF9TVEFURV9BVVRIRU5USUNBVEVEOwogICBlbHNlCi0gICAgcmV0dXJuIERCVVNfQVVUSF9TVEFURV9JTlZBTElEOworICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqCkBAIC0xNjYsMTAgKzE2NCw2IEBACiAgICAgICByZXR1cm4gIk5FRURfRElTQ09OTkVDVCI7CiAgICAgY2FzZSBEQlVTX0FVVEhfU1RBVEVfQVVUSEVOVElDQVRFRDoKICAgICAgIHJldHVybiAiQVVUSEVOVElDQVRFRCI7Ci0gICAgY2FzZSBEQlVTX0FVVEhfU1RBVEVfSU5WQUxJRDoKLSAgICAgIHJldHVybiAiSU5WQUxJRCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwogICAgIH0KIAogICByZXR1cm4gInVua25vd24iOwpAQCAtMjkxLDcgKzI4NSw3IEBACiAgICAgfQogCiAgIGlmICghX2RidXNfZmlsZV9nZXRfY29udGVudHMgKCZmaWxlLCBmaWxlbmFtZSwgJmVycm9yKSkgICAgewotICAgICAgX2RidXNfd2FybiAoIkdldHRpbmcgY29udGVudHMgb2YgJXMgZmFpbGVkOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiR2V0dGluZyBjb250ZW50cyBvZiAlcyBmYWlsZWQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhIChmaWxlbmFtZSksIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgZ290byBvdXQ7CkBAIC0zMDUsNyArMjk5LDcgQEAKICAgICB7ICAgICAgCiAgICAgICBsaW5lX25vICs9IDE7CiAKLSAgICAgIC8qIF9kYnVzX3dhcm4gKCIlcyIsIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmxpbmUpKTsgKi8KKyAgICAgIC8qIF9kYnVzX3dhcm4gKCIlc1xuIiwgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmbGluZSkpOyAqLwogICAgICAgCiAgICAgICBfZGJ1c19zdHJpbmdfZGVsZXRlX2xlYWRpbmdfYmxhbmtzICgmbGluZSk7CiAKQEAgLTM3NiwxNCArMzcwLDE0IEBACiAgICAgICAgICAgCiAgICAgICAgICAgaWYgKGF1dGggIT0gTlVMTCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoImFscmVhZHkgY3JlYXRlZCBhIERCdXNBdXRoIChDTElFTlQgb3IgU0VSVkVSIGdpdmVuIHR3aWNlKSIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgiYWxyZWFkeSBjcmVhdGVkIGEgREJ1c0F1dGggKENMSUVOVCBvciBTRVJWRVIgZ2l2ZW4gdHdpY2UpXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICBhdXRoID0gX2RidXNfYXV0aF9jbGllbnRfbmV3ICgpOwogICAgICAgICAgIGlmIChhdXRoID09IE5VTEwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgdG8gY3JlYXRlIERCdXNBdXRoIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgdG8gY3JlYXRlIERCdXNBdXRoXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAKQEAgLTM5NCw3ICszODgsNyBAQAogICAgICAgICAgIGNyZWRzID0gX2RidXNfY3JlZGVudGlhbHNfbmV3X2Zyb21fY3VycmVudF9wcm9jZXNzICgpOwogICAgICAgICAgIGlmIChjcmVkcyA9PSBOVUxMKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBjcmVkZW50aWFscyIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBjcmVkZW50aWFsc1xuIik7CiAgICAgICAgICAgICAgIF9kYnVzX2F1dGhfdW5yZWYgKGF1dGgpOwogICAgICAgICAgICAgICBhdXRoID0gTlVMTDsKICAgICAgICAgICAgICAgZ290byBvdXQ7CkBAIC00MDIsNyArMzk2LDcgQEAKICAgICAgICAgICAgICAgCiAgICAgICAgICAgaWYgKCFfZGJ1c19hdXRoX3NldF9jcmVkZW50aWFscyAoYXV0aCwgY3JlZHMpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBzZXR0aW5nIGNyZWRlbnRpYWxzIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHNldHRpbmcgY3JlZGVudGlhbHNcbiIpOwogICAgICAgICAgICAgICBfZGJ1c19hdXRoX3VucmVmIChhdXRoKTsKICAgICAgICAgICAgICAgYXV0aCA9IE5VTEw7CiAgICAgICAgICAgICAgIF9kYnVzX2NyZWRlbnRpYWxzX3VucmVmIChjcmVkcyk7CkBAIC00MTgsMTQgKzQxMiwxNCBAQAogICAgICAgICAgIAogICAgICAgICAgIGlmIChhdXRoICE9IE5VTEwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJhbHJlYWR5IGNyZWF0ZWQgYSBEQnVzQXV0aCAoQ0xJRU5UIG9yIFNFUlZFUiBnaXZlbiB0d2ljZSkiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoImFscmVhZHkgY3JlYXRlZCBhIERCdXNBdXRoIChDTElFTlQgb3IgU0VSVkVSIGdpdmVuIHR3aWNlKVxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgYXV0aCA9IF9kYnVzX2F1dGhfc2VydmVyX25ldyAoJmd1aWQpOwogICAgICAgICAgIGlmIChhdXRoID09IE5VTEwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgdG8gY3JlYXRlIERCdXNBdXRoIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgdG8gY3JlYXRlIERCdXNBdXRoXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAKQEAgLTQzNiw3ICs0MzAsNyBAQAogICAgICAgICAgIGNyZWRzID0gX2RidXNfY3JlZGVudGlhbHNfbmV3X2Zyb21fY3VycmVudF9wcm9jZXNzICgpOwogICAgICAgICAgIGlmIChjcmVkcyA9PSBOVUxMKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBjcmVkZW50aWFscyIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBjcmVkZW50aWFsc1xuIik7CiAgICAgICAgICAgICAgIF9kYnVzX2F1dGhfdW5yZWYgKGF1dGgpOwogICAgICAgICAgICAgICBhdXRoID0gTlVMTDsKICAgICAgICAgICAgICAgZ290byBvdXQ7CkBAIC00NDQsNyArNDM4LDcgQEAKICAgICAgICAgICAgICAgCiAgICAgICAgICAgaWYgKCFfZGJ1c19hdXRoX3NldF9jcmVkZW50aWFscyAoYXV0aCwgY3JlZHMpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciBzZXR0aW5nIGNyZWRlbnRpYWxzIik7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHNldHRpbmcgY3JlZGVudGlhbHNcbiIpOwogICAgICAgICAgICAgICBfZGJ1c19hdXRoX3VucmVmIChhdXRoKTsKICAgICAgICAgICAgICAgYXV0aCA9IE5VTEw7CiAgICAgICAgICAgICAgIF9kYnVzX2NyZWRlbnRpYWxzX3VucmVmIChjcmVkcyk7CkBAIC00NTcsNyArNDUxLDcgQEAKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoYXV0aCA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIm11c3Qgc3BlY2lmeSBDTElFTlQgb3IgU0VSVkVSIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIm11c3Qgc3BlY2lmeSBDTElFTlQgb3IgU0VSVkVSXG4iKTsKICAgICAgICAgICBnb3RvIG91dDsKIAogICAgICAgICB9CkBAIC00OTUsMTMgKzQ4OSwxMyBAQAogCiAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnRvX3NlbmQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIGFsbG9jYXRlIHN0cmluZyIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIGFsbG9jYXRlIHN0cmluZ1xuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKCFhcHBlbmRfcXVvdGVkX3N0cmluZyAoJnRvX3NlbmQsICZsaW5lKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoImZhaWxlZCB0byBhcHBlbmQgcXVvdGVkIHN0cmluZyBsaW5lICVkIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoImZhaWxlZCB0byBhcHBlbmQgcXVvdGVkIHN0cmluZyBsaW5lICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vKTsKICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CkBAIC01MTEsNyArNTA1LDcgQEAKICAgICAgICAgICAKICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZ0b19zZW5kLCAiXHJcbiIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiZmFpbGVkIHRvIGFwcGVuZCBcXHJcXG4gZnJvbSBsaW5lICVkIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoImZhaWxlZCB0byBhcHBlbmQgXHJcbiBmcm9tIGxpbmUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8pOwogICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTUyMCw1NiArNTE0LDIyIEBACiAgICAgICAgICAgLyogUmVwbGFjZSBVU0VSSURfSEVYIHdpdGggb3VyIHVzZXJuYW1lIGluIGhleCAqLwogICAgICAgICAgIHsKICAgICAgICAgICAgIGludCB3aGVyZTsKLQotICAgICAgICAgICAgaWYgKF9kYnVzX3N0cmluZ19maW5kICgmdG9fc2VuZCwgMCwgIldST05HX1VTRVJJRF9IRVgiLCAmd2hlcmUpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVGhpcyBtdXN0IGJlIGNoZWNrZWQgZm9yIGJlZm9yZSBVU0VSSURfSEVYLCBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICogdGhhdCdzIGEgc3Vic3RyaW5nLiAqLwotICAgICAgICAgICAgICAgIERCdXNTdHJpbmcgdWlkOwotCi0gICAgICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnVpZCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVpZCIpOwotICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghX2RidXNfdGVzdF9hcHBlbmRfZGlmZmVyZW50X3VpZCAoJnVpZCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVpZCIpOwotICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwotICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnVpZCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2RlbGV0ZSAoJnRvX3NlbmQsIHdoZXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHN0cmxlbiAoIldST05HX1VTRVJJRF9IRVgiKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19oZXhfZW5jb2RlICgmdWlkLCAwLCAmdG9fc2VuZCwgd2hlcmUpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIHN1YnN0IFdST05HX1VTRVJJRF9IRVgiKTsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ1aWQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmdWlkKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoX2RidXNfc3RyaW5nX2ZpbmQgKCZ0b19zZW5kLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVU0VSSURfSEVYIiwgJndoZXJlKSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKF9kYnVzX3N0cmluZ19maW5kICgmdG9fc2VuZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTRVJJRF9IRVgiLCAmd2hlcmUpKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyB1c2VybmFtZTsKIAogICAgICAgICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZ1c2VybmFtZSkpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVzZXJpZCIpOworICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciB1c2VyaWRcbiIpOwogICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghX2RidXNfYXBwZW5kX3VzZXJfZnJvbV9jdXJyZW50X3Byb2Nlc3MgKCZ1c2VybmFtZSkpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVzZXJpZCIpOworICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IGZvciB1c2VyaWRcbiIpOwogICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CkBAIC01ODAsNyArNTQwLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19oZXhfZW5jb2RlICgmdXNlcm5hbWUsIDAsCiAJCQkJCSAgICAgICZ0b19zZW5kLCB3aGVyZSkpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgdG8gc3Vic3QgVVNFUklEX0hFWCIpOworICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIHN1YnN0IFVTRVJJRF9IRVhcbiIpOwogICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CkBAIC01ODksNjUgKzU0OSwyMCBAQAogICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmdXNlcm5hbWUpOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChfZGJ1c19zdHJpbmdfZmluZCAoJnRvX3NlbmQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldST05HX1VTRVJOQU1FX0hFWCIsICZ3aGVyZSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBUaGlzIG11c3QgYmUgY2hlY2tlZCBmb3IgYmVmb3JlIFVTRVJOQU1FX0hFWCwgYmVjYXVzZQotICAgICAgICAgICAgICAgICAqIHRoYXQncyBhIHN1YnN0cmluZy4gKi8KLSNpZmRlZiBEQlVTX1VOSVgKLSAgICAgICAgICAgICAgICBEQnVzU3RyaW5nIHVzZXJuYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnVzZXJuYW1lKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbW9yeSBmb3IgdXNlcm5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIV9kYnVzX3Rlc3RfYXBwZW5kX2RpZmZlcmVudF91c2VybmFtZSAoJnVzZXJuYW1lKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbW9yeSBmb3IgdXNlcm5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0b19zZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ1c2VybmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2RlbGV0ZSAoJnRvX3NlbmQsIHdoZXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHN0cmxlbiAoIldST05HX1VTRVJOQU1FX0hFWCIpKTsKLQotICAgICAgICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX2hleF9lbmNvZGUgKCZ1c2VybmFtZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9fc2VuZCwgd2hlcmUpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIHN1YnN0IFdST05HX1VTRVJOQU1FX0hFWCIpOwotICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwotICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnVzZXJuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnVzZXJuYW1lKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgLyogTm8gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHVzZXMgdGhlIGxvZ2luIG5hbWUgb24KLSAgICAgICAgICAgICAgICAgKiBXaW5kb3dzLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGl0IGFwcGVhcmluZyBpbiBhbgotICAgICAgICAgICAgICAgICAqIGF1dGggc2NyaXB0IHRoYXQgaXMgbm90IFVOSVhfT05MWS4gKi8KLSAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgiV1JPTkdfVVNFUk5BTUVfSEVYIGNhbm5vdCBiZSB1c2VkIG9uIFdpbmRvd3MiKTsKLSAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotI2VuZGlmCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKF9kYnVzX3N0cmluZ19maW5kICgmdG9fc2VuZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNFUk5BTUVfSEVYIiwgJndoZXJlKSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIERCdXNTdHJpbmcgdXNlcm5hbWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnVzZXJuYW1lKSkKICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbW9yeSBmb3IgdXNlcm5hbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbW9yeSBmb3IgdXNlcm5hbWVcbiIpOwogICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghX2RidXNfYXBwZW5kX3VzZXJfZnJvbV9jdXJyZW50X3Byb2Nlc3MgKCZ1c2VybmFtZSkpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVzZXJuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJubyBtZW1vcnkgZm9yIHVzZXJuYW1lXG4iKTsKICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ1c2VybmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmdG9fc2VuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwpAQCAtNjU4LDcgKzU3Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaGV4X2VuY29kZSAoJnVzZXJuYW1lLCAwLAogCQkJCQkgICAgICAmdG9fc2VuZCwgd2hlcmUpKQogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIHN1YnN0IFVTRVJOQU1FX0hFWCIpOworICAgICAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtb3J5IHRvIHN1YnN0IFVTRVJOQU1FX0hFWFxuIik7CiAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmdXNlcm5hbWUpOwogICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTY3NSw3ICs1OTAsNyBAQAogICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfY29weSAoJnRvX3NlbmQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChidWZmZXIpKSkKICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJub3QgZW5vdWdoIG1lbW9yeSB0byBjYWxsIGJ5dGVzX3JlY2VpdmVkLCBvciBjYW4ndCBhZGQgYnl0ZXMgdG8gYXV0aCBvYmplY3QgYWxyZWFkeSBpbiBlbmQgc3RhdGUiKTsKKyAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm90IGVub3VnaCBtZW1vcnkgdG8gY2FsbCBieXRlc19yZWNlaXZlZCwgb3IgY2FuJ3QgYWRkIGJ5dGVzIHRvIGF1dGggb2JqZWN0IGFscmVhZHkgaW4gZW5kIHN0YXRlXG4iKTsKICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnRvX3NlbmQpOwogICAgICAgICAgICAgICAgIF9kYnVzX2F1dGhfcmV0dXJuX2J1ZmZlciAoYXV0aCwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTY5NiwxMyArNjExLDEzIEBACiAgICAgICAgICAgZXhwZWN0ZWQgPSBhdXRoX3N0YXRlX2Zyb21fc3RyaW5nICgmbGluZSk7CiAgICAgICAgICAgaWYgKGV4cGVjdGVkIDwgMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoImJhZCBhdXRoIHN0YXRlIGdpdmVuIHRvIEVYUEVDVF9TVEFURSIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgiYmFkIGF1dGggc3RhdGUgZ2l2ZW4gdG8gRVhQRUNUX1NUQVRFXG4iKTsKICAgICAgICAgICAgICAgZ290byBwYXJzZV9mYWlsZWQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICBpZiAoZXhwZWN0ZWQgIT0gc3RhdGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCBhdXRoIHN0YXRlICVzIGJ1dCBnb3QgJXMgb24gbGluZSAlZCIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCBhdXRoIHN0YXRlICVzIGJ1dCBnb3QgJXMgb24gbGluZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9zdGF0ZV90b19zdHJpbmcgKGV4cGVjdGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9zdGF0ZV90b19zdHJpbmcgKHN0YXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubyk7CkBAIC03MTgsMTMgKzYzMywxMyBAQAogCiAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnJlY2VpdmVkKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbSB0byBhbGxvY2F0ZSBzdHJpbmcgcmVjZWl2ZWQiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm5vIG1lbSB0byBhbGxvY2F0ZSBzdHJpbmcgcmVjZWl2ZWRcbiIpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX3BvcF9saW5lICgmZnJvbV9hdXRoLCAmcmVjZWl2ZWQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbGluZSBwb3BwZWQgZnJvbSB0aGUgREJ1c0F1dGggYmVpbmcgdGVzdGVkLCBleHBlY3RlZCBjb21tYW5kICVzIG9uIGxpbmUgJWQiLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbGluZSBwb3BwZWQgZnJvbSB0aGUgREJ1c0F1dGggYmVpbmcgdGVzdGVkLCBleHBlY3RlZCBjb21tYW5kICVzIG9uIGxpbmUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmxpbmUpLCBsaW5lX25vKTsKICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZyZWNlaXZlZCk7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwpAQCAtNzMyLDcgKzY0Nyw3IEBACiAKICAgICAgICAgICBpZiAoIXNhbWVfZmlyc3Rfd29yZCAoJnJlY2VpdmVkLCAmbGluZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJsaW5lICVkIGV4cGVjdGVkIGNvbW1hbmQgJyVzJyBhbmQgZ290ICclcyciLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgibGluZSAlZCBleHBlY3RlZCBjb21tYW5kICclcycgYW5kIGdvdCAnJXMnXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZsaW5lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmcmVjZWl2ZWQpKTsKQEAgLTc1MiwxMyArNjY3LDEzIEBACiAKICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmZXhwZWN0ZWQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtIHRvIGFsbG9jYXRlIHN0cmluZyBleHBlY3RlZCIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtIHRvIGFsbG9jYXRlIHN0cmluZyBleHBlY3RlZFxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKCFhcHBlbmRfcXVvdGVkX3N0cmluZyAoJmV4cGVjdGVkLCAmbGluZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJmYWlsZWQgdG8gYXBwZW5kIHF1b3RlZCBzdHJpbmcgbGluZSAlZCIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJmYWlsZWQgdG8gYXBwZW5kIHF1b3RlZCBzdHJpbmcgbGluZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubyk7CiAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZXhwZWN0ZWQpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTc3Myw3ICs2ODgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIHVudXNlZCBieXRlcyAnJXMnIGFuZCBoYXZlICclcyciLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgdW51c2VkIGJ5dGVzICclcycgYW5kIGhhdmUgJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZXhwZWN0ZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHVudXNlZCkpOwogICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmV4cGVjdGVkKTsKQEAgLTc4OCw3ICs3MDMsNyBAQAogICAgICAgICAgIGF1dGhvcml6ZWRfaWRlbnRpdHkgPSBfZGJ1c19hdXRoX2dldF9pZGVudGl0eSAoYXV0aCk7CiAgICAgICAgICAgaWYgKCFfZGJ1c19jcmVkZW50aWFsc19hcmVfYW5vbnltb3VzIChhdXRob3JpemVkX2lkZW50aXR5KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGFub255bW91cyBsb2dpbiBvciBmYWlsZWQgbG9naW4sIGJ1dCBzb21lIGNyZWRlbnRpYWxzIHdlcmUgYXV0aG9yaXplZCIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgYW5vbnltb3VzIGxvZ2luIG9yIGZhaWxlZCBsb2dpbiwgYnV0IHNvbWUgY3JlZGVudGlhbHMgd2VyZSBhdXRob3JpemVkXG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgwMCw3ICs3MTUsNyBAQAogICAgICAgICAgIGF1dGhvcml6ZWRfaWRlbnRpdHkgPSBfZGJ1c19hdXRoX2dldF9pZGVudGl0eSAoYXV0aCk7CiAgICAgICAgICAgaWYgKF9kYnVzX2NyZWRlbnRpYWxzX2FyZV9hbm9ueW1vdXMgKGF1dGhvcml6ZWRfaWRlbnRpdHkpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgdG8gaGF2ZSBzb21lIGNyZWRlbnRpYWxzLCBidXQgd2UgZG9uJ3QiKTsKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIHRvIGhhdmUgc29tZSBjcmVkZW50aWFscywgYnV0IHdlIGRvbid0XG4iKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTgxMywxMyArNzI4LDEzIEBACiAKICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmZXhwZWN0ZWQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtIHRvIGFsbG9jYXRlIHN0cmluZyBleHBlY3RlZCIpOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgibm8gbWVtIHRvIGFsbG9jYXRlIHN0cmluZyBleHBlY3RlZFxuIik7CiAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKCFhcHBlbmRfcXVvdGVkX3N0cmluZyAoJmV4cGVjdGVkLCAmbGluZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJmYWlsZWQgdG8gYXBwZW5kIHF1b3RlZCBzdHJpbmcgbGluZSAlZCIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJmYWlsZWQgdG8gYXBwZW5kIHF1b3RlZCBzdHJpbmcgbGluZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubyk7CiAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZXhwZWN0ZWQpOwogICAgICAgICAgICAgICBnb3RvIG91dDsKQEAgLTgzNCw3ICs3NDksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGV4YWN0IHN0cmluZyAnJXMnIGFuZCBoYXZlICclcyciLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgZXhhY3Qgc3RyaW5nICclcycgYW5kIGhhdmUgJyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZXhwZWN0ZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZmcm9tX2F1dGgpKTsKICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZleHBlY3RlZCk7CkBAIC04NDgsNyArNzYzLDcgQEAKICAgICAgIAogICAgIHBhcnNlX2ZhaWxlZDoKICAgICAgIHsKLSAgICAgICAgX2RidXNfd2FybiAoImNvdWxkbid0IHByb2Nlc3MgbGluZSAlZCBcIiVzXCIiLAorICAgICAgICBfZGJ1c193YXJuICgiY291bGRuJ3QgcHJvY2VzcyBsaW5lICVkIFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgICAgbGluZV9ubywgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmbGluZSkpOwogICAgICAgICBnb3RvIG91dDsKICAgICAgIH0KQEAgLTg1Niw3ICs3NzEsNyBAQAogCiAgIGlmIChhdXRoID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkF1dGggc2NyaXB0IGlzIGJvZ3VzLCBkaWQgbm90IGV2ZW4gaGF2ZSBDTElFTlQgb3IgU0VSVkVSIik7CisgICAgICBfZGJ1c193YXJuICgiQXV0aCBzY3JpcHQgaXMgYm9ndXMsIGRpZCBub3QgZXZlbiBoYXZlIENMSUVOVCBvciBTRVJWRVJcbiIpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogICBlbHNlIGlmIChzdGF0ZSA9PSBEQlVTX0FVVEhfU1RBVEVfQVVUSEVOVElDQVRFRCkKQEAgLTg2NywxNSArNzgyLDE1IEBACiAKICAgICAgIGlmIChfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAodW51c2VkKSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiZGlkIG5vdCBleHBlY3QgdW51c2VkIGJ5dGVzIChzY3JpcHRzIG11c3Qgc3BlY2lmeSBleHBsaWNpdGx5IGlmIHRoZXkgYXJlIGV4cGVjdGVkKSIpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJkaWQgbm90IGV4cGVjdCB1bnVzZWQgYnl0ZXMgKHNjcmlwdHMgbXVzdCBzcGVjaWZ5IGV4cGxpY2l0bHkgaWYgdGhleSBhcmUgZXhwZWN0ZWQpXG4iKTsKICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQogICAgIH0KIAogICBpZiAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZmcm9tX2F1dGgpID4gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgic2NyaXB0IGRpZCBub3QgaGF2ZSBFWFBFQ1RfIHN0YXRlbWVudHMgZm9yIGFsbCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBEQnVzQXV0aCIpOwotICAgICAgX2RidXNfd2FybiAoIkxlZnRvdmVyIGRhdGE6ICVzIiwgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZnJvbV9hdXRoKSk7CisgICAgICBfZGJ1c193YXJuICgic2NyaXB0IGRpZCBub3QgaGF2ZSBFWFBFQ1RfIHN0YXRlbWVudHMgZm9yIGFsbCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBEQnVzQXV0aFxuIik7CisgICAgICBfZGJ1c193YXJuICgiTGVmdG92ZXIgZGF0YTogJXNcbiIsIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmZyb21fYXV0aCkpOwogICAgICAgZ290byBvdXQ7CiAgICAgfQogICAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1hdXRoLXV0aWwuYyBiL2RidXMvZGJ1cy1hdXRoLXV0aWwuYwppbmRleCBiMWE1ZWU0Li4xMGNiYzQ5IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtYXV0aC11dGlsLmMKKysrIGIvZGJ1cy9kYnVzLWF1dGgtdXRpbC5jCkBAIC01MSw3ICs1MSw3IEBACiAgIGRpciA9IE5VTEw7CiAgIAogICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmdGVzdF9kaXJlY3RvcnkpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRpZG4ndCBhbGxvY2F0ZSB0ZXN0X2RpcmVjdG9yeSIpOworICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRpZG4ndCBhbGxvY2F0ZSB0ZXN0X2RpcmVjdG9yeVxuIik7CiAKICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZmaWxlbmFtZSwgc3ViZGlyKTsKICAgCkBAIC02NCwxMiArNjQsMTIgQEAKIAogICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZpbGVuYW1lKTsKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmZpbGVuYW1lKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgZmlsZW5hbWUgc3RyaW5nIik7CisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGFsbG9jYXRlIGZpbGVuYW1lIHN0cmluZ1xuIik7CiAKICAgZGlyID0gX2RidXNfZGlyZWN0b3J5X29wZW4gKCZ0ZXN0X2RpcmVjdG9yeSwgJmVycm9yKTsKICAgaWYgKGRpciA9PSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3Qgb3BlbiAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnRlc3RfZGlyZWN0b3J5KSwKICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3QgZ2V0IG5leHQgZmlsZSBpbiAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBnZXQgbmV4dCBmaWxlIGluICVzOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnRlc3RfZGlyZWN0b3J5KSwgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICBnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1hdXRoLmMgYi9kYnVzL2RidXMtYXV0aC5jCmluZGV4IDczOTBhOWQuLmVhNDNjZTcgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1hdXRoLmMKKysrIGIvZGJ1cy9kYnVzLWF1dGguYwpAQCAtNTI5LDcgKzUyOSw2IEBACiAgIERCdXNTdHJpbmcgdG1wMjsKICAgZGJ1c19ib29sX3QgcmV0dmFsID0gRkFMU0U7CiAgIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgREJ1c0NyZWRlbnRpYWxzICpteXNlbGYgPSBOVUxMOwogCiAgIF9kYnVzX3N0cmluZ19zZXRfbGVuZ3RoICgmYXV0aC0+Y2hhbGxlbmdlLCAwKTsKICAgCkBAIC01NjYsMzQgKzU2NSw2IEBACiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIG15c2VsZiA9IF9kYnVzX2NyZWRlbnRpYWxzX25ld19mcm9tX2N1cnJlbnRfcHJvY2VzcyAoKTsKLQotICBpZiAobXlzZWxmID09IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFfZGJ1c19jcmVkZW50aWFsc19zYW1lX3VzZXIgKG15c2VsZiwgYXV0aC0+ZGVzaXJlZF9pZGVudGl0eSkpCi0gICAgewotICAgICAgLyoKLSAgICAgICAqIERCVVNfQ09PS0lFX1NIQTEgaXMgbm90IHN1aXRhYmxlIGZvciBhdXRoZW50aWNhdGluZyB0aGF0IHRoZQotICAgICAgICogY2xpZW50IGlzIGFueW9uZSBvdGhlciB0aGFuIHRoZSB1c2VyIG93bmluZyB0aGUgcHJvY2VzcwotICAgICAgICogY29udGFpbmluZyB0aGUgREJ1c1NlcnZlcjogd2UgcHJvYmFibHkgYXJlbid0IGFsbG93ZWQgdG8gd3JpdGUKLSAgICAgICAqIHRvIG90aGVyIHVzZXJzJyBob21lIGRpcmVjdG9yaWVzLiBFdmVuIGlmIHdlIGNhbiAoZm9yIGV4YW1wbGUKLSAgICAgICAqIHVpZCAwIG9uIHRyYWRpdGlvbmFsIFVuaXggb3IgQ0FQX0RBQ19PVkVSUklERSBvbiBMaW51eCksIHdlCi0gICAgICAgKiBtdXN0IG5vdCwgYmVjYXVzZSB0aGUgb3RoZXIgdXNlciBjb250cm9scyB0aGVpciBob21lIGRpcmVjdG9yeSwKLSAgICAgICAqIGFuZCBjb3VsZCBjYXJyeSBvdXQgc3ltbGluayBhdHRhY2tzIHRvIG1ha2UgdXMgcmVhZCBmcm9tIG9yCi0gICAgICAgKiB3cml0ZSB0byB1bmludGVuZGVkIGxvY2F0aW9ucy4gSXQncyBkaWZmaWN1bHQgdG8gYXZvaWQgc3ltbGluawotICAgICAgICogYXR0YWNrcyBpbiBhIHBvcnRhYmxlIHdheSwgc28gd2UganVzdCBkb24ndCB0cnkuIFRoaXMgaXNuJ3QgYQotICAgICAgICogcmVncmVzc2lvbiwgYmVjYXVzZSBEQlVTX0NPT0tJRV9TSEExIG5ldmVyIHdvcmtlZCBmb3Igb3RoZXIKLSAgICAgICAqIHVzZXJzIGFueXdheS4KLSAgICAgICAqLwotICAgICAgX2RidXNfdmVyYm9zZSAoIiVzOiBjbGllbnQgdHJpZWQgdG8gYXV0aGVudGljYXRlIGFzIFwiJXNcIiwgIgotICAgICAgICAgICAgICAgICAgICAgImJ1dCB0aGF0IGRvZXNuJ3QgbWF0Y2ggdGhpcyBwcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgIERCVVNfQVVUSF9OQU1FIChhdXRoKSwKLSAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoZGF0YSkpOwotICAgICAgcmV0dmFsID0gc2VuZF9yZWplY3RlZCAoYXV0aCk7Ci0gICAgICBnb3RvIG91dDsKLSAgICB9Ci0KICAgLyogd2UgY2FjaGUgdGhlIGtleXJpbmcgZm9yIHNwZWVkLCBzbyBoZXJlIHdlIGRyb3AgaXQgaWYgaXQncyB0aGUKICAgICogd3Jvbmcgb25lLiBGSVhNRSBjYWNoaW5nIHRoZSBrZXlyaW5nIGhlcmUgaXMgdXNlbGVzcyBzaW5jZSB3ZSB1c2UKICAgICogYSBkaWZmZXJlbnQgREJ1c0F1dGggZm9yIGV2ZXJ5IGNvbm5lY3Rpb24uCkBAIC03MDgsOSArNjc5LDYgQEAKICAgX2RidXNfc3RyaW5nX3plcm8gKCZ0bXAyKTsKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0bXAyKTsKIAotICBpZiAobXlzZWxmICE9IE5VTEwpCi0gICAgX2RidXNfY3JlZGVudGlhbHNfdW5yZWYgKG15c2VsZik7Ci0KICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTUxNywxNCArMTQ4NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFSkVDVEVEIikpCiAgICAgZ290byBub21lbTsKIAotICBmb3IgKGkgPSAwOyBhbGxfbWVjaGFuaXNtc1tpXS5tZWNoYW5pc20gIT0gTlVMTDsgaSsrKQorICBpID0gMDsKKyAgd2hpbGUgKGFsbF9tZWNoYW5pc21zW2ldLm1lY2hhbmlzbSAhPSBOVUxMKQogICAgIHsKLSAgICAgIC8qIHNraXAgbWVjaGFuaXNtcyB0aGF0IGFyZW4ndCBhbGxvd2VkICovCi0gICAgICBpZiAoYXV0aC0+YWxsb3dlZF9tZWNocyAhPSBOVUxMICYmCi0gICAgICAgICAgIV9kYnVzX3N0cmluZ19hcnJheV9jb250YWlucyAoKGNvbnN0IGNoYXIqKilhdXRoLT5hbGxvd2VkX21lY2hzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9tZWNoYW5pc21zW2ldLm1lY2hhbmlzbSkpCi0gICAgICAgIGNvbnRpbnVlOwotCiAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIpKQogICAgICAgICBnb3RvIG5vbWVtOwpAQCAtMTUzMiw2ICsxNDk1LDggQEAKICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJmNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9tZWNoYW5pc21zW2ldLm1lY2hhbmlzbSkpCiAgICAgICAgIGdvdG8gbm9tZW07CisgICAgICAKKyAgICAgICsraTsKICAgICB9CiAgIAogICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZjb21tYW5kLCAiXHJcbiIpKQpAQCAtMjg3Miw0NSArMjgzNyw2IEBACiAgIHJldHVybiBhdXRoLT51bml4X2ZkX25lZ290aWF0ZWQ7CiB9CiAKLS8qKgotICogUXVlcmllcyB3aGV0aGVyIHRoZSBnaXZlbiBhdXRoIG1lY2hhbmlzbSBpcyBzdXBwb3J0ZWQuCi0gKgotICogQHBhcmFtIGF1dGggdGhlIGF1dGggbWVjaGFuaXNtIHRvIHF1ZXJ5IGZvcgotICogQHJldHVybnMgI1RSVUUgd2hlbiBhdXRoIG1lY2hhbmlzbSBpcyBzdXBwb3J0ZWQKLSAqLwotZGJ1c19ib29sX3QKLV9kYnVzX2F1dGhfaXNfc3VwcG9ydGVkX21lY2hhbmlzbSAoREJ1c1N0cmluZyAqbmFtZSkKLXsKLSAgX2RidXNfYXNzZXJ0IChuYW1lICE9IE5VTEwpOwotCi0gIHJldHVybiBmaW5kX21lY2ggKG5hbWUsIE5VTEwpICE9IE5VTEw7Ci19Ci0KLS8qKgotICogUmV0dXJuIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHN1cHBvcnRlZCBhdXRoIG1lY2hhbmlzbXMuCi0gKgotICogQHBhcmFtIHN0cmluZyB0byBob2xkIHRoZSBzdXBwb3J0ZWQgYXV0aCBtZWNoYW5pc21zCi0gKiBAcmV0dXJucyAjRkFMU0Ugb24gb29tCi0gKi8KLWRidXNfYm9vbF90Ci1fZGJ1c19hdXRoX2R1bXBfc3VwcG9ydGVkX21lY2hhbmlzbXMgKERCdXNTdHJpbmcgKmJ1ZmZlcikKLXsKLSAgdW5zaWduZWQgaW50IGk7Ci0gIF9kYnVzX2Fzc2VydCAoYnVmZmVyICE9IE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGFsbF9tZWNoYW5pc21zW2ldLm1lY2hhbmlzbSAhPSBOVUxMOyBpKyspCi0gICAgewotICAgICAgaWYgKGkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kIChidWZmZXIsICIsICIpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKGJ1ZmZlciwgYWxsX21lY2hhbmlzbXNbaV0ubWVjaGFuaXNtKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KIC8qKiBAfSAqLwogCiAvKiB0ZXN0cyBpbiBkYnVzLWF1dGgtdXRpbC5jICovCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtYXV0aC5oIGIvZGJ1cy9kYnVzLWF1dGguaAppbmRleCA3NGMwYzFlLi5lMDMyMzAyIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtYXV0aC5oCisrKyBiL2RidXMvZGJ1cy1hdXRoLmgKQEAgLTM4LDggKzM4LDcgQEAKICAgREJVU19BVVRIX1NUQVRFX1dBSVRJTkdfRk9SX01FTU9SWSwKICAgREJVU19BVVRIX1NUQVRFX0hBVkVfQllURVNfVE9fU0VORCwKICAgREJVU19BVVRIX1NUQVRFX05FRURfRElTQ09OTkVDVCwKLSAgREJVU19BVVRIX1NUQVRFX0FVVEhFTlRJQ0FURUQsCi0gIERCVVNfQVVUSF9TVEFURV9JTlZBTElEID0gLTEKKyAgREJVU19BVVRIX1NUQVRFX0FVVEhFTlRJQ0FURUQKIH0gREJ1c0F1dGhTdGF0ZTsKIAogREJVU19QUklWQVRFX0VYUE9SVApAQCAtOTIsMTAgKzkxLDYgQEAKIAogdm9pZCAgICAgICAgICBfZGJ1c19hdXRoX3NldF91bml4X2ZkX3Bvc3NpYmxlKERCdXNBdXRoICAgICAgICAgICAgICAgKmF1dGgsIGRidXNfYm9vbF90IGIpOwogZGJ1c19ib29sX3QgICBfZGJ1c19hdXRoX2dldF91bml4X2ZkX25lZ290aWF0ZWQoREJ1c0F1dGggICAgICAgICAgICAgKmF1dGgpOwotREJVU19QUklWQVRFX0VYUE9SVAotZGJ1c19ib29sX3QgICBfZGJ1c19hdXRoX2lzX3N1cHBvcnRlZF9tZWNoYW5pc20oREJ1c1N0cmluZyAgICAgICAgICAgKm5hbWUpOwotREJVU19QUklWQVRFX0VYUE9SVAotZGJ1c19ib29sX3QgICBfZGJ1c19hdXRoX2R1bXBfc3VwcG9ydGVkX21lY2hhbmlzbXMoREJ1c1N0cmluZyAgICAgICAgKmJ1ZmZlcik7CiAKIERCVVNfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1idXMuYyBiL2RidXMvZGJ1cy1idXMuYwppbmRleCAxYWRlY2E3Li4wZmQ0ODMxIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtYnVzLmMKKysrIGIvZGJ1cy9kYnVzLWJ1cy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgd2hpbGUgKGkgPCBOX0JVU19UWVBFUykKICAgICB7CiAgICAgICBpZiAoYnVzX2Nvbm5lY3Rpb25zW2ldICE9IE5VTEwpCi0gICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiZGJ1c19zaHV0ZG93bigpIGNhbGxlZCBidXQgY29ubmVjdGlvbnMgd2VyZSBzdGlsbCBsaXZlLiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBkaWQgbm90IGRyb3AgYWxsIGl0cyByZWZlcmVuY2VzIHRvIGJ1cyBjb25uZWN0aW9ucy4iKTsKKyAgICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJkYnVzX3NodXRkb3duKCkgY2FsbGVkIGJ1dCBjb25uZWN0aW9ucyB3ZXJlIHN0aWxsIGxpdmUuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGRpZCBub3QgZHJvcCBhbGwgaXRzIHJlZmVyZW5jZXMgdG8gYnVzIGNvbm5lY3Rpb25zLlxuIik7CiAgICAgICAKICAgICAgIGRidXNfZnJlZSAoYnVzX2Nvbm5lY3Rpb25fYWRkcmVzc2VzW2ldKTsKICAgICAgIGJ1c19jb25uZWN0aW9uX2FkZHJlc3Nlc1tpXSA9IE5VTEw7CkBAIC0xNjgsOSArMTY4LDkgQEAKICAgICAgIGVsc2UgaWYgKHN1cHBvcnRlZCAmJiAhcmV0dmFsKQogICAgICAgICB7CiAgICAgICAgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpCi0gICAgICAgICAgICBfZGJ1c193YXJuICgiRHluYW1pYyBzZXNzaW9uIGxvb2t1cCBzdXBwb3J0ZWQgYnV0IGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJEeW5hbWljIHNlc3Npb24gbG9va3VwIHN1cHBvcnRlZCBidXQgZmFpbGVkOiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgX2RidXNfd2FybiAoIkR5bmFtaWMgc2Vzc2lvbiBsb29rdXAgc3VwcG9ydGVkIGJ1dCBmYWlsZWQgc2lsZW50bHkiKTsKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJEeW5hbWljIHNlc3Npb24gbG9va3VwIHN1cHBvcnRlZCBidXQgZmFpbGVkIHNpbGVudGx5XG4iKTsKICAgICAgICAgfQogICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZhZGRyKTsKICAgICB9CkBAIC05MzMsNyArOTMzLDcgQEAKICAqIHByb2JhYmx5IHRoZSBidXMgSUQgaXMgbm90IHVzZWZ1bDsgaW5zdGVhZCwgdXNlIHRoZSBtYWNoaW5lIElECiAgKiBzaW5jZSBpdCdzIGFjY2Vzc2libGUgd2l0aG91dCBuZWNlc3NhcmlseSBjb25uZWN0aW5nIHRvIHRoZSBidXMgYW5kCiAgKiBtYXkgYmUgcGVyc2lzdGVudCBiZXlvbmQgYSBzaW5nbGUgYnVzIGluc3RhbmNlIChhY3Jvc3MgcmVib290cyBmb3IKLSAqIGV4YW1wbGUpLiBTZWUgZGJ1c190cnlfZ2V0X2xvY2FsX21hY2hpbmVfaWQoKS4KKyAqIGV4YW1wbGUpLiBTZWUgZGJ1c19nZXRfbG9jYWxfbWFjaGluZV9pZCgpLgogICoKICAqIEluIGFkZGl0aW9uIHRvIGFuIElEIGZvciBlYWNoIGJ1cyBhbmQgYW4gSUQgZm9yIGVhY2ggbWFjaGluZSwgdGhlcmUgaXMKICAqIGFuIElEIGZvciBlYWNoIGFkZHJlc3MgdGhhdCB0aGUgYnVzIGlzIGxpc3RlbmluZyBvbjsgdGhhdCBjYW4KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1jb25uZWN0aW9uLmMgYi9kYnVzL2RidXMtY29ubmVjdGlvbi5jCmluZGV4IGM1MjViNmQuLmUzYTg5YjUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1jb25uZWN0aW9uLmMKKysrIGIvZGJ1cy9kYnVzLWNvbm5lY3Rpb24uYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlICJkYnVzLXNoYXJlZC5oIgogI2luY2x1ZGUgImRidXMtY29ubmVjdGlvbi5oIgogI2luY2x1ZGUgImRidXMtbGlzdC5oIgpAQCAtMjE4Myw5ICsyMTg0LDkgQEAKIH0KIAogc3RhdGljIERCdXNNZXNzYWdlICoKLWdlbmVyYXRlX2xvY2FsX2Vycm9yX21lc3NhZ2UgKGRidXNfdWludDMyX3Qgc2VyaWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yX21zZykKK2dlbmVyYXRlX2xvY2FsX2Vycm9yX21lc3NhZ2UgKGRidXNfdWludDMyX3Qgc2VyaWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmVycm9yX25hbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXJyb3JfbXNnKQogewogICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKICAgbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXcgKERCVVNfTUVTU0FHRV9UWVBFX0VSUk9SKTsKQEAgLTIzMjUsMTEgKzIzMjYsMTAgQEAKIHsKICAgX2RidXNfcGVuZGluZ19jYWxsX3NldF9yZXBseV91bmxvY2tlZCAocGVuZGluZywgbWVzc2FnZSk7CiAgIF9kYnVzX3BlbmRpbmdfY2FsbF9yZWZfdW5sb2NrZWQgKHBlbmRpbmcpOyAvKiBpbiBjYXNlIHRoZXJlJ3Mgbm8gYXBwIHdpdGggYSByZWYgaGVsZCAqLwotICBfZGJ1c19wZW5kaW5nX2NhbGxfc3RhcnRfY29tcGxldGlvbl91bmxvY2tlZChwZW5kaW5nKTsKICAgX2RidXNfY29ubmVjdGlvbl9kZXRhY2hfcGVuZGluZ19jYWxsX2FuZF91bmxvY2sgKGNvbm5lY3Rpb24sIHBlbmRpbmcpOwotCisgCiAgIC8qIE11c3QgYmUgY2FsbGVkIHVubG9ja2VkIHNpbmNlIGl0IGludm9rZXMgYXBwIGNhbGxiYWNrICovCi0gIF9kYnVzX3BlbmRpbmdfY2FsbF9maW5pc2hfY29tcGxldGlvbiAocGVuZGluZyk7CisgIF9kYnVzX3BlbmRpbmdfY2FsbF9jb21wbGV0ZSAocGVuZGluZyk7CiAgIGRidXNfcGVuZGluZ19jYWxsX3VucmVmIChwZW5kaW5nKTsKIH0KIApAQCAtMjQ3Nyw4ICsyNDc3LDYgQEAKIAogICAgICAgLyogb24gT09NIGVycm9yX21zZyBpcyBzZXQgdG8gTlVMTCAqLwogICAgICAgY29tcGxldGVfcGVuZGluZ19jYWxsX2FuZF91bmxvY2sgKGNvbm5lY3Rpb24sIHBlbmRpbmcsIGVycm9yX21zZyk7Ci0gICAgICBpZiAoZXJyb3JfbXNnICE9IE5VTEwpCi0gICAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAoZXJyb3JfbXNnKTsKICAgICAgIGRidXNfcGVuZGluZ19jYWxsX3VucmVmIChwZW5kaW5nKTsKICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTI4LDcgKzI1MjYsNyBAQAogICAgICAgICB7ICAgICAgICAgIAogICAgICAgICAgIC8qIGJsb2NrIGFnYWluLCB3ZSBkb24ndCBoYXZlIHRoZSByZXBseSBidWZmZXJlZCB5ZXQuICovCiAgICAgICAgICAgX2RidXNfY29ubmVjdGlvbl9kb19pdGVyYXRpb25fdW5sb2NrZWQgKGNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfSVRFUkFUSU9OX0RPX1JFQURJTkcgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0lURVJBVElPTl9CTE9DSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9taWxsaXNlY29uZHMgLSBlbGFwc2VkX21pbGxpc2Vjb25kcyk7CkBAIC0yNzYxLDYgKzI3NTksOCBAQAogICBfZGJ1c19oYXNoX3RhYmxlX3VucmVmIChjb25uZWN0aW9uLT5wZW5kaW5nX3JlcGxpZXMpOwogICBjb25uZWN0aW9uLT5wZW5kaW5nX3JlcGxpZXMgPSBOVUxMOwogICAKKyAgX2RidXNfbGlzdF9jbGVhciAoJmNvbm5lY3Rpb24tPmZpbHRlcl9saXN0KTsKKyAgCiAgIF9kYnVzX2xpc3RfZm9yZWFjaCAoJmNvbm5lY3Rpb24tPm91dGdvaW5nX21lc3NhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgIGZyZWVfb3V0Z29pbmdfbWVzc2FnZSwKIAkJICAgICAgY29ubmVjdGlvbik7CkBAIC0yODM0LDggKzI4MzQsOCBAQAogICAgICAgICB7CiAgICAgICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJUaGUgbGFzdCByZWZlcmVuY2Ugb24gYSBjb25uZWN0aW9uIHdhcyBkcm9wcGVkIHdpdGhvdXQgY2xvc2luZyB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBhbiBhcHBsaWNhdGlvbi4gU2VlIGRidXNfY29ubmVjdGlvbl91bnJlZigpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNoYXJlYWJsZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3N0IGxpa2VseSwgdGhlIGFwcGxpY2F0aW9uIGNhbGxlZCB1bnJlZigpIHRvbyBtYW55IHRpbWVzIGFuZCByZW1vdmVkIGEgcmVmZXJlbmNlIGJlbG9uZ2luZyB0byBsaWJkYnVzLCBzaW5jZSB0aGlzIGlzIGEgc2hhcmVkIGNvbm5lY3Rpb24uIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW9zdCBsaWtlbHksIHRoZSBhcHBsaWNhdGlvbiB3YXMgc3VwcG9zZWQgdG8gY2FsbCBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UoKSwgc2luY2UgdGhpcyBpcyBhIHByaXZhdGUgY29ubmVjdGlvbi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vc3QgbGlrZWx5LCB0aGUgYXBwbGljYXRpb24gY2FsbGVkIHVucmVmKCkgdG9vIG1hbnkgdGltZXMgYW5kIHJlbW92ZWQgYSByZWZlcmVuY2UgYmVsb25naW5nIHRvIGxpYmRidXMsIHNpbmNlIHRoaXMgaXMgYSBzaGFyZWQgY29ubmVjdGlvbi5cbiIgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3N0IGxpa2VseSwgdGhlIGFwcGxpY2F0aW9uIHdhcyBzdXBwb3NlZCB0byBjYWxsIGRidXNfY29ubmVjdGlvbl9jbG9zZSgpLCBzaW5jZSB0aGlzIGlzIGEgcHJpdmF0ZSBjb25uZWN0aW9uLlxuIik7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTI5NDIsNyArMjk0Miw3IEBACiAgICAgewogICAgICAgQ09OTkVDVElPTl9VTkxPQ0sgKGNvbm5lY3Rpb24pOwogCi0gICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIkFwcGxpY2F0aW9ucyBtdXN0IG5vdCBjbG9zZSBzaGFyZWQgY29ubmVjdGlvbnMgLSBzZWUgZGJ1c19jb25uZWN0aW9uX2Nsb3NlKCkgZG9jcy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgYXBwbGljYXRpb24uIik7CisgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIkFwcGxpY2F0aW9ucyBtdXN0IG5vdCBjbG9zZSBzaGFyZWQgY29ubmVjdGlvbnMgLSBzZWUgZGJ1c19jb25uZWN0aW9uX2Nsb3NlKCkgZG9jcy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgYXBwbGljYXRpb24uXG4iKTsKICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTMwNjAsNyArMzA2MCw3IEBACiAgKiBkYnVzX2J1c19nZXRfaWQoKSBpbnN0ZWFkICh3aGljaCBpcyBqdXN0IGEgY29udmVuaWVuY2Ugd3JhcHBlcgogICogYXJvdW5kIHRoZSBvcmcuZnJlZWRlc2t0b3AuREJ1cy5HZXRJZCBtZXRob2QgaW52b2tlZCBvbiB0aGUgYnVzKS4KICAqCi0gKiBZb3UgY2FuIGFsc28gZ2V0IGEgbWFjaGluZSBJRDsgc2VlIGRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkKCkgdG8KKyAqIFlvdSBjYW4gYWxzbyBnZXQgYSBtYWNoaW5lIElEOyBzZWUgZGJ1c19nZXRfbG9jYWxfbWFjaGluZV9pZCgpIHRvCiAgKiBnZXQgdGhlIG1hY2hpbmUgeW91IGFyZSBvbi4gIFRoZXJlIGlzbid0IGEgY29udmVuaWVuY2Ugd3JhcHBlciwgYnV0CiAgKiB5b3UgY2FuIGludm9rZSBvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLkdldE1hY2hpbmVJZCBvbiBhbnkgcGVlcgogICogdG8gZ2V0IHRoZSBtYWNoaW5lIElEIG9uIHRoZSBvdGhlciBlbmQuCkBAIC00MzMxLDggKzQzMzEsMTMgQEAKICAgICAgICAgICBDT05ORUNUSU9OX1VOTE9DSyAoY29ubmVjdGlvbik7ICAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIkV4aXRpbmcgb24gRGlzY29ubmVjdGVkIHNpZ25hbFxuIik7Ci0gICAgICAgICAgX2RidXNfZXhpdCAoMSk7Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiQ2FsbCB0byBleGl0KCkgcmV0dXJuZWQiKTsKKyAgICAgICAgICBpZiAocmFpc2UgKFNJR1RFUk0pICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJGYWlsZWQgdG8gcmFpc2UgYSBTSUdURVJNIHNpZ25hbC4gRXhpdGluZ1xuIik7CisgICAgICAgICAgICAgIF9kYnVzX2V4aXQgKDEpOworICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJDYWxsIHRvIGV4aXQoKSByZXR1cm5lZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgCkBAIC01NjU1LDcgKzU2NjAsNyBAQAogI2lmbmRlZiBEQlVTX0RJU0FCTEVfQ0hFQ0tTCiAgIGlmIChmaWx0ZXIgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIkF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBmdW5jdGlvbiAlcCB1c2VyIGRhdGEgJXAsIGJ1dCBubyBzdWNoIGZpbHRlciBoYXMgYmVlbiBhZGRlZCIsCisgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIkF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBmdW5jdGlvbiAlcCB1c2VyIGRhdGEgJXAsIGJ1dCBubyBzdWNoIGZpbHRlciBoYXMgYmVlbiBhZGRlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgdXNlcl9kYXRhKTsKICAgICAgIHJldHVybjsKICAgICB9CkBAIC01Nzc0LDcgKzU3NzksNyBAQAogCiAgIGlmIChkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfT0JKRUNUX1BBVEhfSU5fVVNFKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIF9kYnVzX3dhcm4gKCIlc1xuIiwgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQpAQCAtNTg0Niw3ICs1ODUxLDcgQEAKIAogICBpZiAoZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX09CSkVDVF9QQVRIX0lOX1VTRSkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIiVzIiwgZXJyb3IubWVzc2FnZSk7CisgICAgICBfZGJ1c193YXJuICgiJXNcbiIsIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1jb25uZWN0aW9uLmggYi9kYnVzL2RidXMtY29ubmVjdGlvbi5oCmluZGV4IGJlZDU0MjQuLmZlNGQwNGUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1jb25uZWN0aW9uLmgKKysrIGIvZGJ1cy9kYnVzLWNvbm5lY3Rpb24uaApAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBEQlVTX0NPTk5FQ1RJT05fSAogCiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLWVycm9ycy5oPgotI2luY2x1ZGUgPGRidXMvZGJ1cy1tYWNyb3MuaD4KICNpbmNsdWRlIDxkYnVzL2RidXMtbWVtb3J5Lmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLW1lc3NhZ2UuaD4KICNpbmNsdWRlIDxkYnVzL2RidXMtc2hhcmVkLmg+CkBAIC00MzksMzUgKzQzOCw2IEBACiBkYnVzX2Jvb2xfdCBkYnVzX2Nvbm5lY3Rpb25fZ2V0X3NvY2tldCAgICAgICAgICAgICAoREJ1c0Nvbm5lY3Rpb24gICAgICAgICAgICAgICpjb25uZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAqZmQpOwogCi0vKioKLSAqIENsZWFyIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlciB0aGF0IGNvbnRhaW5zIGEgI0RCdXNDb25uZWN0aW9uLgotICogSWYgaXQgZG9lcyBub3QgY29udGFpbiAjTlVMTCwgdGhlIGNvbm5lY3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseQotICogdGhlcmUgaXMgdW5yZWZlcmVuY2VkIHdpdGggZGJ1c19jb25uZWN0aW9uX3VucmVmKCkuCi0gKgotICogRm9yIGV4YW1wbGUsIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IKLSAqIG90aGVyIHJlZmVyZW5jZS1jb3VudGVkIHR5cGVzIGNhbiBiZSB1c2VkIGluIGNvZGUgbGlrZSB0aGlzOgotICoKLSAqIEBjb2RlCi0gKiBEQnVzQ29ubmVjdGlvbiAqY29ubiA9IE5VTEw7Ci0gKiBzdHJ1Y3QgeyAuLi47IERCdXNNZXNzYWdlICptOyAuLi4gfSAqbGFyZ2VyX3N0cnVjdHVyZSA9IC4uLjsKLSAqCi0gKiAuLi4gY29kZSB0aGF0IG1pZ2h0IHNldCBjb25uIG9yIG0gdG8gYmUgbm9uLU5VTEwgLi4uCi0gKgotICogZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmY29ubik7Ci0gKiBkYnVzX2NsZWFyX21lc3NhZ2UgKCZsYXJnZXJfc3RydWN0dXJlLT5tKTsKLSAqIEBlbmRjb2RlCi0gKgotICogQHBhcmFtIHBvaW50ZXJfdG9fY29ubmVjdGlvbiBBIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvciBzdHJ1Y3QgbWVtYmVyLgotICogcG9pbnRlcl90b19jb25uZWN0aW9uIG11c3Qgbm90IGJlICNOVUxMLCBidXQgKnBvaW50ZXJfdG9fY29ubmVjdGlvbgotICogbWF5IGJlICNOVUxMLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRidXNfY2xlYXJfY29ubmVjdGlvbiAoREJ1c0Nvbm5lY3Rpb24gKipwb2ludGVyX3RvX2Nvbm5lY3Rpb24pCi17Ci0gIF9kYnVzX2NsZWFyX3BvaW50ZXJfaW1wbCAoREJ1c0Nvbm5lY3Rpb24sIHBvaW50ZXJfdG9fY29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYpOwotfQotCiAvKiogQH0gKi8KIAogCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtY3JlZGVudGlhbHMuYyBiL2RidXMvZGJ1cy1jcmVkZW50aWFscy5jCmluZGV4IDVmYTc1NGMuLjE1MWJiMDAgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1jcmVkZW50aWFscy5jCisrKyBiL2RidXMvZGJ1cy1jcmVkZW50aWFscy5jCkBAIC0yNjcsMTAgKzI2NywxMCBAQAogICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzLT5saW51eF9zZWN1cml0eV9sYWJlbCAhPSBOVUxMOwogICAgIGNhc2UgREJVU19DUkVERU5USUFMX0FEVF9BVURJVF9EQVRBX0lEOgogICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzLT5hZHRfYXVkaXRfZGF0YSAhPSBOVUxMOwotICAgIGRlZmF1bHQ6Ci0gICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJVbmtub3duIGNyZWRlbnRpYWwgZW51bSB2YWx1ZSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KKworICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJVbmtub3duIGNyZWRlbnRpYWwgZW51bSB2YWx1ZSIpOworICByZXR1cm4gRkFMU0U7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWRhdGFzbG90LmMgYi9kYnVzL2RidXMtZGF0YXNsb3QuYwppbmRleCBhNGIzYmZjLi5lMzdjOWRkIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtZGF0YXNsb3QuYworKysgYi9kYnVzL2RidXMtZGF0YXNsb3QuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgICBfZGJ1c19kYXRhX3Nsb3RfYWxsb2NhdG9yX2FsbG9jICgmYWxsb2NhdG9yLCAmdG1wKTsKIAogICAgICAgaWYgKHRtcCAhPSBpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWQgbm90IGFsbG9jYXRlIHNsb3RzIGluIG51bWVyaWMgb3JkZXIiKTsKKyAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkIG5vdCBhbGxvY2F0ZSBzbG90cyBpbiBudW1lcmljIG9yZGVyXG4iKTsKIAogICAgICAgKytpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1lcnJvcnMuaCBiL2RidXMvZGJ1cy1lcnJvcnMuaAppbmRleCAzODA0MDg1Li5lNjMxMzlhIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtZXJyb3JzLmgKKysrIGIvZGJ1cy9kYnVzLWVycm9ycy5oCkBAIC02OSw3ICs2OSw3IEBACiB2b2lkICAgICAgICBkYnVzX3NldF9lcnJvciAgICAgICAoREJ1c0Vycm9yICAgICAgICplcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgX0RCVVNfR05VQ19QUklOVEYgKDMsIDQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiBEQlVTX0VYUE9SVAogdm9pZCAgICAgICAgZGJ1c19zZXRfZXJyb3JfY29uc3QgKERCdXNFcnJvciAgICAgICAqZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICpuYW1lLApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWZpbGUtd2luLmMgYi9kYnVzL2RidXMtZmlsZS13aW4uYwppbmRleCBiZGQwZGNmLi4wZGJlMTFlIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtZmlsZS13aW4uYworKysgYi9kYnVzL2RidXMtZmlsZS13aW4uYwpAQCAtNzMsNyArNzMsNyBAQAogICAgIHsKICAgICAgIGNoYXIgKmVtc2cgPSBfZGJ1c193aW5fZXJyb3Jfc3RyaW5nIChHZXRMYXN0RXJyb3IgKCkpOwogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBfZGJ1c193aW5fZXJyb3JfZnJvbV9sYXN0X2Vycm9yICgpLAotICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCBmcm9tICVwOiAlcyIsIGhuZCwgZW1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZWFkIGZyb20gMHgleDogJXMiLCBobmQsIGVtc2cpOwogICAgICAgX2RidXNfd2luX2ZyZWVfZXJyb3Jfc3RyaW5nIChlbXNnKTsKICAgICAgIHJldHVybiAtMTsKICAgICB9CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtaGFzaC5jIGIvZGJ1cy9kYnVzLWhhc2guYwppbmRleCBiYTVlN2NhLi44ZjdkMDRiIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtaGFzaC5jCisrKyBiL2RidXMvZGJ1cy1oYXNoLmMKQEAgLTcyNCw5ICs3MjQsOCBAQAogICogYmVjYXVzZSBjcmVhdGVfaWZfbm90X2ZvdW5kIHdhcyAjRkFMU0UgYW5kIHRoZSBlbnRyeQogICogZGlkIG5vdCBleGlzdC4KICAqCi0gKiBJZiBjcmVhdGVfaWZfbm90X2ZvdW5kIGlzICNUUlVFLCB0aGUgaGFzaAotICogdGFibGUgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBrZXkgdGhhdCdzIHBhc3NlZCBpbiAoZWl0aGVyIHVzaW5nIGl0IHRvIGNyZWF0ZQotICogdGhlIGVudHJ5LCBvciBmcmVlaW5nIGl0IGltbWVkaWF0ZWx5KS4KKyAqIElmIGNyZWF0ZV9pZl9ub3RfZm91bmQgaXMgI1RSVUUgYW5kIHRoZSBlbnRyeSBpcyBjcmVhdGVkLCB0aGUgaGFzaAorICogdGFibGUgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBrZXkgdGhhdCdzIHBhc3NlZCBpbi4KICAqCiAgKiBGb3IgYSBoYXNoIHRhYmxlIG9mIHR5cGUgI0RCVVNfSEFTSF9JTlQsIGNhc3QgdGhlIGludAogICoga2V5IHRvIHRoZSBrZXkgcGFyYW1ldGVyIHVzaW5nICNfREJVU19JTlRfVE9fUE9JTlRFUigpLgpAQCAtNzU1LDE1ICs3NTQsNyBAQAogCiAgIGlmIChlbnRyeSA9PSBOVUxMKQogICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoY3JlYXRlX2lmX25vdF9mb3VuZCkKLSAgICB7Ci0gICAgICBpZiAodGFibGUtPmZyZWVfa2V5X2Z1bmN0aW9uICYmIGVudHJ5LT5rZXkgIT0ga2V5KQotICAgICAgICAoKiB0YWJsZS0+ZnJlZV9rZXlfZnVuY3Rpb24pIChlbnRyeS0+a2V5KTsKLQotICAgICAgZW50cnktPmtleSA9IGtleTsKLSAgICB9Ci0KKyAgCiAgIHJlYWwtPnRhYmxlID0gdGFibGU7CiAgIHJlYWwtPmJ1Y2tldCA9IGJ1Y2tldDsKICAgcmVhbC0+ZW50cnkgPSBlbnRyeTsKQEAgLTk1MCw3ICs5NDEsNyBAQAogICAgIHsKICAgICAgIC8qIG92ZXJmbG93IHBhcmFub2lhICovCiAgICAgICBpZiAodGFibGUtPm5fYnVja2V0cyA8IF9EQlVTX0lOVF9NQVggLyA0ICYmCi0gICAgICAgICAgdGFibGUtPmRvd25fc2hpZnQgPj0gMikKKyAgICAgICAgICB0YWJsZS0+ZG93bl9zaGlmdCA+PSAwKQogICAgICAgICBuZXdfYnVja2V0cyA9IHRhYmxlLT5uX2J1Y2tldHMgKiA0OwogICAgICAgZWxzZQogICAgICAgICByZXR1cm47IC8qIGNhbid0IGdyb3cgYW55bW9yZSAqLwpAQCAtMTAwMiw3ICs5OTMsNiBAQAogICAKICAgX2RidXNfYXNzZXJ0ICh0YWJsZS0+bG9fcmVidWlsZF9zaXplID49IDApOwogICBfZGJ1c19hc3NlcnQgKHRhYmxlLT5oaV9yZWJ1aWxkX3NpemUgPiB0YWJsZS0+bG9fcmVidWlsZF9zaXplKTsKLSAgX2RidXNfYXNzZXJ0ICh0YWJsZS0+ZG93bl9zaGlmdCA+PSAwKTsKICAgX2RidXNfYXNzZXJ0ICh0YWJsZS0+bWFzayAhPSAwKTsKICAgLyogdGhlIG1hc2sgaXMgZXNzZW50aWFsbHkgdGhlIG1heCBpbmRleCAqLwogICBfZGJ1c19hc3NlcnQgKHRhYmxlLT5tYXNrIDwgdGFibGUtPm5fYnVja2V0cyk7CkBAIC0xNDA5LDEzNSArMTM5OSw2IEBACiAgIHJldHVybiB0YWJsZS0+bl9lbnRyaWVzOwogfQogCi0vKioKLSAqIEltcG9ydHMgYSBzdHJpbmcgYXJyYXkgaW50byBhIGhhc2ggdGFibGUKLSAqIFRoZSBoYXNoIHRhYmxlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHdpdGggc3RyaW5nIGtleXMsCi0gKiBhbmQgZGJ1c19mcmVlKCkgYXMgYm90aCBrZXkgYW5kIHZhbHVlIGZyZWUtZnVuY3Rpb24uCi0gKgotICogQHBhcmFtIHRhYmxlIHRoZSBoYXNoIHRhYmxlCi0gKiBAcGFyYW0gYXJyYXkgdGhlIHN0cmluZyBhcnJheSB0byBpbXBvcnQKLSAqIEBwYXJhbSBkZWxpbWl0ZXIgdGhlIGRlbGltaXRlciB0byBzZXBhcmF0ZSBrZXkgYW5kIHZhbHVlCi0gKiBAcmV0dXJuICNUUlVFIG9uIHN1Y2Nlc3MuCi0gKiBAcmV0dXJuICNGQUxTRSBpZiBub3QgZW5vdWdoIG1lbW9yeS4KLSAqLwotCi1kYnVzX2Jvb2xfdAotX2RidXNfaGFzaF90YWJsZV9mcm9tX2FycmF5IChEQnVzSGFzaFRhYmxlICp0YWJsZSwgY2hhciAqKmFycmF5LCBjaGFyIGRlbGltaXRlcikKLXsKLSAgREJ1c1N0cmluZyAgIGtleTsKLSAgREJ1c1N0cmluZyAgIHZhbHVlOwotICBpbnQgICAgICAgICAgaTsKLSAgZGJ1c19ib29sX3QgIHJldHZhbCA9IEZBTFNFOwotCi0gIF9kYnVzX2Fzc2VydCAodGFibGUgIT0gTlVMTCk7Ci0gIF9kYnVzX2Fzc2VydCAoYXJyYXkgIT0gTlVMTCk7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmtleSkpCi0gICAgewotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZ2YWx1ZSkpCi0gICAgewotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZrZXkpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyBpKyspCi0gICAgewotICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICgma2V5LCBhcnJheVtpXSkpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBpZiAoX2RidXNfc3RyaW5nX3NwbGl0X29uX2J5dGUgKCZrZXksIGRlbGltaXRlciwgJnZhbHVlKSkKLSAgICAgICAgewotICAgICAgICAgIGNoYXIgKmhhc2hfa2V5LCAqaGFzaF92YWx1ZTsKLQotICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX3N0ZWFsX2RhdGEgKCZrZXksICZoYXNoX2tleSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX3N0ZWFsX2RhdGEgKCZ2YWx1ZSwgJmhhc2hfdmFsdWUpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3N0cmluZyAodGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfa2V5LCBoYXNoX3ZhbHVlKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJmtleSwgMCk7Ci0gICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJnZhbHVlLCAwKTsKLSAgICB9Ci0KLSAgaWYgKGFycmF5W2ldICE9IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgcmV0dmFsID0gVFJVRTsKLW91dDoKLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmtleSk7Ci0gIF9kYnVzX3N0cmluZ19mcmVlICgmdmFsdWUpOwotCi0gIHJldHVybiByZXR2YWw7Ci19Ci0KLS8qKgotICogQ3JlYXRlcyBhIHN0cmluZyBhcnJheSBmcm9tIGEgaGFzaCB0YWJsZQotICoKLSAqIEBwYXJhbSB0YWJsZSB0aGUgaGFzaCB0YWJsZQotICogQHBhcmFtIGRlbGltaXRlciB0aGUgZGVsaW1pdGVyIHRvIGpvaW4ga2V5IGFuZCB2YWx1ZQotICogQHJldHVybiBwb2ludGVyIHRvIGNyZWF0ZWQgc3RyaW5nIGFycmF5IChmcmVlIHdpdGggZGJ1c19mcmVlX3N0cmluZ19hcnJheSkKLSAqIEByZXR1cm4gI0ZBTFNFIGlmIG5vdCBlbm91Z2ggbWVtb3J5LgotICovCi1jaGFyICoqCi1fZGJ1c19oYXNoX3RhYmxlX3RvX2FycmF5IChEQnVzSGFzaFRhYmxlICp0YWJsZSwgY2hhciBkZWxpbWl0ZXIpCi17Ci0gIGludCBpLCBsZW5ndGg7Ci0gIERCdXNTdHJpbmcgZW50cnk7Ci0gIERCdXNIYXNoSXRlciBpdGVyOwotICBjaGFyICoqYXJyYXk7Ci0KLSAgX2RidXNfYXNzZXJ0ICh0YWJsZSAhPSBOVUxMKTsKLQotICBsZW5ndGggPSBfZGJ1c19oYXNoX3RhYmxlX2dldF9uX2VudHJpZXMgKHRhYmxlKTsKLQotICBhcnJheSA9IGRidXNfbmV3MCAoY2hhciAqLCBsZW5ndGggKyAxKTsKLQotICBpZiAoYXJyYXkgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpID0gMDsKLSAgX2RidXNfaGFzaF9pdGVyX2luaXQgKHRhYmxlLCAmaXRlcik7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmVudHJ5KSkKLSAgICB7Ci0gICAgICBkYnVzX2ZyZWVfc3RyaW5nX2FycmF5IChhcnJheSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgd2hpbGUgKF9kYnVzX2hhc2hfaXRlcl9uZXh0ICgmaXRlcikpCi0gICAgewotICAgICAgY29uc3QgY2hhciAqa2V5LCAqdmFsdWU7Ci0KLSAgICAgIGtleSA9IChjb25zdCBjaGFyICopIF9kYnVzX2hhc2hfaXRlcl9nZXRfc3RyaW5nX2tleSAoJml0ZXIpOwotICAgICAgdmFsdWUgPSAoY29uc3QgY2hhciAqKSBfZGJ1c19oYXNoX2l0ZXJfZ2V0X3ZhbHVlICgmaXRlcik7Ci0KLSAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKCZlbnRyeSwgIiVzJWMlcyIsIGtleSwgZGVsaW1pdGVyLCB2YWx1ZSkpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBpZiAoIV9kYnVzX3N0cmluZ19zdGVhbF9kYXRhICgmZW50cnksIGFycmF5ICsgaSkpCi0gICAgICAgIGJyZWFrOwotICAgICAgaSsrOwotICAgIH0KLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmVudHJ5KTsKLQotICBpZiAoaSAhPSBsZW5ndGgpCi0gICAgewotICAgICAgZGJ1c19mcmVlX3N0cmluZ19hcnJheSAoYXJyYXkpOwotICAgICAgYXJyYXkgPSBOVUxMOwotICAgIH0KLQotICByZXR1cm4gYXJyYXk7Ci19Ci0KIC8qKiBAfSAqLwogCiAjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKQEAgLTE1NjQsMTkgKzE0MjUsNiBAQAogICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1zdGVhbCAodm9pZCAqcHRyKQotewotICAvKiBAcHRyIGlzIHBhc3NlZCBpbiBhcyB2b2lkKiB0byBhdm9pZCBjYXN0aW5nIGluIHRoZSBjYWxsICovCi0gIHZvaWQgKipfcHRyID0gKHZvaWQgKiopIHB0cjsKLSAgdm9pZCAqdmFsOwotCi0gIHZhbCA9ICpfcHRyOwotICAqX3B0ciA9IE5VTEw7Ci0KLSAgcmV0dXJuIHZhbDsKLX0KLQogLyoqCiAgKiBAaW5ncm91cCBEQnVzSGFzaFRhYmxlSW50ZXJuYWxzCiAgKiBVbml0IHRlc3QgZm9yIERCdXNIYXNoVGFibGUKQEAgLTE1OTMsOCArMTQ0MSw2IEBACiAjZGVmaW5lIE5fSEFTSF9LRVlTIDUwMDAKICAgY2hhciAqKmtleXM7CiAgIGRidXNfYm9vbF90IHJldCA9IEZBTFNFOwotICBjaGFyICpzdHJfa2V5ID0gTlVMTDsKLSAgY2hhciAqc3RyX3ZhbHVlID0gTlVMTDsKIAogICBrZXlzID0gZGJ1c19uZXcgKGNoYXIgKiwgTl9IQVNIX0tFWVMpOwogICBpZiAoa2V5cyA9PSBOVUxMKQpAQCAtMTY0MSw1MSArMTQ4Nyw1MSBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAzMDAwKQogICAgIHsKLSAgICAgIGNvbnN0IHZvaWQgKm91dF92YWx1ZTsKKyAgICAgIHZvaWQgKnZhbHVlOworICAgICAgY2hhciAqa2V5OwogCi0gICAgICBzdHJfa2V5ID0gX2RidXNfc3RyZHVwIChrZXlzW2ldKTsKLSAgICAgIGlmIChzdHJfa2V5ID09IE5VTEwpCisgICAgICBrZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOworICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoIlZhbHVlISIpOwotICAgICAgaWYgKHN0cl92YWx1ZSA9PSBOVUxMKQorICAgICAgdmFsdWUgPSBfZGJ1c19zdHJkdXAgKCJWYWx1ZSEiKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKLQorICAgICAgCiAgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3N0cmluZyAodGFibGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZWFsICgmc3RyX2tleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlYWwgKCZzdHJfdmFsdWUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlKSkKICAgICAgICAgZ290byBvdXQ7CiAKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7Ci0gICAgICBpZiAoc3RyX3ZhbHVlID09IE5VTEwpCisgICAgICB2YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBvdXQ7Ci0KKyAgICAgIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9pbnQgKHRhYmxlMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdGVhbCAoJnN0cl92YWx1ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHZhbHVlKSkKICAgICAgICAgZ290byBvdXQ7CiAKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7Ci0gICAgICBpZiAoc3RyX3ZhbHVlID09IE5VTEwpCisgICAgICB2YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBvdXQ7Ci0KKyAgICAgIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF91aW50cHRyICh0YWJsZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHN0ZWFsICgmc3RyX3ZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCB2YWx1ZSkpCiAgICAgICAgIGdvdG8gb3V0OwogCiAgICAgICBfZGJ1c19hc3NlcnQgKGNvdW50X2VudHJpZXMgKHRhYmxlMSkgPT0gaSArIDEpOwogICAgICAgX2RidXNfYXNzZXJ0IChjb3VudF9lbnRyaWVzICh0YWJsZTIpID09IGkgKyAxKTsKICAgICAgIF9kYnVzX2Fzc2VydCAoY291bnRfZW50cmllcyAodGFibGUzKSA9PSBpICsgMSk7CiAKLSAgICAgIG91dF92YWx1ZSA9IF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX3N0cmluZyAodGFibGUxLCBrZXlzW2ldKTsKLSAgICAgIF9kYnVzX2Fzc2VydCAob3V0X3ZhbHVlICE9IE5VTEwpOwotICAgICAgX2RidXNfYXNzZXJ0IChzdHJjbXAgKG91dF92YWx1ZSwgIlZhbHVlISIpID09IDApOworICAgICAgdmFsdWUgPSBfZGJ1c19oYXNoX3RhYmxlX2xvb2t1cF9zdHJpbmcgKHRhYmxlMSwga2V5c1tpXSk7CisgICAgICBfZGJ1c19hc3NlcnQgKHZhbHVlICE9IE5VTEwpOworICAgICAgX2RidXNfYXNzZXJ0IChzdHJjbXAgKHZhbHVlLCAiVmFsdWUhIikgPT0gMCk7CiAKLSAgICAgIG91dF92YWx1ZSA9IF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX2ludCAodGFibGUyLCBpKTsKLSAgICAgIF9kYnVzX2Fzc2VydCAob3V0X3ZhbHVlICE9IE5VTEwpOwotICAgICAgX2RidXNfYXNzZXJ0IChzdHJjbXAgKG91dF92YWx1ZSwga2V5c1tpXSkgPT0gMCk7CisgICAgICB2YWx1ZSA9IF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX2ludCAodGFibGUyLCBpKTsKKyAgICAgIF9kYnVzX2Fzc2VydCAodmFsdWUgIT0gTlVMTCk7CisgICAgICBfZGJ1c19hc3NlcnQgKHN0cmNtcCAodmFsdWUsIGtleXNbaV0pID09IDApOwogCi0gICAgICBvdXRfdmFsdWUgPSBfZGJ1c19oYXNoX3RhYmxlX2xvb2t1cF91aW50cHRyICh0YWJsZTMsIGkpOwotICAgICAgX2RidXNfYXNzZXJ0IChvdXRfdmFsdWUgIT0gTlVMTCk7Ci0gICAgICBfZGJ1c19hc3NlcnQgKHN0cmNtcCAob3V0X3ZhbHVlLCBrZXlzW2ldKSA9PSAwKTsKKyAgICAgIHZhbHVlID0gX2RidXNfaGFzaF90YWJsZV9sb29rdXBfdWludHB0ciAodGFibGUzLCBpKTsKKyAgICAgIF9kYnVzX2Fzc2VydCAodmFsdWUgIT0gTlVMTCk7CisgICAgICBfZGJ1c19hc3NlcnQgKHN0cmNtcCAodmFsdWUsIGtleXNbaV0pID09IDApOwogCiAgICAgICArK2k7CiAgICAgfQpAQCAtMTcyNiwzOCArMTU3Miw0MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19mcmVlLCBkYnVzX2ZyZWUpOwogICBpZiAodGFibGUxID09IE5VTEwpCiAgICAgZ290byBvdXQ7Ci0KKyAgCiAgIHRhYmxlMiA9IF9kYnVzX2hhc2hfdGFibGVfbmV3IChEQlVTX0hBU0hfSU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZGJ1c19mcmVlKTsKICAgaWYgKHRhYmxlMiA9PSBOVUxMKQogICAgIGdvdG8gb3V0OwotCisgIAogICBpID0gMDsKICAgd2hpbGUgKGkgPCA1MDAwKQogICAgIHsKLSAgICAgIHN0cl9rZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOwotICAgICAgaWYgKHN0cl9rZXkgPT0gTlVMTCkKKyAgICAgIGNoYXIgKmtleTsKKyAgICAgIHZvaWQgKnZhbHVlOyAgICAgIAorICAgICAgCisgICAgICBrZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOworICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoIlZhbHVlISIpOwotICAgICAgaWYgKHN0cl92YWx1ZSA9PSBOVUxMKQorICAgICAgdmFsdWUgPSBfZGJ1c19zdHJkdXAgKCJWYWx1ZSEiKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKLQorICAgICAgCiAgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3N0cmluZyAodGFibGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZWFsICgmc3RyX2tleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlYWwgKCZzdHJfdmFsdWUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlKSkKICAgICAgICAgZ290byBvdXQ7CiAKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7Ci0gICAgICBpZiAoc3RyX3ZhbHVlID09IE5VTEwpCisgICAgICB2YWx1ZSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBvdXQ7Ci0KKyAgICAgIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9pbnQgKHRhYmxlMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdGVhbCAoJnN0cl92YWx1ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHZhbHVlKSkKICAgICAgICAgZ290byBvdXQ7Ci0KKyAgICAgIAogICAgICAgX2RidXNfYXNzZXJ0IChjb3VudF9lbnRyaWVzICh0YWJsZTEpID09IGkgKyAxKTsKICAgICAgIF9kYnVzX2Fzc2VydCAoY291bnRfZW50cmllcyAodGFibGUyKSA9PSBpICsgMSk7Ci0KKyAgICAgIAogICAgICAgKytpOwogICAgIH0KIApAQCAtMTc2NSwyMiArMTYxMywyMiBAQAogICB3aGlsZSAoX2RidXNfaGFzaF9pdGVyX25leHQgKCZpdGVyKSkKICAgICB7CiAgICAgICBjb25zdCBjaGFyICprZXk7Ci0gICAgICBjb25zdCB2b2lkICp2YWx1ZTsKKyAgICAgIHZvaWQgKnZhbHVlOwogCiAgICAgICBrZXkgPSBfZGJ1c19oYXNoX2l0ZXJfZ2V0X3N0cmluZ19rZXkgKCZpdGVyKTsKICAgICAgIHZhbHVlID0gX2RidXNfaGFzaF9pdGVyX2dldF92YWx1ZSAoJml0ZXIpOwogCiAgICAgICBfZGJ1c19hc3NlcnQgKF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX3N0cmluZyAodGFibGUxLCBrZXkpID09IHZhbHVlKTsKIAotICAgICAgc3RyX3ZhbHVlID0gX2RidXNfc3RyZHVwICgiRGlmZmVyZW50IHZhbHVlISIpOwotICAgICAgaWYgKHN0cl92YWx1ZSA9PSBOVUxMKQorICAgICAgdmFsdWUgPSBfZGJ1c19zdHJkdXAgKCJEaWZmZXJlbnQgdmFsdWUhIik7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBvdXQ7CisgICAgICAKKyAgICAgIF9kYnVzX2hhc2hfaXRlcl9zZXRfdmFsdWUgKCZpdGVyLCB2YWx1ZSk7CiAKLSAgICAgIHZhbHVlID0gc3RyX3ZhbHVlOwotICAgICAgX2RidXNfaGFzaF9pdGVyX3NldF92YWx1ZSAoJml0ZXIsIHN0ZWFsICgmc3RyX3ZhbHVlKSk7CiAgICAgICBfZGJ1c19hc3NlcnQgKF9kYnVzX2hhc2hfdGFibGVfbG9va3VwX3N0cmluZyAodGFibGUxLCBrZXkpID09IHZhbHVlKTsKICAgICB9Ci0KKyAgCiAgIF9kYnVzX2hhc2hfaXRlcl9pbml0ICh0YWJsZTEsICZpdGVyKTsKICAgd2hpbGUgKF9kYnVzX2hhc2hfaXRlcl9uZXh0ICgmaXRlcikpCiAgICAgewpAQCAtMTc5MywxOSArMTY0MSwxOSBAQAogICB3aGlsZSAoX2RidXNfaGFzaF9pdGVyX25leHQgKCZpdGVyKSkKICAgICB7CiAgICAgICBpbnQga2V5OwotICAgICAgY29uc3Qgdm9pZCAqdmFsdWU7CisgICAgICB2b2lkICp2YWx1ZTsKIAogICAgICAga2V5ID0gX2RidXNfaGFzaF9pdGVyX2dldF9pbnRfa2V5ICgmaXRlcik7CiAgICAgICB2YWx1ZSA9IF9kYnVzX2hhc2hfaXRlcl9nZXRfdmFsdWUgKCZpdGVyKTsKIAogICAgICAgX2RidXNfYXNzZXJ0IChfZGJ1c19oYXNoX3RhYmxlX2xvb2t1cF9pbnQgKHRhYmxlMiwga2V5KSA9PSB2YWx1ZSk7CiAKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoIkRpZmZlcmVudCB2YWx1ZSEiKTsKLSAgICAgIGlmIChzdHJfdmFsdWUgPT0gTlVMTCkKKyAgICAgIHZhbHVlID0gX2RidXNfc3RyZHVwICgiRGlmZmVyZW50IHZhbHVlISIpOworICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gb3V0OworICAgICAgCisgICAgICBfZGJ1c19oYXNoX2l0ZXJfc2V0X3ZhbHVlICgmaXRlciwgdmFsdWUpOwogCi0gICAgICB2YWx1ZSA9IHN0cl92YWx1ZTsKLSAgICAgIF9kYnVzX2hhc2hfaXRlcl9zZXRfdmFsdWUgKCZpdGVyLCBzdGVhbCAoJnN0cl92YWx1ZSkpOwogICAgICAgX2RidXNfYXNzZXJ0IChfZGJ1c19oYXNoX3RhYmxlX2xvb2t1cF9pbnQgKHRhYmxlMiwga2V5KSA9PSB2YWx1ZSk7CiAgICAgfQogCkBAIC0xODI0LDM4ICsxNjcyLDQyIEBACiAgIGkgPSAwOwogICB3aGlsZSAoaSA8IDEwMDApCiAgICAgewotICAgICAgc3RyX2tleSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7Ci0gICAgICBpZiAoc3RyX2tleSA9PSBOVUxMKQorICAgICAgY2hhciAqa2V5OworICAgICAgdm9pZCAqdmFsdWU7CisgICAgICAgICAgICAKKyAgICAgIGtleSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7CisgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgIGdvdG8gb3V0OwogCi0gICAgICBzdHJfdmFsdWUgPSBfZGJ1c19zdHJkdXAgKCJWYWx1ZSEiKTsKLSAgICAgIGlmIChzdHJfdmFsdWUgPT0gTlVMTCkKKyAgICAgIHZhbHVlID0gX2RidXNfc3RyZHVwICgiVmFsdWUhIik7CisgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBvdXQ7Ci0KKyAgICAgIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9zdHJpbmcgKHRhYmxlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVhbCAoJnN0cl9rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZWFsICgmc3RyX3ZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSkpCiAgICAgICAgIGdvdG8gb3V0OwotCisgICAgICAKICAgICAgICsraTsKICAgICB9CiAKICAgLS1pOwogICB3aGlsZSAoaSA+PSAwKQogICAgIHsKLSAgICAgIHN0cl9rZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOwotICAgICAgaWYgKHN0cl9rZXkgPT0gTlVMTCkKKyAgICAgIGNoYXIgKmtleTsKKyAgICAgIHZvaWQgKnZhbHVlOyAgICAgIAorICAgICAgCisgICAgICBrZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOworICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKLSAgICAgIHN0cl92YWx1ZSA9IF9kYnVzX3N0cmR1cCAoIlZhbHVlISIpOwotICAgICAgaWYgKHN0cl92YWx1ZSA9PSBOVUxMKQorICAgICAgdmFsdWUgPSBfZGJ1c19zdHJkdXAgKCJWYWx1ZSEiKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICBnb3RvIG91dDsKIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX3JlbW92ZV9zdHJpbmcgKHRhYmxlMSwga2V5c1tpXSkpCiAgICAgICAgIGdvdG8gb3V0OwotCisgICAgICAKICAgICAgIGlmICghX2RidXNfaGFzaF90YWJsZV9pbnNlcnRfc3RyaW5nICh0YWJsZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlYWwgKCZzdHJfa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVhbCAoJnN0cl92YWx1ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUpKQogICAgICAgICBnb3RvIG91dDsKIAogICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX3JlbW92ZV9zdHJpbmcgKHRhYmxlMSwga2V5c1tpXSkpCkBAIC0xODc4LDYyICsxNzMwLDYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2ZyZWUsIGRidXNfZnJlZSk7CiAgIGlmICh0YWJsZTEgPT0gTlVMTCkKICAgICBnb3RvIG91dDsKLQorICAKICAgdGFibGUyID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9JTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBkYnVzX2ZyZWUpOwogICBpZiAodGFibGUyID09IE5VTEwpCiAgICAgZ290byBvdXQ7Ci0KKyAgCiAgIGkgPSAwOwogICB3aGlsZSAoaSA8IDMwMDApCiAgICAgewotICAgICAgY29uc3Qgdm9pZCAqb3V0X3ZhbHVlOworICAgICAgdm9pZCAqdmFsdWU7CisgICAgICBjaGFyICprZXk7CiAKLSAgICAgIHN0cl9rZXkgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOwotICAgICAgaWYgKHN0cl9rZXkgPT0gTlVMTCkKKyAgICAgIGtleSA9IF9kYnVzX3N0cmR1cCAoa2V5c1tpXSk7CisgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgIGdvdG8gb3V0OwotICAgICAgc3RyX3ZhbHVlID0gX2RidXNfc3RyZHVwICgiVmFsdWUhIik7Ci0gICAgICBpZiAoc3RyX3ZhbHVlID09IE5VTEwpCisgICAgICB2YWx1ZSA9IF9kYnVzX3N0cmR1cCAoIlZhbHVlISIpOworICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gb3V0OwotCisgICAgICAKICAgICAgIGlmICghX2RidXNfaGFzaF9pdGVyX2xvb2t1cCAodGFibGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVhbCAoJnN0cl9rZXkpLCBUUlVFLCAmaXRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgVFJVRSwgJml0ZXIpKQogICAgICAgICBnb3RvIG91dDsKICAgICAgIF9kYnVzX2Fzc2VydCAoX2RidXNfaGFzaF9pdGVyX2dldF92YWx1ZSAoJml0ZXIpID09IE5VTEwpOwotICAgICAgX2RidXNfaGFzaF9pdGVyX3NldF92YWx1ZSAoJml0ZXIsIHN0ZWFsICgmc3RyX3ZhbHVlKSk7CisgICAgICBfZGJ1c19oYXNoX2l0ZXJfc2V0X3ZhbHVlICgmaXRlciwgdmFsdWUpOwogCi0gICAgICBzdHJfdmFsdWUgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOwotICAgICAgaWYgKHN0cl92YWx1ZSA9PSBOVUxMKQorICAgICAgdmFsdWUgPSBfZGJ1c19zdHJkdXAgKGtleXNbaV0pOworICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gb3V0OwogCiAgICAgICBpZiAoIV9kYnVzX2hhc2hfaXRlcl9sb29rdXAgKHRhYmxlMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpLCBUUlVFLCAmaXRlcikpCiAgICAgICAgIGdvdG8gb3V0OwogICAgICAgX2RidXNfYXNzZXJ0IChfZGJ1c19oYXNoX2l0ZXJfZ2V0X3ZhbHVlICgmaXRlcikgPT0gTlVMTCk7Ci0gICAgICBfZGJ1c19oYXNoX2l0ZXJfc2V0X3ZhbHVlICgmaXRlciwgc3RlYWwgKCZzdHJfdmFsdWUpKTsKLQorICAgICAgX2RidXNfaGFzaF9pdGVyX3NldF92YWx1ZSAoJml0ZXIsIHZhbHVlKTsgCisgICAgICAKICAgICAgIF9kYnVzX2Fzc2VydCAoY291bnRfZW50cmllcyAodGFibGUxKSA9PSBpICsgMSk7CiAgICAgICBfZGJ1c19hc3NlcnQgKGNvdW50X2VudHJpZXMgKHRhYmxlMikgPT0gaSArIDEpOwogCiAgICAgICBpZiAoIV9kYnVzX2hhc2hfaXRlcl9sb29rdXAgKHRhYmxlMSwga2V5c1tpXSwgRkFMU0UsICZpdGVyKSkKICAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIG91dF92YWx1ZSA9IF9kYnVzX2hhc2hfaXRlcl9nZXRfdmFsdWUgKCZpdGVyKTsKLSAgICAgIF9kYnVzX2Fzc2VydCAob3V0X3ZhbHVlICE9IE5VTEwpOwotICAgICAgX2RidXNfYXNzZXJ0IChzdHJjbXAgKG91dF92YWx1ZSwgIlZhbHVlISIpID09IDApOworICAgICAgCisgICAgICB2YWx1ZSA9IF9kYnVzX2hhc2hfaXRlcl9nZXRfdmFsdWUgKCZpdGVyKTsKKyAgICAgIF9kYnVzX2Fzc2VydCAodmFsdWUgIT0gTlVMTCk7CisgICAgICBfZGJ1c19hc3NlcnQgKHN0cmNtcCAodmFsdWUsICJWYWx1ZSEiKSA9PSAwKTsKIAogICAgICAgLyogSXRlcmF0ZSBqdXN0IHRvIGJlIHN1cmUgaXQgd29ya3MsIHRob3VnaAogICAgICAgICogaXQncyBhIHN0dXBpZCB0aGluZyB0byBkbwogICAgICAgICovCiAgICAgICB3aGlsZSAoX2RidXNfaGFzaF9pdGVyX25leHQgKCZpdGVyKSkKICAgICAgICAgOwotCisgICAgICAKICAgICAgIGlmICghX2RidXNfaGFzaF9pdGVyX2xvb2t1cCAodGFibGUyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSksIEZBTFNFLCAmaXRlcikpCiAgICAgICAgIGdvdG8gb3V0OwogCi0gICAgICBvdXRfdmFsdWUgPSBfZGJ1c19oYXNoX2l0ZXJfZ2V0X3ZhbHVlICgmaXRlcik7Ci0gICAgICBfZGJ1c19hc3NlcnQgKG91dF92YWx1ZSAhPSBOVUxMKTsKLSAgICAgIF9kYnVzX2Fzc2VydCAoc3RyY21wIChvdXRfdmFsdWUsIGtleXNbaV0pID09IDApOworICAgICAgdmFsdWUgPSBfZGJ1c19oYXNoX2l0ZXJfZ2V0X3ZhbHVlICgmaXRlcik7CisgICAgICBfZGJ1c19hc3NlcnQgKHZhbHVlICE9IE5VTEwpOworICAgICAgX2RidXNfYXNzZXJ0IChzdHJjbXAgKHZhbHVlLCBrZXlzW2ldKSA9PSAwKTsKIAogICAgICAgLyogSXRlcmF0ZSBqdXN0IHRvIGJlIHN1cmUgaXQgd29ya3MsIHRob3VnaAogICAgICAgICogaXQncyBhIHN0dXBpZCB0aGluZyB0byBkbwpAQCAtMTk3MSw5ICsxODI0LDYgQEAKICAgICBkYnVzX2ZyZWUgKGtleXNbaV0pOwogCiAgIGRidXNfZnJlZSAoa2V5cyk7Ci0KLSAgZGJ1c19mcmVlIChzdHJfa2V5KTsKLSAgZGJ1c19mcmVlIChzdHJfdmFsdWUpOwogICAKICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1oYXNoLmggYi9kYnVzL2RidXMtaGFzaC5oCmluZGV4IGZhZGFiOTEuLjI4OThmNTEgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1oYXNoLmgKKysrIGIvZGJ1cy9kYnVzLWhhc2guaApAQCAtMTMzLDE0ICsxMzMsNiBAQAogREJVU19QUklWQVRFX0VYUE9SVAogaW50ICAgICAgICAgICAgX2RidXNfaGFzaF90YWJsZV9nZXRfbl9lbnRyaWVzICAgICAgKERCdXNIYXNoVGFibGUgICAgKnRhYmxlKTsKIAotREJVU19QUklWQVRFX0VYUE9SVAotY2hhciAqKiAgICAgICAgX2RidXNfaGFzaF90YWJsZV90b19hcnJheSAgICAgICAgICAgKERCdXNIYXNoVGFibGUgICAgICp0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgZGVsaW1pdGVyKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLWRidXNfYm9vbF90ICAgIF9kYnVzX2hhc2hfdGFibGVfZnJvbV9hcnJheSAgICAgICAgIChEQnVzSGFzaFRhYmxlICAgICAqdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAqKmFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICBkZWxpbWl0ZXIpOwotCiAvKiBQcmVhbGxvY2F0aW9uICovCiAKIC8qKiBBIHByZWFsbG9jYXRlZCBoYXNoIGVudHJ5ICovCkBAIC0yMTAsMTIgKzIwMiw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1fZGJ1c19jbGVhcl9oYXNoX3RhYmxlIChEQnVzSGFzaFRhYmxlICoqdGFibGVfcCkKLXsKLSAgX2RidXNfY2xlYXJfcG9pbnRlcl9pbXBsIChEQnVzSGFzaFRhYmxlLCB0YWJsZV9wLCBfZGJ1c19oYXNoX3RhYmxlX3VucmVmKTsKLX0KLQogLyoqIEB9ICovCiAKIERCVVNfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtaW50ZXJuYWxzLmMgYi9kYnVzL2RidXMtaW50ZXJuYWxzLmMKaW5kZXggMjY3YWVmOS4uZDdlZjA4OSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLWludGVybmFscy5jCisrKyBiL2RidXMvZGJ1cy1pbnRlcm5hbHMuYwpAQCAtMjMwLDE3ICsyMzAsMTMgQEAKIF9kYnVzX3dhcm4gKGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgIC4uLikKIHsKLSAgREJ1c1N5c3RlbUxvZ1NldmVyaXR5IHNldmVyaXR5ID0gREJVU19TWVNURU1fTE9HX1dBUk5JTkc7CiAgIHZhX2xpc3QgYXJnczsKIAogICBpZiAoIXdhcm5faW5pdHRlZCkKICAgICBpbml0X3dhcm5pbmdzICgpOwotCi0gIGlmIChmYXRhbF93YXJuaW5ncykKLSAgICBzZXZlcml0eSA9IERCVVNfU1lTVEVNX0xPR19FUlJPUjsKLQorICAKICAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Ci0gIF9kYnVzX2xvZ3YgKHNldmVyaXR5LCBmb3JtYXQsIGFyZ3MpOworICB2ZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIGFyZ3MpOwogICB2YV9lbmQgKGFyZ3MpOwogCiAgIGlmIChmYXRhbF93YXJuaW5ncykKQEAgLTI1Miw3ICsyNDgsNyBAQAogCiAvKioKICAqIFByaW50cyBhICJjcml0aWNhbCIgd2FybmluZyB0byBzdGRlcnIgd2hlbiBhbiBhc3NlcnRpb24gZmFpbHM7Ci0gKiBkaWZmZXJzIGZyb20gX2RidXNfd2FybiBwcmltYXJpbHkgaW4gdGhhdCBpdAorICogZGlmZmVycyBmcm9tIF9kYnVzX3dhcm4gcHJpbWFyaWx5IGluIHRoYXQgaXQgcHJlZml4ZXMgdGhlIHBpZCBhbmQKICAqIGRlZmF1bHRzIHRvIGZhdGFsLiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBhIHByb2dyYW1taW5nCiAgKiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZC4gKE5PVCBmb3IgdW5hdm9pZGFibGUgZXJyb3JzIHRoYXQgYW4gYXBwCiAgKiBtaWdodCBoYW5kbGUgLSB0aG9zZSBzaG91bGQgYmUgcmV0dXJuZWQgYXMgREJ1c0Vycm9yLikgQ2FsbGluZyB0aGlzCkBAIC0yNjIsMTcgKzI1OCwxNSBAQAogX2RidXNfd2Fybl9jaGVja19mYWlsZWQoY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQogewotICBEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHkgPSBEQlVTX1NZU1RFTV9MT0dfV0FSTklORzsKICAgdmFfbGlzdCBhcmdzOwogICAKICAgaWYgKCF3YXJuX2luaXR0ZWQpCiAgICAgaW5pdF93YXJuaW5ncyAoKTsKIAotICBpZiAoZmF0YWxfd2FybmluZ3Nfb25fY2hlY2tfZmFpbGVkKQotICAgIHNldmVyaXR5ID0gREJVU19TWVNURU1fTE9HX0VSUk9SOwotCisgIGZwcmludGYgKHN0ZGVyciwgInByb2Nlc3MgJWx1OiAiLCBfZGJ1c19waWRfZm9yX2xvZyAoKSk7CisgIAogICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgX2RidXNfbG9ndiAoc2V2ZXJpdHksIGZvcm1hdCwgYXJncyk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJncyk7CiAgIHZhX2VuZCAoYXJncyk7CiAKICAgaWYgKGZhdGFsX3dhcm5pbmdzX29uX2NoZWNrX2ZhaWxlZCkKQEAgLTI4Nyw2ICsyODEsMTIgQEAKIHN0YXRpYyBkYnVzX2Jvb2xfdCB2ZXJib3NlX2luaXR0ZWQgPSBGQUxTRTsKIHN0YXRpYyBkYnVzX2Jvb2xfdCB2ZXJib3NlID0gVFJVRTsKIAorLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgY3VycmVudCB0aHJlYWQgaW4gdmVyYm9zZSBtZXNzYWdlcyAqLworI2RlZmluZSBQVEhSRUFEX0lOX1ZFUkJPU0UgMAorI2lmIFBUSFJFQURfSU5fVkVSQk9TRQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCiAjaWZkZWYgREJVU19VU0VfT1VUUFVUX0RFQlVHX1NUUklORwogc3RhdGljIGNoYXIgbW9kdWxlX25hbWVbMTAyNF07CiAjZW5kaWYKQEAgLTM5NCw3ICszOTQsNiBAQAogICB2YV9saXN0IGFyZ3M7CiAgIHN0YXRpYyBkYnVzX2Jvb2xfdCBuZWVkX3BpZCA9IFRSVUU7CiAgIGludCBsZW47Ci0gIGxvbmcgc2VjLCB1c2VjOwogICAKICAgLyogdGhpbmdzIGFyZSB3cml0dGVuIGEgYml0IG9kZGx5IGhlcmUgc28gdGhhdAogICAgKiBpbiB0aGUgbm9uLXZlcmJvc2UgY2FzZSB3ZSBqdXN0IGhhdmUgdGhlIG9uZQpAQCAtNDA3LDEwICs0MDYsMTIgQEAKICAgLyogUHJpbnQgb3V0IHBpZCBiZWZvcmUgdGhlIGxpbmUgKi8KICAgaWYgKG5lZWRfcGlkKQogICAgIHsKLSAgICAgIF9kYnVzX3ByaW50X3RocmVhZCAoKTsKKyNpZiBQVEhSRUFEX0lOX1ZFUkJPU0UKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVsdTogMHglbHg6ICIsIF9kYnVzX3BpZF9mb3JfbG9nICgpLCBwdGhyZWFkX3NlbGYgKCkpOworI2Vsc2UKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVsdTogIiwgX2RidXNfcGlkX2Zvcl9sb2cgKCkpOworI2VuZGlmCiAgICAgfQotICBfZGJ1c19nZXRfcmVhbF90aW1lICgmc2VjLCAmdXNlYyk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiVsZC4lMDZsZCAiLCBzZWMsIHVzZWMpOwogI2VuZGlmCiAKICAgLyogT25seSBwcmludCBwaWQgYWdhaW4gaWYgdGhlIG5leHQgbGluZSBpcyBhIG5ldyBsaW5lICovCkBAIC02NDEsMjEgKzY0Miw2IEBACiB9CiAKIC8qKgotICogUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHN0cmluZyBhcnJheQotICoKLSAqIEBwYXJhbSBhcnJheSBhcnJheSB0byBzZWFyY2guCi0gKiBAcmV0dXJucyBzaXplIG9mIGFycmF5Ci0gKi8KLXNpemVfdAotX2RidXNfc3RyaW5nX2FycmF5X2xlbmd0aCAoY29uc3QgY2hhciAqKmFycmF5KQotewotICBzaXplX3QgaTsKLSAgZm9yIChpID0gMDsgYXJyYXlbaV07IGkrKykge30KLSAgcmV0dXJuIGk7Ci19Ci0KLQotLyoqCiAgKiBHZW5lcmF0ZXMgYSBuZXcgVVVJRC4gSWYgeW91IGNoYW5nZSBob3cgdGhpcyBpcyBkb25lLAogICogdGhlcmUncyBzb21lIHRleHQgYWJvdXQgaXQgaW4gdGhlIHNwZWMgdGhhdCBzaG91bGQgYWxzbyBjaGFuZ2UuCiAgKgpAQCAtOTA4LDggKzg5NCwyNSBAQAogCiAgIGlmIChtYWNoaW5lX3V1aWRfaW5pdGlhbGl6ZWRfZ2VuZXJhdGlvbiAhPSBfZGJ1c19jdXJyZW50X2dlbmVyYXRpb24pCiAgICAgewotICAgICAgaWYgKCFfZGJ1c19yZWFkX2xvY2FsX21hY2hpbmVfdXVpZCAoJm1hY2hpbmVfdXVpZCwgRkFMU0UsIGVycm9yKSkKLSAgICAgICAgb2sgPSBGQUxTRTsKKyAgICAgIERCdXNFcnJvciBsb2NhbF9lcnJvciA9IERCVVNfRVJST1JfSU5JVDsKKworICAgICAgaWYgKCFfZGJ1c19yZWFkX2xvY2FsX21hY2hpbmVfdXVpZCAoJm1hY2hpbmVfdXVpZCwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfZXJyb3IpKQorICAgICAgICB7ICAgICAgICAgIAorI2lmbmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUworICAgICAgICAgIC8qIEZvciB0aGUgdGVzdCBzdWl0ZSwgd2UgbWF5IG5vdCBiZSBpbnN0YWxsZWQgc28ganVzdCBjb250aW51ZSBzaWxlbnRseQorICAgICAgICAgICAqIGhlcmUuIEJ1dCBpbiBhIHByb2R1Y3Rpb24gYnVpbGQsIHdlIHdhbnQgdG8gYmUgbmljZSBhbmQgbG91ZCBhYm91dAorICAgICAgICAgICAqIHRoaXMuCisgICAgICAgICAgICovCisgICAgICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJELUJ1cyBsaWJyYXJ5IGFwcGVhcnMgdG8gYmUgaW5jb3JyZWN0bHkgc2V0IHVwOyBmYWlsZWQgdG8gcmVhZCBtYWNoaW5lIHV1aWQ6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgdGhlIG1hbnVhbCBwYWdlIGZvciBkYnVzLXV1aWRnZW4gdG8gY29ycmVjdCB0aGlzIGlzc3VlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZXJyb3IubWVzc2FnZSk7CisjZW5kaWYKKyAgICAgICAgICAKKyAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZsb2NhbF9lcnJvcik7CisgICAgICAgICAgCisgICAgICAgICAgb2sgPSBfZGJ1c19nZW5lcmF0ZV91dWlkICgmbWFjaGluZV91dWlkLCBlcnJvcik7CisgICAgICAgIH0KICAgICB9CiAKICAgaWYgKG9rKQpAQCAtOTI3LDE3ICs5MzAsMTAgQEAKIH0KIAogI2lmbmRlZiBEQlVTX0RJU0FCTEVfQ0hFQ0tTCi12b2lkCi1fZGJ1c193YXJuX3JldHVybl9pZl9mYWlsIChjb25zdCBjaGFyICpmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFzc2VydGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSkKLXsKLSAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKAotICAgICAgImFyZ3VtZW50cyB0byAlcygpIHdlcmUgaW5jb3JyZWN0LCBhc3NlcnRpb24gXCIlc1wiIGZhaWxlZCBpbiBmaWxlICVzIGxpbmUgJWQuXG4iCi0gICAgICAiVGhpcyBpcyBub3JtYWxseSBhIGJ1ZyBpbiBzb21lIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBELUJ1cyBsaWJyYXJ5LlxuIiwKLSAgICAgIGZ1bmN0aW9uLCBhc3NlcnRpb24sIGZpbGUsIGxpbmUpOwotfQorLyoqIFN0cmluZyB1c2VkIGluIF9kYnVzX3JldHVybl9pZl9mYWlsIG1hY3JvICovCitjb25zdCBjaGFyICpfZGJ1c19yZXR1cm5faWZfZmFpbF93YXJuaW5nX2Zvcm1hdCA9CisiYXJndW1lbnRzIHRvICVzKCkgd2VyZSBpbmNvcnJlY3QsIGFzc2VydGlvbiBcIiVzXCIgZmFpbGVkIGluIGZpbGUgJXMgbGluZSAlZC5cbiIKKyJUaGlzIGlzIG5vcm1hbGx5IGEgYnVnIGluIHNvbWUgYXBwbGljYXRpb24gdXNpbmcgdGhlIEQtQnVzIGxpYnJhcnkuXG4iOwogI2VuZGlmCiAKICNpZm5kZWYgREJVU19ESVNBQkxFX0FTU0VSVApAQCAtOTYyLDggKzk1OCw4IEBACiB7CiAgIGlmIChfREJVU19VTkxJS0VMWSAoIWNvbmRpdGlvbikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoImFzc2VydGlvbiBmYWlsZWQgXCIlc1wiIGZpbGUgXCIlc1wiIGxpbmUgJWQgZnVuY3Rpb24gJXMiLAotICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RleHQsIGZpbGUsIGxpbmUsIGZ1bmMpOworICAgICAgX2RidXNfd2FybiAoIiVsdTogYXNzZXJ0aW9uIGZhaWxlZCBcIiVzXCIgZmlsZSBcIiVzXCIgbGluZSAlZCBmdW5jdGlvbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIF9kYnVzX3BpZF9mb3JfbG9nICgpLCBjb25kaXRpb25fdGV4dCwgZmlsZSwgbGluZSwgZnVuYyk7CiAgICAgICBfZGJ1c19hYm9ydCAoKTsKICAgICB9CiB9CkBAIC05ODMsOCArOTc5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIGxpbmUpCiB7Ci0gIF9kYnVzX3dhcm4gKCJGaWxlIFwiJXNcIiBsaW5lICVkIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJlYWNoZWQ6ICVzIiwKLSAgICAgICAgICAgICAgZmlsZSwgbGluZSwgZXhwbGFuYXRpb24pOworICBfZGJ1c193YXJuICgiRmlsZSBcIiVzXCIgbGluZSAlZCBwcm9jZXNzICVsdSBzaG91bGQgbm90IGhhdmUgYmVlbiByZWFjaGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgZmlsZSwgbGluZSwgX2RidXNfcGlkX2Zvcl9sb2cgKCksIGV4cGxhbmF0aW9uKTsKICAgX2RidXNfYWJvcnQgKCk7CiB9CiAjZW5kaWYgLyogREJVU19ESVNBQkxFX0FTU0VSVCAqLwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWludGVybmFscy5oIGIvZGJ1cy9kYnVzLWludGVybmFscy5oCmluZGV4IGU3NjQ5ZTEuLjVlNmVmZDggMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1pbnRlcm5hbHMuaAorKysgYi9kYnVzL2RidXMtaW50ZXJuYWxzLmgKQEAgLTQyLDExICs0Miw3IEBACiBEQlVTX1BSSVZBVEVfRVhQT1JUCiB2b2lkIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICAoY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgX0RCVVNfR05VQ19QUklOVEYgKDEsIDIpOwotREJVU19QUklWQVRFX0VYUE9SVAotdm9pZCBfZGJ1c193YXJuX3JldHVybl9pZl9mYWlsIChjb25zdCBjaGFyICpmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXNzZXJ0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSk7CisKIAogI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCiAjZGVmaW5lIF9EQlVTX0ZVTkNUSU9OX05BTUUgX19mdW5jX18KQEAgLTE2OSwxNyArMTY1LDIyIEBACiAjZGVmaW5lIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbChjb25kaXRpb24sIHZhbCkKICNlbHNlCiAKK0RCVVNfUFJJVkFURV9FWFBPUlQKK2V4dGVybiBjb25zdCBjaGFyICpfZGJ1c19yZXR1cm5faWZfZmFpbF93YXJuaW5nX2Zvcm1hdDsKKwogI2RlZmluZSBfZGJ1c19yZXR1cm5faWZfZmFpbChjb25kaXRpb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfZGJ1c19hc3NlcnQgKCgqKGNvbnN0IGNoYXIqKV9EQlVTX0ZVTkNUSU9OX05BTUUpICE9ICdfJyk7ICAgICAgICAgICAgICAgICAgICAgIFwKICAgaWYgKCEoY29uZGl0aW9uKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9kYnVzX3dhcm5fcmV0dXJuX2lmX2ZhaWwgKF9EQlVTX0ZVTkNUSU9OX05BTUUsICNjb25kaXRpb24sIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoX2RidXNfcmV0dXJuX2lmX2ZhaWxfd2FybmluZ19mb3JtYXQsICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJVU19GVU5DVElPTl9OQU1FLCAjY29uZGl0aW9uLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbChjb25kaXRpb24sIHZhbCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX2RidXNfYXNzZXJ0ICgoKihjb25zdCBjaGFyKilfREJVU19GVU5DVElPTl9OQU1FKSAhPSAnXycpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgaWYgKCEoY29uZGl0aW9uKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2RidXNfd2Fybl9yZXR1cm5faWZfZmFpbCAoX0RCVVNfRlVOQ1RJT05fTkFNRSwgI2NvbmRpdGlvbiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkIChfZGJ1c19yZXR1cm5faWZfZmFpbF93YXJuaW5nX2Zvcm1hdCwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCVVNfRlVOQ1RJT05fTkFNRSwgI2NvbmRpdGlvbiwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICBcCiAgICAgcmV0dXJuICh2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9IH0gd2hpbGUgKDApCiAKQEAgLTI0OSw4ICsyNTAsNiBAQAogREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19ib29sX3QgX2RidXNfc3RyaW5nX2FycmF5X2NvbnRhaW5zIChjb25zdCBjaGFyICoqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICpzdHIpOwotREJVU19QUklWQVRFX0VYUE9SVAotc2l6ZV90ICAgICAgX2RidXNfc3RyaW5nX2FycmF5X2xlbmd0aCAgIChjb25zdCBjaGFyICoqYXJyYXkpOwogY2hhcioqICAgICAgX2RidXNfZHVwX3N0cmluZ19hcnJheSAgICAgIChjb25zdCBjaGFyICoqYXJyYXkpOwogCiAjZGVmaW5lIF9EQlVTX0lOVDE2X01JTgkgKChkYnVzX2ludDE2X3QpIDB4ODAwMCkKQEAgLTMwMSw4ICszMDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgIGFyZ3MpIF9EQlVTX0dOVUNfUFJJTlRGICgzLCAwKTsKIAotdHlwZWRlZiBkYnVzX2Jvb2xfdCAoKiBEQnVzVGVzdE1lbW9yeUZ1bmN0aW9uKSAgKHZvaWQgKmRhdGEpOwotCiAjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKIC8qIE1lbW9yeSBkZWJ1Z2dpbmcgKi8KIHZvaWQgICAgICAgIF9kYnVzX3NldF9mYWlsX2FsbG9jX2NvdW50ZXIgICAgICAgIChpbnQgIHVudGlsX25leHRfZmFpbCk7CkBAIC0zMTQsNiArMzExLDcgQEAKIERCVVNfUFJJVkFURV9FWFBPUlQKIGludCAgICAgICAgIF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICh2b2lkKTsKIAordHlwZWRlZiBkYnVzX2Jvb2xfdCAoKiBEQnVzVGVzdE1lbW9yeUZ1bmN0aW9uKSAgKHZvaWQgKmRhdGEpOwogREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19ib29sX3QgX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKGNvbnN0IGNoYXIgICAgICAgICAgICAgKmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNUZXN0TWVtb3J5RnVuY3Rpb24gIGZ1bmMsCkBAIC0zMjcsOSArMzI1LDcgQEAKICAqLwogI2RlZmluZSBfZGJ1c19kZWNyZW1lbnRfZmFpbF9hbGxvY19jb3VudGVyKCkgKEZBTFNFKQogI2RlZmluZSBfZGJ1c19kaXNhYmxlX21lbV9wb29scygpICAgICAgICAgICAgKEZBTFNFKQotI2RlZmluZSBfZGJ1c19nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZygpICgwKQotCi0jZGVmaW5lIF9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nKGRlc2NyaXB0aW9uLCBmdW5jLCBkYXRhKSAoKCpmdW5jKSAoZGF0YSkpCisjZGVmaW5lIF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICAoMCkKICNlbmRpZiAvKiAhREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMgKi8KIAogdHlwZWRlZiB2b2lkICgqIERCdXNTaHV0ZG93bkZ1bmN0aW9uKSAodm9pZCAqZGF0YSk7CkBAIC00MTIsNyArNDA4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c0dVSUQgICAqdXVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAqZXJyb3IpOwogCi1EQlVTX1BSSVZBVEVfRVhQT1JUCiBkYnVzX2Jvb2xfdCBfZGJ1c19nZXRfbG9jYWxfbWFjaGluZV91dWlkX2VuY29kZWQgKERCdXNTdHJpbmcgKnV1aWRfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcik7CiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1rZXlyaW5nLmMgYi9kYnVzL2RidXMta2V5cmluZy5jCmluZGV4IGQ5YWRhYTYuLmJiN2U0ZjggMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1rZXlyaW5nLmMKKysrIGIvZGJ1cy9kYnVzLWtleXJpbmcuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKICAgaWYgKCFfZGJ1c19kZWxldGVfZmlsZSAoJmtleXJpbmctPmZpbGVuYW1lX2xvY2ssICZlcnJvcikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBkZWxldGUgbG9jayBmaWxlOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIGRlbGV0ZSBsb2NrIGZpbGU6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgfQpAQCAtNDUyLDcgKzQ1Miw3IEBACiAgIGlmICghX2RidXNfc3RyaW5nX3ZhbGlkYXRlX2FzY2lpICgmY29udGVudHMsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJmNvbnRlbnRzKSkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIlNlY3JldCBrZXlyaW5nIGZpbGUgY29udGFpbnMgbm9uLUFTQ0lJISBJZ25vcmluZyBleGlzdGluZyBjb250ZW50cyIpOworICAgICAgX2RidXNfd2FybiAoIlNlY3JldCBrZXlyaW5nIGZpbGUgY29udGFpbnMgbm9uLUFTQ0lJISBJZ25vcmluZyBleGlzdGluZyBjb250ZW50c1xuIik7CiAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJmNvbnRlbnRzLCAwKTsKICAgICB9CiAKQEAgLTYyMSw3ICs2MjEsNyBAQAogICAgIHsKICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+bmFtZSkKICAgICAgICAgX2RidXNfdmVyYm9zZSAoImVycm9yIGlzICVzOiAlc1xuIiwgZXJyb3ItPm5hbWUsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgIF9kYnVzX3dhcm4gKCJyZXR1cm5pbmcgJWQgYnV0IGVycm9yIHBvaW50ZXIgJXAgbmFtZSAlcyIsCisgICAgICBfZGJ1c193YXJuICgicmV0dXJuaW5nICVkIGJ1dCBlcnJvciBwb2ludGVyICVwIG5hbWUgJXNcbiIsCiAgICAgICAgICAgICAgICAgICByZXR2YWwsIGVycm9yLCBlcnJvci0+bmFtZSA/IGVycm9yLT5uYW1lIDogIihub25lKSIpOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGhhbmRsZSBlcnJvcnMgcHJvcGVybHkiKTsKICAgICB9CkBAIC04MDcsNyArODA3LDcgQEAKICAgICogdW5sZXNzIHNvbWVvbmUgZWxzZSBtYW5hZ2VzIHRvIGNyZWF0ZSBpdAogICAgKi8KICAgZGJ1c19lcnJvcl9pbml0ICgmdG1wX2Vycm9yKTsKLSAgaWYgKCFfZGJ1c19lbnN1cmVfZGlyZWN0b3J5ICgma2V5cmluZy0+ZGlyZWN0b3J5LAorICBpZiAoIV9kYnVzX2NyZWF0ZV9kaXJlY3RvcnkgKCZrZXlyaW5nLT5kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9lcnJvcikpCiAgICAgewogICAgICAgX2RidXNfdmVyYm9zZSAoIkNyZWF0aW5nIGtleXJpbmcgZGlyZWN0b3J5OiAlc1xuIiwKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1saXN0LmMgYi9kYnVzL2RidXMtbGlzdC5jCmluZGV4IDhlNzEzYzAuLmM0YzE4NTYgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1saXN0LmMKKysrIGIvZGJ1cy9kYnVzLWxpc3QuYwpAQCAtOTkxLDEwICs5OTEsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTEwMzYsMTAgKzEwMzQsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTEwNDgsNiArMTA0NCw4IEBACiAgICAgewogICAgICAgREJ1c0xpc3QgKmdvdF9saW5rMTsKICAgICAgIERCdXNMaXN0ICpnb3RfbGluazI7CisKKyAgICAgIERCdXNMaXN0ICpsaW5rMjsKICAgICAgIAogICAgICAgdm9pZCAqZGF0YTFfaW5kaXJlY3Q7CiAgICAgICB2b2lkICpkYXRhMTsKQEAgLTEwODQsMTQgKzEwODIsMTIgQEAKICAgX2RidXNfYXNzZXJ0IChsaXN0MiA9PSBOVUxMKTsKICAgCiAgIC8qIFRlc3QgaXRlcmF0aW9uICovCi0KKyAgCiAgIGkgPSAwOwogICB3aGlsZSAoaSA8IDEwKQogICAgIHsKLSAgICAgIGlmICghX2RidXNfbGlzdF9hcHBlbmQgKCZsaXN0MSwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKSkKLSAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGQgbm90IGFsbG9jYXRlIGZvciBhcHBlbmQiKTsKLSAgICAgIGlmICghX2RidXNfbGlzdF9wcmVwZW5kICgmbGlzdDIsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgcHJlcGVuZCIpOworICAgICAgX2RidXNfbGlzdF9hcHBlbmQgKCZsaXN0MSwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKKyAgICAgIF9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpOwogICAgICAgKytpOwogCiAgICAgICB2ZXJpZnlfbGlzdCAoJmxpc3QxKTsKQEAgLTExNDgsMTAgKzExNDQsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTExODIsMTAgKzExNzYsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTEyMjQsMTAgKzEyMTYsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTEyNzUsMTAgKzEyNjUsOCBAQAogICBpID0gMDsKICAgd2hpbGUgKGkgPCAxMCkKICAgICB7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSkpCi0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfcHJlcGVuZCAoJmxpc3QyLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoaSkpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIHByZXBlbmQiKTsKKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSIChpKSk7CisgICAgICBfZGJ1c19saXN0X3ByZXBlbmQgKCZsaXN0MiwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKGkpKTsKICAgICAgICsraTsKICAgICB9CiAKQEAgLTEzNDUsMTIgKzEzMzMsOSBAQAogICBfZGJ1c19saXN0X2NsZWFyICgmbGlzdDEpOwogCiAgIC8qIHVzaW5nIHJlbW92ZV9sYXN0ICovCi0gIGlmICghX2RidXNfbGlzdF9hcHBlbmQgKCZsaXN0MSwgX0RCVVNfSU5UX1RPX1BPSU5URVIgKDIpKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgZm9yIGFwcGVuZCIpOwotICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSICgxKSkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGQgbm90IGFsbG9jYXRlIGZvciBhcHBlbmQiKTsKLSAgaWYgKCFfZGJ1c19saXN0X2FwcGVuZCAoJmxpc3QxLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoMykpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImNvdWxkIG5vdCBhbGxvY2F0ZSBmb3IgYXBwZW5kIik7CisgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSICgyKSk7CisgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSICgxKSk7CisgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdDEsIF9EQlVTX0lOVF9UT19QT0lOVEVSICgzKSk7CiAKICAgX2RidXNfbGlzdF9yZW1vdmVfbGFzdCAoJmxpc3QxLCBfREJVU19JTlRfVE9fUE9JTlRFUiAoMikpOwogICAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYWNyb3MuaCBiL2RidXMvZGJ1cy1tYWNyb3MuaAppbmRleCAyYzg5NTZlLi5hODJkOTExIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWFjcm9zLmgKKysrIGIvZGJ1cy9kYnVzLW1hY3Jvcy5oCkBAIC02NCw4ICs2NCw3IEBACiAjICBkZWZpbmUgX0RCVVNfR05VQ19FWFRFTlNJT04KICNlbmRpZgogCi0jaWYgICAgIChfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPiA0KSkgfHwgXAotICAgICAgICAgZGVmaW5lZChfX2NsYW5nX18pCisjaWYgICAgIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+IDQpCiAjZGVmaW5lIF9EQlVTX0dOVUNfUFJJTlRGKCBmb3JtYXRfaWR4LCBhcmdfaWR4ICkgICAgXAogICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBmb3JtYXRfaWR4LCBhcmdfaWR4KSkpCiAjZGVmaW5lIF9EQlVTX0dOVUNfTk9SRVRVUk4gICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjE1LDI2ICsyMTQsNiBAQAogIyAgZGVmaW5lIERCVVNfUFJJVkFURV9FWFBPUlQgLyogbm8gZGVjb3JhdGlvbiAqLwogI2VuZGlmCiAKLS8qIEltcGxlbWVudGF0aW9uIGZvciBkYnVzX2NsZWFyX21lc3NhZ2UoKSBldGMuIFRoaXMgaXMgbm90IEFQSSwKLSAqIGRvIG5vdCB1c2UgaXQgZGlyZWN0bHkuCi0gKgotICogV2UncmUgdXNpbmcgYSBzcGVjaWZpYyB0eXBlIChUICoqIGFuZCBUICopIGluc3RlYWQgb2Ygdm9pZCAqKiBhbmQKLSAqIHZvaWQgKiBwYXJ0bHkgZm9yIHR5cGUtc2FmZXR5LCBwYXJ0bHkgdG8gYmUgc3RyaWN0LWFsaWFzaW5nLWNvbXBsaWFudCwKLSAqIGFuZCBwYXJ0bHkgdG8ga2VlcCBDKysgY29tcGlsZXJzIGhhcHB5LiBUaGlzIGNvZGUgaXMgaW5saW5lZCBpbnRvCi0gKiB1c2VycyBvZiBsaWJkYnVzLCBzbyB3ZSBjYW4ndCByZWx5IG9uIGl0IGhhdmluZyBkYnVzJyBvd24gY29tcGlsZXIKLSAqIHNldHRpbmdzLiAqLwotI2RlZmluZSBfZGJ1c19jbGVhcl9wb2ludGVyX2ltcGwoVCwgcG9pbnRlcl90b19wb2ludGVyLCBkZXN0cm95KSBcCi0gIGRvIHsgXAotICAgIFQgKipfcHAgPSAocG9pbnRlcl90b19wb2ludGVyKTsgXAotICAgIFQgKl92YWx1ZSA9ICpfcHA7IFwKLSAgICBcCi0gICAgKl9wcCA9IE5VTEw7IFwKLSAgICBcCi0gICAgaWYgKF92YWx1ZSAhPSBOVUxMKSBcCi0gICAgICBkZXN0cm95IChfdmFsdWUpOyBcCi0gIH0gd2hpbGUgKDApCi0vKiBOb3QgKGRlc3Ryb3kpIChfdmFsdWUpIGluIGNhc2UgZGVzdHJveSgpIGlzIGEgZnVuY3Rpb24tbGlrZSBtYWNybyAqLwotCiAvKiogQH0gKi8KIAogI2VuZGlmIC8qIERCVVNfTUFDUk9TX0ggKi8KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYWlubG9vcC5jIGIvZGJ1cy9kYnVzLW1haW5sb29wLmMKaW5kZXggMWY4YWUwZi4uZjY3MzZmZSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1haW5sb29wLmMKKysrIGIvZGJ1cy9kYnVzLW1haW5sb29wLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxkYnVzL2RidXMtaGFzaC5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy1saXN0Lmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLXNvY2tldC1zZXQuaD4KLSNpbmNsdWRlIDxkYnVzL2RidXMtdGltZW91dC5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy13YXRjaC5oPgogCiAjZGVmaW5lIE1BSU5MT09QX1NQRVcgMApAQCAtMjAwLDcgKzE5OSw3IEBACiAgIERCdXNMaXN0ICpsaW5rOwogICBEQnVzTGlzdCAqKndhdGNoZXM7CiAKLSAgX2RidXNfd2FybiAoImludmFsaWQgcmVxdWVzdCwgc29ja2V0IGZkICUiIERCVVNfUE9MTEFCTEVfRk9STUFUICIgbm90IG9wZW4iLAorICBfZGJ1c193YXJuICgiaW52YWxpZCByZXF1ZXN0LCBzb2NrZXQgZmQgJSIgREJVU19QT0xMQUJMRV9GT1JNQVQgIiBub3Qgb3BlblxuIiwKICAgICAgICAgICAgICAgX2RidXNfcG9sbGFibGVfcHJpbnRhYmxlIChmZCkpOwogICB3YXRjaGVzID0gX2RidXNfaGFzaF90YWJsZV9sb29rdXBfcG9sbGFibGUgKGxvb3AtPndhdGNoZXMsIGZkKTsKIApAQCAtMzY0LDcgKzM2Myw3IEBACiAgICAgICAgICB9CiAgICAgIH0KIAotICBfZGJ1c193YXJuICgiY291bGQgbm90IGZpbmQgd2F0Y2ggJXAgdG8gcmVtb3ZlIiwgd2F0Y2gpOworICBfZGJ1c193YXJuICgiY291bGQgbm90IGZpbmQgd2F0Y2ggJXAgdG8gcmVtb3ZlXG4iLCB3YXRjaCk7CiB9CiAKIGRidXNfYm9vbF90CkBAIC00MTYsNyArNDE1LDcgQEAKICAgICAgIGxpbmsgPSBuZXh0OwogICAgIH0KIAotICBfZGJ1c193YXJuICgiY291bGQgbm90IGZpbmQgdGltZW91dCAlcCB0byByZW1vdmUiLCB0aW1lb3V0KTsKKyAgX2RidXNfd2FybiAoImNvdWxkIG5vdCBmaW5kIHRpbWVvdXQgJXAgdG8gcmVtb3ZlXG4iLCB0aW1lb3V0KTsKIH0KIAogLyogQ29udm9sdXRpb25zIGZyb20gR0xpYiwgdGhlcmUgcmVhbGx5IG11c3QgYmUgYSBiZXR0ZXIgd2F5CkBAIC02MDksMTMgKzYwOCw2IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCBtc2Vjc19yZW1haW5pbmc7CiAKLSAgICAgICAgICAgICAgaWYgKF9kYnVzX3RpbWVvdXRfbmVlZHNfcmVzdGFydCAodGNiLT50aW1lb3V0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICB0Y2ItPmxhc3RfdHZfc2VjID0gdHZfc2VjOwotICAgICAgICAgICAgICAgICAgdGNiLT5sYXN0X3R2X3VzZWMgPSB0dl91c2VjOwotICAgICAgICAgICAgICAgICAgX2RidXNfdGltZW91dF9yZXN0YXJ0ZWQgKHRjYi0+dGltZW91dCk7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgIGNoZWNrX3RpbWVvdXQgKHR2X3NlYywgdHZfdXNlYywgdGNiLCAmbXNlY3NfcmVtYWluaW5nKTsKIAogICAgICAgICAgICAgICBpZiAodGltZW91dCA8IDApCkBAIC02MjksNiArNjIxLDkgQEAKICNlbmRpZgogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgX2RidXNfYXNzZXJ0ICh0aW1lb3V0ID49IDApOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIGlmICh0aW1lb3V0ID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGl0J3Mgbm90IGdvaW5nIHRvIGdldCBzaG9ydGVyLi4uICovCiAgICAgICAgICAgICB9CiAjaWYgTUFJTkxPT1BfU1BFVwogICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYXJzaGFsLWJhc2ljLmMgYi9kYnVzL2RidXMtbWFyc2hhbC1iYXNpYy5jCmluZGV4IDQzNTJlNTIuLjc0ZmUzZjkgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tYXJzaGFsLWJhc2ljLmMKKysrIGIvZGJ1cy9kYnVzLW1hcnNoYWwtYmFzaWMuYwpAQCAtMjksMTAgKzI5LDYgQEAKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaWYgIWRlZmluZWQoUFJJeDY0KSAmJiBkZWZpbmVkKERCVVNfV0lOKQotI2RlZmluZSBQUkl4NjQgIkk2NHgiCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KQogIyBkZWZpbmUgX0RCVVNfQVNTRVJUX0FMSUdOTUVOVCh0eXBlLCBvcCwgdmFsKSBcCiAgIF9EQlVTX1NUQVRJQ19BU1NFUlQgKF9fZXh0ZW5zaW9uX18gX19hbGlnbm9mX18gKHR5cGUpIG9wIHZhbCkKQEAgLTIwOCw3ICsyMDQsNyBAQAogCiAgIGRhdGEgPSBfZGJ1c19zdHJpbmdfZ2V0X2RhdGFfbGVuIChzdHIsIG9mZnNldCwgMik7CiAKLSAgcGFja18yX29jdGV0cyAodmFsdWUsIGJ5dGVfb3JkZXIsICh1bnNpZ25lZCBjaGFyICopIGRhdGEpOworICBwYWNrXzJfb2N0ZXRzICh2YWx1ZSwgYnl0ZV9vcmRlciwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMjQsNyArMjIwLDcgQEAKIAogICBkYXRhID0gX2RidXNfc3RyaW5nX2dldF9kYXRhX2xlbiAoc3RyLCBvZmZzZXQsIDQpOwogCi0gIHBhY2tfNF9vY3RldHMgKHZhbHVlLCBieXRlX29yZGVyLCAodW5zaWduZWQgY2hhciAqKSBkYXRhKTsKKyAgcGFja180X29jdGV0cyAodmFsdWUsIGJ5dGVfb3JkZXIsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjQwLDcgKzIzNiw3IEBACiAKICAgZGF0YSA9IF9kYnVzX3N0cmluZ19nZXRfZGF0YV9sZW4gKHN0ciwgb2Zmc2V0LCA4KTsKIAotICBwYWNrXzhfb2N0ZXRzICh2YWx1ZSwgYnl0ZV9vcmRlciwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSk7CisgIHBhY2tfOF9vY3RldHMgKHZhbHVlLCBieXRlX29yZGVyLCBkYXRhKTsKIH0KIAogLyoqCkBAIC0yOTYsNyArMjkyLDcgQEAKIAogICBfZGJ1c19hc3NlcnQgKF9EQlVTX0FMSUdOX1ZBTFVFIChwb3MsIDQpID09ICh1bnNpZ25lZCkgcG9zKTsKICAgb2xkX2xlbiA9IF9kYnVzX3VucGFja191aW50MzIgKGJ5dGVfb3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhX2xlbiAoc3RyLCBwb3MsIDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHN0ciwgcG9zLCA0KSk7CiAKICAgbmV3X2xlbiA9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmZHN0cik7CiAKQEAgLTQ2OCw3ICs0NjQsNyBAQAogICBfZGJ1c19hc3NlcnQgKHBvcyArIDQgPD0gX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKHN0cikpOwogICAKICAgcmV0dXJuIF9kYnVzX3VucGFja191aW50MzIgKGJ5dGVfb3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhIChzdHIpICsgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoc3RyKSArIHBvcyk7CiB9CiAKIC8qKgpAQCAtNTgzLDcgKzU3OSw3IEBACiAgICAgICB9CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJ0eXBlICVzICVkIG5vdCBhIGJhc2ljIHR5cGUiLAorICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJ0eXBlICVzICVkIG5vdCBhIGJhc2ljIHR5cGVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfdHlwZV90b19zdHJpbmcgKHR5cGUpLCB0eXBlKTsKICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIm5vdCBhIGJhc2ljIHR5cGUiKTsKICAgICAgIGJyZWFrOwpAQCAtNjk4LDcgKzY5NCw3IEBACiAKICAgX2RidXNfYXNzZXJ0IChieXRlX29yZGVyID09IERCVVNfTElUVExFX0VORElBTiB8fCBieXRlX29yZGVyID09IERCVVNfQklHX0VORElBTik7CiAgIGlmIChpbnNlcnRfYXQgPiBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoc3RyKSkKLSAgICBfZGJ1c193YXJuICgiaW5zZXJ0X2F0ID0gJWQgc3RyaW5nIGxlbiA9ICVkIGRhdGFfbGVuID0gJWQiLAorICAgIF9kYnVzX3dhcm4gKCJpbnNlcnRfYXQgPSAlZCBzdHJpbmcgbGVuID0gJWQgZGF0YV9sZW4gPSAlZFxuIiwKICAgICAgICAgICAgICAgICBpbnNlcnRfYXQsIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpLCBkYXRhX2xlbik7CiAgIAogICBpZiAobWFyc2hhbF9hcyA9PSBNQVJTSEFMX0FTX0JZVEVfQVJSQVkpCkBAIC03MDYsNyArNzAyLDcgQEAKICAgZWxzZQogICAgIHZhbHVlX2xlbiA9IGRhdGFfbGVuICsgMTsgLyogdmFsdWUgaGFzIGEgbnVsICovCiAKLSAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmdmFsdWVfc3RyLCAoY29uc3QgY2hhciAqKSB2YWx1ZSwgdmFsdWVfbGVuKTsKKyAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmdmFsdWVfc3RyLCB2YWx1ZSwgdmFsdWVfbGVuKTsKIAogICBwb3MgPSBpbnNlcnRfYXQ7CiAKQEAgLTc2MCw3ICs3NTYsNyBAQAogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnBvc19hZnRlcikKIHsKICAgcmV0dXJuIG1hcnNoYWxfbGVuX2ZvbGxvd2VkX2J5X2J5dGVzIChNQVJTSEFMX0FTX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGluc2VydF9hdCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpbnNlcnRfYXQsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAodmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIsIHBvc19hZnRlcik7CiB9CkBAIC03NzIsNyArNzY4LDcgQEAKICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpwb3NfYWZ0ZXIpCiB7CiAgIHJldHVybiBtYXJzaGFsX2xlbl9mb2xsb3dlZF9ieV9ieXRlcyAoTUFSU0hBTF9BU19TSUdOQVRVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpbnNlcnRfYXQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgaW5zZXJ0X2F0LCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKHZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0NPTVBJTEVSX0JZVEVfT1JERVIsIC8qIGlycmVsZXZhbnQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NfYWZ0ZXIpOwpAQCAtODY1LDcgKzg2MSw3IEBACiAgIGludCBwb3M7CiAgIERCdXNTdHJpbmcgdmFsdWVfc3RyOwogCi0gIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0X2xlbiAoJnZhbHVlX3N0ciwgKGNvbnN0IGNoYXIgKikgdmFsdWUsIG5fZWxlbWVudHMpOworICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdF9sZW4gKCZ2YWx1ZV9zdHIsIHZhbHVlLCBuX2VsZW1lbnRzKTsKIAogICBwb3MgPSBpbnNlcnRfYXQ7CiAKQEAgLTk4Miw3ICs5NzgsNyBAQAogICAgIGdvdG8gZXJyb3I7CiAKICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbl9pbl9ieXRlcyk7CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfY29weSAoJnQsIDAsCkBAIC0xMTI5LDcgKzExMjUsNyBAQAogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgIF9kYnVzX3dhcm4gKCJ0eXBlICVzIG5vdCBhIGJhc2ljIHR5cGUiLAorICAgICAgX2RidXNfd2FybiAoInR5cGUgJXMgbm90IGEgYmFzaWMgdHlwZVxuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nICh0eXBlKSk7CiAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJub3QgYSBiYXNpYyB0eXBlIik7CiAgICAgICBicmVhazsKQEAgLTEzMzgsOCArMTMzNCwxMCBAQAogICAgICAgICAgIGlmIChpID4gNyAmJgogICAgICAgICAgICAgICBfREJVU19BTElHTl9BRERSRVNTICgmZGF0YVtpXSwgOCkgPT0gJmRhdGFbaV0pCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCIgdTY0OiAweCUiIFBSSXg2NCwKKyNpZmRlZiBEQlVTX0lOVDY0X1BSSU5URl9NT0RJRklFUgorICAgICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiIHU2NDogMHglIiBEQlVTX0lOVDY0X1BSSU5URl9NT0RJRklFUiAieCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooZGJ1c191aW50NjRfdCopJmRhdGFbaS04XSk7CisjZW5kaWYKICAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIiBkYmw6ICVnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihkb3VibGUqKSZkYXRhW2ktOF0pOwogICAgICAgICAgICAgfQpAQCAtMTM4Niw3ICsxMzg0LDcgQEAKIAogICBkID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhX2xlbiAoc3RyLCBzdGFydCwgbGVuKTsKIAotICBfZGJ1c192ZXJib3NlX2J5dGVzICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBkLCBsZW4sIHN0YXJ0KTsKKyAgX2RidXNfdmVyYm9zZV9ieXRlcyAoZCwgbGVuLCBzdGFydCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1NDgsNyArMTU0Niw3IEBACiAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBfZGJ1c192ZXJib3NlX2J5dGVzX29mX3N0cmluZyAoJnN0ciwgZHVtcF9wb3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSAtIGR1bXBfcG9zKTsgICAgICBcCi0gICAgICAgIF9kYnVzX3dhcm4gKCJsaXRlcmFsICclcydcbnZhbHVlICAnJXMnIiwgbGl0ZXJhbCwgdl8jI3R5cGVuYW1lKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgX2RidXNfd2FybiAoImxpdGVyYWwgJyVzJ1xudmFsdWUgICclcydcbiIsIGxpdGVyYWwsIHZfIyN0eXBlbmFtZSk7ICAgICAgICAgICAgICBcCiAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRlbWFyc2hhbGVkIHdyb25nIHZhbHVlIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSAoMCkKQEAgLTE1ODgsOSArMTU4Niw5IEBACiAgICAgICAgIF9kYnVzX3ZlcmJvc2VfYnl0ZXNfb2Zfc3RyaW5nICgmc3RyLCBkdW1wX3BvcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikgLSBkdW1wX3Bvcyk7ICAgICAgIFwKICAgICAgICAgX2RidXNfdmVyYm9zZSAoIkxJVEVSQUwgREFUQVxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9kYnVzX3ZlcmJvc2VfYnl0ZXMgKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGxpdGVyYWwsIHNpemVvZiAobGl0ZXJhbCksIDApOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9kYnVzX3ZlcmJvc2VfYnl0ZXMgKChjaGFyKilsaXRlcmFsLCBzaXplb2YgKGxpdGVyYWwpLCAwKTsgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBfZGJ1c192ZXJib3NlICgiUkVBRCBEQVRBXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2RidXNfdmVyYm9zZV9ieXRlcyAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdl9BUlJBWV8jI3R5cGVuYW1lLCBzaXplb2YgKGxpdGVyYWwpLCAwKTsgICAgICAgICAgIFwKKyAgICAgICAgX2RidXNfdmVyYm9zZV9ieXRlcyAoKGNoYXIqKXZfQVJSQVlfIyN0eXBlbmFtZSwgc2l6ZW9mIChsaXRlcmFsKSwgMCk7ICAgICAgICAgICBcCiAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRlbWFyc2hhbGVkIHdyb25nIGZpeGVkIGFycmF5IHZhbHVlIik7ICAgICAgICAgICAgICAgXAogICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSAoMCkKQEAgLTE2MTAsOSArMTYwOCw3IEBACiAgIGludCBwb3MsIGR1bXBfcG9zOwogICB1bnNpZ25lZCBjaGFyIGFycmF5MVs1XSA9IHsgMywgNCwgMCwgMSwgOSB9OwogICBkYnVzX2ludDE2X3QgYXJyYXkyWzNdID0geyAxMjQsIDQ1NywgNzgwIH07Ci0gIGRidXNfdWludDE2X3QgYXJyYXkydVszXSA9IHsgMTI0LCA0NTcsIDc4MCB9OwogICBkYnVzX2ludDMyX3QgYXJyYXk0WzNdID0geyAxMjMsIDQ1NiwgNzg5IH07Ci0gIGRidXNfdWludDMyX3QgYXJyYXk0dVszXSA9IHsgMTIzLCA0NTYsIDc4OSB9OwogICBkYnVzX2ludDY0X3QgYXJyYXk4WzNdID0geyBEQlVTX0lOVDY0X0NPTlNUQU5UICgweDEyM2ZmZmZmZmZmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19JTlQ2NF9DT05TVEFOVCAoMHg0NTZmZmZmZmZmZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfSU5UNjRfQ09OU1RBTlQgKDB4Nzg5ZmZmZmZmZmYpIH07CkBAIC0xNzA5LDEzICsxNzA1LDEzIEBACiAgIC8qIEFycmF5cyAqLwogICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKElOVDE2LCBEQlVTX0JJR19FTkRJQU4sIGFycmF5Mik7CiAgIE1BUlNIQUxfVEVTVF9GSVhFRF9BUlJBWSAoSU5UMTYsIERCVVNfTElUVExFX0VORElBTiwgYXJyYXkyKTsKLSAgTUFSU0hBTF9URVNUX0ZJWEVEX0FSUkFZIChVSU5UMTYsIERCVVNfQklHX0VORElBTiwgYXJyYXkydSk7Ci0gIE1BUlNIQUxfVEVTVF9GSVhFRF9BUlJBWSAoVUlOVDE2LCBEQlVTX0xJVFRMRV9FTkRJQU4sIGFycmF5MnUpOworICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKFVJTlQxNiwgREJVU19CSUdfRU5ESUFOLCBhcnJheTIpOworICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKFVJTlQxNiwgREJVU19MSVRUTEVfRU5ESUFOLCBhcnJheTIpOwogICAKICAgTUFSU0hBTF9URVNUX0ZJWEVEX0FSUkFZIChJTlQzMiwgREJVU19CSUdfRU5ESUFOLCBhcnJheTQpOwogICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKElOVDMyLCBEQlVTX0xJVFRMRV9FTkRJQU4sIGFycmF5NCk7Ci0gIE1BUlNIQUxfVEVTVF9GSVhFRF9BUlJBWSAoVUlOVDMyLCBEQlVTX0JJR19FTkRJQU4sIGFycmF5NHUpOwotICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKFVJTlQzMiwgREJVU19MSVRUTEVfRU5ESUFOLCBhcnJheTR1KTsKKyAgTUFSU0hBTF9URVNUX0ZJWEVEX0FSUkFZIChVSU5UMzIsIERCVVNfQklHX0VORElBTiwgYXJyYXk0KTsKKyAgTUFSU0hBTF9URVNUX0ZJWEVEX0FSUkFZIChVSU5UMzIsIERCVVNfTElUVExFX0VORElBTiwgYXJyYXk0KTsKIAogICBNQVJTSEFMX1RFU1RfRklYRURfQVJSQVkgKEJZVEUsIERCVVNfQklHX0VORElBTiwgYXJyYXkxKTsKICAgTUFSU0hBTF9URVNUX0ZJWEVEX0FSUkFZIChCWVRFLCBEQlVTX0xJVFRMRV9FTkRJQU4sIGFycmF5MSk7CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtbWFyc2hhbC1iYXNpYy5oIGIvZGJ1cy9kYnVzLW1hcnNoYWwtYmFzaWMuaAppbmRleCAwYzRlNDExLi42OGZmMzQ4IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWFyc2hhbC1iYXNpYy5oCisrKyBiL2RidXMvZGJ1cy1tYXJzaGFsLWJhc2ljLmgKQEAgLTIxNCw2ICsyMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBieXRlX29yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICpuZXdfcG9zKTsKIGludCAgICAgICAgICAgX2RidXNfdHlwZV9nZXRfYWxpZ25tZW50ICAgICAgICAoaW50ICAgICAgICAgICAgICAgdHlwZWNvZGUpOworaW50ICAgICAgICAgICBfZGJ1c190eXBlX2dldF9hbGlnbm1lbnQgICAgICAgIChpbnQgICAgICAgICAgICAgICB0eXBlY29kZSk7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCiBjb25zdCBjaGFyKiAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nICAgICAgICAgICAgKGludCAgICAgICAgICAgICAgIHR5cGVjb2RlKTsKIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1hcnNoYWwtYnl0ZXN3YXAtdXRpbC5jIGIvZGJ1cy9kYnVzLW1hcnNoYWwtYnl0ZXN3YXAtdXRpbC5jCmluZGV4IDgwZmMwMTMuLjU3ODc0ODUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tYXJzaGFsLWJ5dGVzd2FwLXV0aWwuYworKysgYi9kYnVzL2RidXMtbWFyc2hhbC1ieXRlc3dhcC11dGlsLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICBfZGJ1c192ZXJib3NlX2J5dGVzX29mX3N0cmluZyAoJmNvcHksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmY29weSkpOwogCi0gICAgICAgICAgX2RidXNfd2FybiAoIkJ5dGUtc3dhcHBlZCBkYXRhIGRpZCBub3QgaGF2ZSBzYW1lIHZhbHVlcyBhcyBvcmlnaW5hbCBkYXRhIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIkJ5dGUtc3dhcHBlZCBkYXRhIGRpZCBub3QgaGF2ZSBzYW1lIHZhbHVlcyBhcyBvcmlnaW5hbCBkYXRhXG4iKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ0ZXN0IGZhaWxlZCIpOwogICAgICAgICB9CiAgICAgICAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYXJzaGFsLWJ5dGVzd2FwLmMgYi9kYnVzL2RidXMtbWFyc2hhbC1ieXRlc3dhcC5jCmluZGV4IDI3Njk1YWEuLmU2NzExYmUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tYXJzaGFsLWJ5dGVzd2FwLmMKKysrIGIvZGJ1cy9kYnVzLW1hcnNoYWwtYnl0ZXN3YXAuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgICAgICBzaWdfbGVuID0gKnA7CiAgICAgICAgICAgICArK3A7CiAKLSAgICAgICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0X2xlbiAoJnNpZywgKGNvbnN0IGNoYXIgKikgcCwgc2lnX2xlbik7CisgICAgICAgICAgICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdF9sZW4gKCZzaWcsIHAsIHNpZ19sZW4pOwogCiAgICAgICAgICAgICBwICs9IChzaWdfbGVuICsgMSk7IC8qIDEgZm9yIG51bCAqLwogCkBAIC0yMzksNyArMjM5LDcgQEAKIAogICBieXRlc3dhcF9ib2R5X2hlbHBlciAoJnJlYWRlciwgVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9ieXRlX29yZGVyLCBuZXdfYnl0ZV9vcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfdWRhdGFfbGVuICh2YWx1ZV9zdHIsIHZhbHVlX3BvcywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2RhdGFfbGVuICh2YWx1ZV9zdHIsIHZhbHVlX3BvcywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1hcnNoYWwtaGVhZGVyLmMgYi9kYnVzL2RidXMtbWFyc2hhbC1oZWFkZXIuYwppbmRleCA3NGIzOWNkLi40ODE1MWM2IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWFyc2hhbC1oZWFkZXIuYworKysgYi9kYnVzL2RidXMtbWFyc2hhbC1oZWFkZXIuYwpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAKIHsKICAgdW5zaWduZWQgY2hhciAqZmxhZ3NfcDsKIAotICBmbGFnc19wID0gX2RidXNfc3RyaW5nX2dldF91ZGF0YV9sZW4gKCZoZWFkZXItPmRhdGEsIEZMQUdTX09GRlNFVCwgMSk7CisgIGZsYWdzX3AgPSBfZGJ1c19zdHJpbmdfZ2V0X2RhdGFfbGVuICgmaGVhZGVyLT5kYXRhLCBGTEFHU19PRkZTRVQsIDEpOwogCiAgIGlmICh2YWx1ZSkKICAgICAqZmxhZ3NfcCB8PSBmbGFnOwpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAKIHsKICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmxhZ3NfcDsKIAotICBmbGFnc19wID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YV9sZW4gKCZoZWFkZXItPmRhdGEsIEZMQUdTX09GRlNFVCwgMSk7CisgIGZsYWdzX3AgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuICgmaGVhZGVyLT5kYXRhLCBGTEFHU19PRkZTRVQsIDEpOwogCiAgIHJldHVybiAoKmZsYWdzX3AgJiBmbGFnKSAhPSAwOwogfQpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1hcnNoYWwtcmVjdXJzaXZlLXV0aWwuYyBiL2RidXMvZGJ1cy1tYXJzaGFsLXJlY3Vyc2l2ZS11dGlsLmMKaW5kZXggYjMwZjU4OC4uM2JjMjZhOCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1hcnNoYWwtcmVjdXJzaXZlLXV0aWwuYworKysgYi9kYnVzL2RidXMtbWFyc2hhbC1yZWN1cnNpdmUtdXRpbC5jCkBAIC0zMSwxMyArMzEsNiBAQAogI2luY2x1ZGUgImRidXMtaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpZiAhZGVmaW5lZChQUkl4NjQpICYmIGRlZmluZWQoREJVU19XSU4pCi0jZGVmaW5lIFBSSXg2NCAiSTY0eCIKLSNlbmRpZgotCi0vKiogdHVybiB0aGlzIG9uIHRvIGdldCBkZWx1Z2VkIGluIFR5cGVXcml0ZXIgdmVyYm9zZSBzcGFtICovCi0jZGVmaW5lIFJFQ1VSU0lWRV9NQVJTSEFMX1dSSVRFX1RSQUNFIDAKLQogc3RhdGljIHZvaWQKIGJhc2ljX3ZhbHVlX3plcm8gKERCdXNCYXNpY1ZhbHVlICp2YWx1ZSkKIHsKQEAgLTMwNyw3ICszMDAsNyBAQAogCiAgIGlmICh0ICE9IGV4cGVjdGVkKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJSZWFkIHR5cGUgJXMgd2hpbGUgZXhwZWN0aW5nICVzIGF0ICVzIGxpbmUgJWQiLAorICAgICAgX2RidXNfd2FybiAoIlJlYWQgdHlwZSAlcyB3aGlsZSBleHBlY3RpbmcgJXMgYXQgJXMgbGluZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nICh0KSwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nIChleHBlY3RlZCksCiAgICAgICAgICAgICAgICAgICBmdW5jbmFtZSwgbGluZSk7CkBAIC0zMjAsNyArMzEzLDcgQEAKIAogI2RlZmluZSBORVhUX0VYUEVDVElOR19UUlVFKHJlYWRlcikgIGRvIHsgaWYgKCFfZGJ1c190eXBlX3JlYWRlcl9uZXh0IChyZWFkZXIpKSAgICAgICAgIFwKICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2RidXNfd2FybiAoIl9kYnVzX3R5cGVfcmVhZGVyX25leHQoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBUUlVFIGF0ICVzICVkIiwgICAgICAgICAgXAorICAgIF9kYnVzX3dhcm4gKCJfZGJ1c190eXBlX3JlYWRlcl9uZXh0KCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgVFJVRSBhdCAlcyAlZFxuIiwgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQlVTX0ZVTkNUSU9OX05BTUUsIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMyOCw3ICszMjEsNyBAQAogCiAjZGVmaW5lIE5FWFRfRVhQRUNUSU5HX0ZBTFNFKHJlYWRlcikgZG8geyBpZiAoX2RidXNfdHlwZV9yZWFkZXJfbmV4dCAocmVhZGVyKSkgICAgICAgICAgXAogIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZGJ1c193YXJuICgiX2RidXNfdHlwZV9yZWFkZXJfbmV4dCgpIHNob3VsZCBoYXZlIHJldHVybmVkIEZBTFNFIGF0ICVzICVkIiwgICAgICAgICBcCisgICAgX2RidXNfd2FybiAoIl9kYnVzX3R5cGVfcmVhZGVyX25leHQoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBGQUxTRSBhdCAlcyAlZFxuIiwgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCVVNfRlVOQ1RJT05fTkFNRSwgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ0ZXN0IGZhaWxlZCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTMyMyw3ICsxMzE2LDcgQEAKICAgICAgICAgICAgICAgd2hpbGUgKGVsZW0gPiAwKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGlmICghX2RidXNfdHlwZV9yZWFkZXJfbmV4dCAoJmFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgic2hvdWxkIGhhdmUgaGFkIGFub3RoZXIgZWxlbWVudCIpOworICAgICAgICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJzaG91bGQgaGF2ZSBoYWQgYW5vdGhlciBlbGVtZW50XG4iKTsKICAgICAgICAgICAgICAgICAgIC0tZWxlbTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEzOTgsNyArMTM5MSw3IEBACiAgIGlmICghX2RidXNfc3RyaW5nX2VxdWFsX3N1YnN0cmluZyAobmlkLT5zaWduYXR1cmUsIDAsIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChuaWQtPnNpZ25hdHVyZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5pZC0+YmxvY2stPnNpZ25hdHVyZSwgbmlkLT50eXBlX29mZnNldCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIHNpZ25hdHVyZSAnJXMnIGFuZCBnb3QgJyVzJyB3aXRoIGluaXRpYWwgb2Zmc2V0ICVkIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJFeHBlY3RlZCBzaWduYXR1cmUgJyVzJyBhbmQgZ290ICclcycgd2l0aCBpbml0aWFsIG9mZnNldCAlZFxuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAobmlkLT5zaWduYXR1cmUpLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhX2xlbiAoJm5pZC0+YmxvY2stPnNpZ25hdHVyZSwgbmlkLT50eXBlX29mZnNldCwgMCksCiAgICAgICAgICAgICAgICAgICBuaWQtPnR5cGVfb2Zmc2V0KTsKQEAgLTE3MDQsMTQgKzE2OTcsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQKLXN0YXJ0X25leHRfdGVzdCAoY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCitzdGFydF9uZXh0X3Rlc3QgKGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgZXhwZWN0ZWQpCiB7CiAgIG5faXRlcmF0aW9uc19jb21wbGV0ZWRfdGhpc190ZXN0ID0gMDsKICAgbl9pdGVyYXRpb25zX2V4cGVjdGVkX3RoaXNfdGVzdCA9IGV4cGVjdGVkOwogCi0gIGZwcmludGYgKHN0ZGVyciwgIj4+PiA+Pj4gJXMgJWQgaXRlcmF0aW9uc1xuIiwKLSAgICAgICAgICAgZGVzY3JpcHRpb24sCisgIGZwcmludGYgKHN0ZGVyciwgIj4+PiA+Pj4gIik7CisgIGZwcmludGYgKHN0ZGVyciwgZm9ybWF0LAogICAgICAgICAgICBuX2l0ZXJhdGlvbnNfZXhwZWN0ZWRfdGhpc190ZXN0KTsKIH0KIApAQCAtMTc1Miw3ICsxNzQ1LDcgQEAKIAogICAvKiBGSVhNRSB0ZXN0IGp1c3QgYW4gZW1wdHkgYm9keSwgbm8gdHlwZXMgYXQgYWxsICovCiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCB2YWx1ZSBieSBpdHNlbGYiLCBOX1ZBTFVFUyk7CisgIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggdmFsdWUgYnkgaXRzZWxmICVkIGl0ZXJhdGlvbnNcbiIsIE5fVkFMVUVTKTsKICAgewogICAgIFRlc3RUeXBlTm9kZSAqbm9kZTsKICAgICBpID0gMDsKQEAgLTE3NjQsNyArMTc1Nyw3IEBACiAgICAgICB9CiAgIH0KIAotICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIHZhbHVlIGJ5IGl0c2VsZiB3aXRoIGFycmF5cyBhcyBibG9ja3MiLCBOX1ZBTFVFUyk7CisgIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggdmFsdWUgYnkgaXRzZWxmIHdpdGggYXJyYXlzIGFzIGJsb2NrcyAlZCBpdGVyYXRpb25zXG4iLCBOX1ZBTFVFUyk7CiAgIGFycmF5c193cml0ZV9maXhlZF9pbl9ibG9ja3MgPSBUUlVFOwogICB7CiAgICAgVGVzdFR5cGVOb2RlICpub2RlOwpAQCAtMTc3OCw3ICsxNzcxLDcgQEAKICAgfQogICBhcnJheXNfd3JpdGVfZml4ZWRfaW5fYmxvY2tzID0gRkFMU0U7CiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiQWxsIHZhbHVlcyBpbiBvbmUgYmlnIHRvcGxldmVsIiwgMSk7CisgIHN0YXJ0X25leHRfdGVzdCAoIkFsbCB2YWx1ZXMgaW4gb25lIGJpZyB0b3BsZXZlbCAlZCBpdGVyYXRpb25cbiIsIDEpOwogICB7CiAgICAgVGVzdFR5cGVOb2RlICpub2Rlc1tOX1ZBTFVFU107CiAgICAgVGVzdFR5cGVOb2RlICpub2RlOwpAQCAtMTc5NSw3ICsxNzg4LDcgQEAKICAgICAgIG5vZGVfZGVzdHJveSAobm9kZXNbaV0pOwogICB9CiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCB2YWx1ZSx2YWx1ZSBwYWlyIGNvbWJpbmF0aW9uIGFzIHRvcGxldmVsLCBpbiBib3RoIG9yZGVycyIsCisgIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggdmFsdWUsdmFsdWUgcGFpciBjb21iaW5hdGlvbiBhcyB0b3BsZXZlbCwgaW4gYm90aCBvcmRlcnMgJWQgaXRlcmF0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICBOX1ZBTFVFUyAqIE5fVkFMVUVTKTsKICAgewogICAgIFRlc3RUeXBlTm9kZSAqbm9kZXNbMl07CkBAIC0xODE1LDcgKzE4MDgsNyBAQAogICAgICAgfQogICB9CiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCBjb250YWluZXIgY29udGFpbmluZyBlYWNoIHZhbHVlIiwKKyAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCBjb250YWluZXIgY29udGFpbmluZyBlYWNoIHZhbHVlICVkIGl0ZXJhdGlvbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgTl9DT05UQUlORVJTICogTl9WQUxVRVMpOwogICBmb3IgKGkgPSAwOyBpIDwgTl9DT05UQUlORVJTOyBpKyspCiAgICAgewpAQCAtMTgyNCw3ICsxODE3LDcgQEAKICAgICAgIG1ha2VfYW5kX3J1bl92YWx1ZXNfaW5zaWRlX2NvbnRhaW5lciAoY29udGFpbmVyX2tsYXNzLCAxKTsKICAgICB9CiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCBjb250YWluZXIgY29udGFpbmluZyBlYWNoIHZhbHVlIHdpdGggYXJyYXlzIGFzIGJsb2NrcyIsCisgIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggY29udGFpbmVyIGNvbnRhaW5pbmcgZWFjaCB2YWx1ZSB3aXRoIGFycmF5cyBhcyBibG9ja3MgJWQgaXRlcmF0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICBOX0NPTlRBSU5FUlMgKiBOX1ZBTFVFUyk7CiAgIGFycmF5c193cml0ZV9maXhlZF9pbl9ibG9ja3MgPSBUUlVFOwogICBmb3IgKGkgPSAwOyBpIDwgTl9DT05UQUlORVJTOyBpKyspCkBAIC0xODM1LDcgKzE4MjgsNyBAQAogICAgIH0KICAgYXJyYXlzX3dyaXRlX2ZpeGVkX2luX2Jsb2NrcyA9IEZBTFNFOwogCi0gIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggY29udGFpbmVyIG9mIHNhbWUgY29udGFpbmVyIG9mIGVhY2ggdmFsdWUiLAorICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIGNvbnRhaW5lciBvZiBzYW1lIGNvbnRhaW5lciBvZiBlYWNoIHZhbHVlICVkIGl0ZXJhdGlvbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgTl9DT05UQUlORVJTICogTl9WQUxVRVMpOwogICBmb3IgKGkgPSAwOyBpIDwgTl9DT05UQUlORVJTOyBpKyspCiAgICAgewpAQCAtMTg0NCw3ICsxODM3LDcgQEAKICAgICAgIG1ha2VfYW5kX3J1bl92YWx1ZXNfaW5zaWRlX2NvbnRhaW5lciAoY29udGFpbmVyX2tsYXNzLCAyKTsKICAgICB9CiAKLSAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCBjb250YWluZXIgb2Ygc2FtZSBjb250YWluZXIgb2Ygc2FtZSBjb250YWluZXIgb2YgZWFjaCB2YWx1ZSIsCisgIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggY29udGFpbmVyIG9mIHNhbWUgY29udGFpbmVyIG9mIHNhbWUgY29udGFpbmVyIG9mIGVhY2ggdmFsdWUgJWQgaXRlcmF0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICBOX0NPTlRBSU5FUlMgKiBOX1ZBTFVFUyk7CiAgIGZvciAoaSA9IDA7IGkgPCBOX0NPTlRBSU5FUlM7IGkrKykKICAgICB7CkBAIC0xODUzLDcgKzE4NDYsNyBAQAogICAgICAgbWFrZV9hbmRfcnVuX3ZhbHVlc19pbnNpZGVfY29udGFpbmVyIChjb250YWluZXJfa2xhc3MsIDMpOwogICAgIH0KIAotICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIHZhbHVlLHZhbHVlIHBhaXIgaW5zaWRlIGEgc3RydWN0IiwKKyAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCB2YWx1ZSx2YWx1ZSBwYWlyIGluc2lkZSBhIHN0cnVjdCAlZCBpdGVyYXRpb25zXG4iLAogICAgICAgICAgICAgICAgICAgIE5fVkFMVUVTICogTl9WQUxVRVMpOwogICB7CiAgICAgVGVzdFR5cGVOb2RlICp2YWwxLCAqdmFsMjsKQEAgLTE4ODIsNyArMTg3NSw4IEBACiAgICAgbm9kZV9kZXN0cm95IChub2RlKTsKICAgfQogCi0gIHN0YXJ0X25leHRfdGVzdCAoIkFsbCB2YWx1ZXMgaW4gb25lIGJpZyBzdHJ1Y3QiLCAxKTsKKyAgc3RhcnRfbmV4dF90ZXN0ICgiQWxsIHZhbHVlcyBpbiBvbmUgYmlnIHN0cnVjdCAlZCBpdGVyYXRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgMSk7CiAgIHsKICAgICBUZXN0VHlwZU5vZGUgKm5vZGU7CiAgICAgVGVzdFR5cGVOb2RlICpjaGlsZDsKQEAgLTE4OTgsNyArMTg5Miw4IEBACiAgICAgbm9kZV9kZXN0cm95IChub2RlKTsKICAgfQogCi0gIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggdmFsdWUgaW4gYSBsYXJnZSBhcnJheSIsIE5fVkFMVUVTKTsKKyAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCB2YWx1ZSBpbiBhIGxhcmdlIGFycmF5ICVkIGl0ZXJhdGlvbnNcbiIsCisgICAgICAgICAgICAgICAgICAgTl9WQUxVRVMpOwogICB7CiAgICAgVGVzdFR5cGVOb2RlICp2YWw7CiAgICAgVGVzdFR5cGVOb2RlICpub2RlOwpAQCAtMTkyOSw3ICsxOTI0LDcgQEAKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIGNvbnRhaW5lciBvZiBlYWNoIGNvbnRhaW5lciBvZiBlYWNoIHZhbHVlIiwKKyAgc3RhcnRfbmV4dF90ZXN0ICgiRWFjaCBjb250YWluZXIgb2YgZWFjaCBjb250YWluZXIgb2YgZWFjaCB2YWx1ZSAlZCBpdGVyYXRpb25zXG4iLAogICAgICAgICAgICAgICAgICAgIE5fQ09OVEFJTkVSUyAqIE5fQ09OVEFJTkVSUyAqIE5fVkFMVUVTKTsKICAgZm9yIChpID0gMDsgaSA8IE5fQ09OVEFJTkVSUzsgaSsrKQogICAgIHsKQEAgLTE5NjAsNyArMTk1NSw3IEBACiAgICAgICBub2RlX2Rlc3Ryb3kgKG91dGVyX2NvbnRhaW5lcik7CiAgICAgfQogCi0gIHN0YXJ0X25leHRfdGVzdCAoIkVhY2ggY29udGFpbmVyIG9mIGVhY2ggY29udGFpbmVyIG9mIGVhY2ggY29udGFpbmVyIG9mIGVhY2ggdmFsdWUiLAorICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIGNvbnRhaW5lciBvZiBlYWNoIGNvbnRhaW5lciBvZiBlYWNoIGNvbnRhaW5lciBvZiBlYWNoIHZhbHVlICVkIGl0ZXJhdGlvbnNcbiIsCiAgICAgICAgICAgICAgICAgICAgTl9DT05UQUlORVJTICogTl9DT05UQUlORVJTICogTl9DT05UQUlORVJTICogTl9WQUxVRVMpOwogICBmb3IgKGkgPSAwOyBpIDwgTl9DT05UQUlORVJTOyBpKyspCiAgICAgewpAQCAtMjAxMCw3ICsyMDA1LDcgQEAKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIHZhbHVlLHZhbHVlLHZhbHVlIHRyaXBsZXQgY29tYmluYXRpb24gYXMgdG9wbGV2ZWwsIGluIGFsbCBvcmRlcnMiLAorICBzdGFydF9uZXh0X3Rlc3QgKCJFYWNoIHZhbHVlLHZhbHVlLHZhbHVlIHRyaXBsZXQgY29tYmluYXRpb24gYXMgdG9wbGV2ZWwsIGluIGFsbCBvcmRlcnMgJWQgaXRlcmF0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICBOX1ZBTFVFUyAqIE5fVkFMVUVTICogTl9WQUxVRVMpOwogICB7CiAgICAgVGVzdFR5cGVOb2RlICpub2Rlc1szXTsKQEAgLTIwNzAsMTUgKzIwNjUsMjcgQEAKICAgICoganVzdCB1c2Ugc2VlZCBpdHNlbGYsIGJ1dCB0aGF0IHdvdWxkIG9ubHkgZXZlciB0b3VjaCBvbmUgYnl0ZSBvZgogICAgKiB0aGUgaW50IHNvIHdvdWxkIG1pc3Mgc29tZSBraW5kcyBvZiBidWcuCiAgICAqLwotICBzdGF0aWMgY29uc3QgZGJ1c19pbnQxNl90IHZfb2Zfc2VlZFs1XSA9IHsKLSAgICBTQU1QTEVfSU5UMTYsCi0gICAgU0FNUExFX0lOVDE2X0FMVEVSTkFURSwKLSAgICAtMSwKLSAgICBfREJVU19JTlQxNl9NQVgsCi0gICAgMQotICB9OworICBkYnVzX2ludDE2X3QgdjsKIAotICBkYnVzX2ludDE2X3QgdiA9IHZfb2Zfc2VlZFtzZWVkICUgX0RCVVNfTl9FTEVNRU5UUyh2X29mX3NlZWQpXTsKKyAgdiA9IDQyOyAvKiBqdXN0IHRvIHF1aWV0IGNvbXBpbGVyIGFmYWlrICovCisgIHN3aXRjaCAoc2VlZCAlIDUpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIHYgPSBTQU1QTEVfSU5UMTY7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICB2ID0gU0FNUExFX0lOVDE2X0FMVEVSTkFURTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIHYgPSAtMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIHYgPSBfREJVU19JTlQxNl9NQVg7CisgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICB2ID0gMTsKKyAgICAgIGJyZWFrOworICAgIH0KIAogICBpZiAoc2VlZCA+IDEpCiAgICAgdiAqPSBzZWVkOyAvKiB3cmFwcyBhcm91bmQgZXZlbnR1YWxseSwgd2hpY2ggaXMgZmluZSAqLwpAQCAtMjE3NCw3ICsyMTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5fZWxlbWVudHMpOwogCiAgIGlmIChuX2VsZW1lbnRzICE9IGNvdW50KQotICAgIF9kYnVzX3dhcm4gKCJnb3QgJWQgZWxlbWVudHMgZXhwZWN0ZWQgJWQiLCBuX2VsZW1lbnRzLCBjb3VudCk7CisgICAgX2RidXNfd2FybiAoImdvdCAlZCBlbGVtZW50cyBleHBlY3RlZCAlZFxuIiwgbl9lbGVtZW50cywgY291bnQpOwogICBfZGJ1c19hc3NlcnQgKG5fZWxlbWVudHMgPT0gY291bnQpOwogCiAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQpAQCAtMjE5NSwxNSArMjIwMiwyNyBAQAogICAgKiBqdXN0IHVzZSBzZWVkIGl0c2VsZiwgYnV0IHRoYXQgd291bGQgb25seSBldmVyIHRvdWNoIG9uZSBieXRlIG9mCiAgICAqIHRoZSBpbnQgc28gd291bGQgbWlzcyBzb21lIGtpbmRzIG9mIGJ1Zy4KICAgICovCi0gIHN0YXRpYyBjb25zdCBkYnVzX2ludDMyX3Qgdl9vZl9zZWVkWzVdID0gewotICAgIFNBTVBMRV9JTlQzMiwKLSAgICBTQU1QTEVfSU5UMzJfQUxURVJOQVRFLAotICAgIC0xLAotICAgIF9EQlVTX0lOVF9NQVgsCi0gICAgMQotICB9OworICBkYnVzX2ludDMyX3QgdjsKIAotICBkYnVzX2ludDMyX3QgdiA9IHZfb2Zfc2VlZFtzZWVkICUgX0RCVVNfTl9FTEVNRU5UUyh2X29mX3NlZWQpXTsKKyAgdiA9IDQyOyAvKiBqdXN0IHRvIHF1aWV0IGNvbXBpbGVyIGFmYWlrICovCisgIHN3aXRjaCAoc2VlZCAlIDUpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIHYgPSBTQU1QTEVfSU5UMzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICB2ID0gU0FNUExFX0lOVDMyX0FMVEVSTkFURTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIHYgPSAtMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIHYgPSBfREJVU19JTlRfTUFYOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgdiA9IDE7CisgICAgICBicmVhazsKKyAgICB9CiAKICAgaWYgKHNlZWQgPiAxKQogICAgIHYgKj0gc2VlZDsgLyogd3JhcHMgYXJvdW5kIGV2ZW50dWFsbHksIHdoaWNoIGlzIGZpbmUgKi8KQEAgLTIyOTksNyArMjMxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuX2VsZW1lbnRzKTsKIAogICBpZiAobl9lbGVtZW50cyAhPSBjb3VudCkKLSAgICBfZGJ1c193YXJuICgiZ290ICVkIGVsZW1lbnRzIGV4cGVjdGVkICVkIiwgbl9lbGVtZW50cywgY291bnQpOworICAgIF9kYnVzX3dhcm4gKCJnb3QgJWQgZWxlbWVudHMgZXhwZWN0ZWQgJWRcbiIsIG5fZWxlbWVudHMsIGNvdW50KTsKICAgX2RidXNfYXNzZXJ0IChuX2VsZW1lbnRzID09IGNvdW50KTsKIAogICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKQEAgLTIzOTAsOSArMjQwOSw2IEBACiAgICAqLwogICBzd2l0Y2ggKHNlZWQgJSAzKQogICAgIHsKLSAgICBkZWZhdWx0OgotICAgICAgLyogZG9uJ3QgYWx0ZXIgaXQgKi8KLSAgICAgIGJyZWFrOwogICAgIGNhc2UgMToKICAgICAgIGxlbiArPSAyOwogICAgICAgYnJlYWs7CkBAIC0yNDU3LDcgKzI0NzMsNyBAQAogCiAgIGlmIChzdHJjbXAgKGJ1ZiwgdikgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgicmVhZCBzdHJpbmcgJyVzJyBleHBlY3RlZCAnJXMnIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJyZWFkIHN0cmluZyAnJXMnIGV4cGVjdGVkICclcydcbiIsCiAgICAgICAgICAgICAgICAgICB2LCBidWYpOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICB9CkBAIC0yNjI4LDEwICsyNjQ0LDEyIEBACiAKICAgaWYgKCFfREJVU19ET1VCTEVTX0JJVFdJU0VfRVFVQUwgKHYsIGV4cGVjdGVkKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgZG91YmxlICVnIGdvdCAlZ1xuIGJpdHMgPSAweCUiIFBSSXg2NCAiIHZzLlxuIGJpdHMgPSAweCUiIFBSSXg2NCwKKyNpZmRlZiBEQlVTX0lOVDY0X1BSSU5URl9NT0RJRklFUgorICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGRvdWJsZSAlZyBnb3QgJWdcbiBiaXRzID0gMHglIiBEQlVTX0lOVDY0X1BSSU5URl9NT0RJRklFUiAieCB2cy5cbiBiaXRzID0gMHglIiBEQlVTX0lOVDY0X1BSSU5URl9NT0RJRklFUiAieClcbiIsCiAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgdiwKICAgICAgICAgICAgICAgICAgICooZGJ1c191aW50NjRfdCopKGNoYXIqKSZleHBlY3RlZCwKICAgICAgICAgICAgICAgICAgICooZGJ1c191aW50NjRfdCopKGNoYXIqKSZ2KTsKKyNlbmRpZgogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICB9CiAKQEAgLTI3MjUsNyArMjc0Myw3IEBACiAKICAgaWYgKHN0cmNtcCAoYnVmLCB2KSAhPSAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJyZWFkIG9iamVjdCBwYXRoICclcycgZXhwZWN0ZWQgJyVzJyIsCisgICAgICBfZGJ1c193YXJuICgicmVhZCBvYmplY3QgcGF0aCAnJXMnIGV4cGVjdGVkICclcydcbiIsCiAgICAgICAgICAgICAgICAgICB2LCBidWYpOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICB9CkBAIC0yODAwLDcgKzI4MTgsNyBAQAogCiAgIGlmIChzdHJjbXAgKGJ1ZiwgdikgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgicmVhZCBzaWduYXR1cmUgdmFsdWUgJyVzJyBleHBlY3RlZCAnJXMnIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJyZWFkIHNpZ25hdHVyZSB2YWx1ZSAnJXMnIGV4cGVjdGVkICclcydcbiIsCiAgICAgICAgICAgICAgICAgICB2LCBidWYpOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICB9CkBAIC0zMDUwLDEwICszMDY4LDEwIEBACiAgICAgICAgICAgbGluayA9IF9kYnVzX2xpc3RfZ2V0X2ZpcnN0X2xpbmsgKCZjb250YWluZXItPmNoaWxkcmVuKTsKICAgICAgICAgICB3aGlsZSAobGluayAhPSBOVUxMKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBUZXN0VHlwZU5vZGUgKmNoaWxkMiA9IGxpbmstPmRhdGE7CisgICAgICAgICAgICAgIFRlc3RUeXBlTm9kZSAqY2hpbGQgPSBsaW5rLT5kYXRhOwogICAgICAgICAgICAgICBEQnVzTGlzdCAqbmV4dCA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayAoJmNvbnRhaW5lci0+Y2hpbGRyZW4sIGxpbmspOwogCi0gICAgICAgICAgICAgIGlmICghbm9kZV93cml0ZV92YWx1ZSAoY2hpbGQyLCBibG9jaywgJnN1Yiwgc2VlZCArIGkpKQorICAgICAgICAgICAgICBpZiAoIW5vZGVfd3JpdGVfdmFsdWUgKGNoaWxkLCBibG9jaywgJnN1Yiwgc2VlZCArIGkpKQogICAgICAgICAgICAgICAgIGdvdG8gb29tOwogCiAgICAgICAgICAgICAgIGxpbmsgPSBuZXh0OwpAQCAtMzExNCwyMCArMzEzMiwyMCBAQAogICAgICAgICAgICAgICBsaW5rID0gX2RidXNfbGlzdF9nZXRfZmlyc3RfbGluayAoJmNvbnRhaW5lci0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICB3aGlsZSAobGluayAhPSBOVUxMKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFRlc3RUeXBlTm9kZSAqY2hpbGQyID0gbGluay0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgIFRlc3RUeXBlTm9kZSAqY2hpbGQgPSBsaW5rLT5kYXRhOwogICAgICAgICAgICAgICAgICAgREJ1c0xpc3QgKm5leHQgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZjb250YWluZXItPmNoaWxkcmVuLCBsaW5rKTsKIAotICAgICAgICAgICAgICAgICAgX2RidXNfYXNzZXJ0IChjaGlsZDItPmtsYXNzLT50eXBlY29kZSA9PQorICAgICAgICAgICAgICAgICAgX2RidXNfYXNzZXJ0IChjaGlsZC0+a2xhc3MtPnR5cGVjb2RlID09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfcmVhZGVyX2dldF9lbGVtZW50X3R5cGUgKHJlYWRlcikpOwogCiAgICAgICAgICAgICAgICAgICBpZiAocmVhbGlnbl9yb290ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVfcmVhZF92YWx1ZSAoY2hpbGQyLCAmc3ViLCBzZWVkICsgaSkpCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlX3JlYWRfdmFsdWUgKGNoaWxkLCAmc3ViLCBzZWVkICsgaSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZV9zZXRfdmFsdWUgKGNoaWxkMiwgJnN1YiwgcmVhbGlnbl9yb290LCBzZWVkICsgaSkpCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlX3NldF92YWx1ZSAoY2hpbGQsICZzdWIsIHJlYWxpZ25fcm9vdCwgc2VlZCArIGkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYXJzaGFsLXJlY3Vyc2l2ZS5jIGIvZGJ1cy9kYnVzLW1hcnNoYWwtcmVjdXJzaXZlLmMKaW5kZXggNDE3MDY4Yy4uOWJhMTZlOSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1hcnNoYWwtcmVjdXJzaXZlLmMKKysrIGIvZGJ1cy9kYnVzLW1hcnNoYWwtcmVjdXJzaXZlLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiAgIF9kYnVzX2Fzc2VydCAoX0RCVVNfQUxJR05fVkFMVUUgKGxlbl9wb3MsIDQpID09ICh1bnNpZ25lZCkgbGVuX3Bvcyk7CiAgIGFycmF5X2xlbiA9IF9kYnVzX3VucGFja191aW50MzIgKHJlYWRlci0+Ynl0ZV9vcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YV9sZW4gKHJlYWRlci0+dmFsdWVfc3RyLCBsZW5fcG9zLCA0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHJlYWRlci0+dmFsdWVfc3RyLCBsZW5fcG9zLCA0KSk7CiAKICNpZiBSRUNVUlNJVkVfTUFSU0hBTF9SRUFEX1RSQUNFCiAgIF9kYnVzX3ZlcmJvc2UgKCIgICByZWFkZXIgJXAgbGVuX3BvcyAlZCBhcnJheSBsZW4gJXUgbGVuX29mZnNldCAlZFxuIiwKQEAgLTM0Nyw3ICszNDcsNyBAQAogICBfZGJ1c19hc3NlcnQgKHR5cGVfc3RyICE9IE5VTEwpOwogICBfZGJ1c19hc3NlcnQgKHR5cGVfcG9zICE9IE5VTEwpOwogICAKLSAgc3RhcnQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXR5cGVfc3RyOworICBzdGFydCA9IHR5cGVfc3RyOwogICBwID0gc3RhcnQgKyAqdHlwZV9wb3M7CiAKICAgX2RidXNfYXNzZXJ0ICgqcCAhPSBEQlVTX1NUUlVDVF9FTkRfQ0hBUik7CkBAIC04NTUsOSArODU1LDkgQEAKIHsKICAgX2RidXNfYXNzZXJ0ICghcmVhZGVyLT5rbGFzcy0+dHlwZXNfb25seSk7CiAKLSAgKnZhbHVlX2xvY2F0aW9uID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YV9sZW4gKHJlYWRlci0+dmFsdWVfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLT52YWx1ZV9wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgKnZhbHVlX2xvY2F0aW9uID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhX2xlbiAocmVhZGVyLT52YWx1ZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci0+dmFsdWVfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKIH0KIAogLyoqCkBAIC05ODksOCArOTg5LDggQEAKIF9kYnVzX3R5cGVfcmVhZGVyX3JlY3Vyc2UgKERCdXNUeXBlUmVhZGVyICpyZWFkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzVHlwZVJlYWRlciAqc3ViKQogeworICBjb25zdCBEQnVzVHlwZVJlYWRlckNsYXNzICprbGFzczsKICAgaW50IHQ7Ci0gIGNvbnN0IERCdXNUeXBlUmVhZGVyQ2xhc3MgKmtsYXNzID0gTlVMTDsKIAogICB0ID0gX2RidXNfZmlyc3RfdHlwZV9pbl9zaWduYXR1cmUgKHJlYWRlci0+dHlwZV9zdHIsIHJlYWRlci0+dHlwZV9wb3MpOwogCkBAIC0xMDI0LDEzICsxMDI0LDEyIEBACiAgICAgICBfZGJ1c192ZXJib3NlICgicmVjdXJzaW5nIGludG8gdHlwZSAlc1xuIiwgX2RidXNfdHlwZV90b19zdHJpbmcgKHQpKTsKICNpZm5kZWYgREJVU19ESVNBQkxFX0NIRUNLUwogICAgICAgaWYgKHQgPT0gREJVU19UWVBFX0lOVkFMSUQpCi0gICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiWW91IGNhbid0IHJlY3Vyc2UgaW50byBhbiBlbXB0eSBhcnJheSBvciBvZmYgdGhlIGVuZCBvZiBhIG1lc3NhZ2UgYm9keSIpOworICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIllvdSBjYW4ndCByZWN1cnNlIGludG8gYW4gZW1wdHkgYXJyYXkgb3Igb2ZmIHRoZSBlbmQgb2YgYSBtZXNzYWdlIGJvZHlcbiIpOwogI2VuZGlmIC8qIERCVVNfRElTQUJMRV9DSEVDS1MgKi8KIAogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZG9uJ3QgeWV0IGhhbmRsZSByZWN1cnNpbmcgaW50byB0aGlzIHR5cGUiKTsKICAgICB9CiAKLSAgX2RidXNfYXNzZXJ0IChrbGFzcyAhPSBOVUxMKTsKICAgX2RidXNfYXNzZXJ0IChrbGFzcyA9PSBhbGxfcmVhZGVyX2NsYXNzZXNba2xhc3MtPmlkXSk7CiAKICAgKCoga2xhc3MtPnJlY3Vyc2UpIChzdWIsIHJlYWRlcik7CkBAIC0xNjY2LDEzICsxNjY1LDEzIEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoZXhwZWN0ZWQgIT0gREJVU19UWVBFX0lOVkFMSUQpCiAgICAgICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIldyaXRpbmcgYW4gZWxlbWVudCBvZiB0eXBlICVzLCBidXQgdGhlIGV4cGVjdGVkIHR5cGUgaGVyZSBpcyAlc1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgb3ZlcmFsbCBzaWduYXR1cmUgZXhwZWN0ZWQgaGVyZSB3YXMgJyVzJyBhbmQgd2UgYXJlIG9uIGJ5dGUgJWQgb2YgdGhhdCBzaWduYXR1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgc2lnbmF0dXJlIGV4cGVjdGVkIGhlcmUgd2FzICclcycgYW5kIHdlIGFyZSBvbiBieXRlICVkIG9mIHRoYXQgc2lnbmF0dXJlLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c190eXBlX3RvX3N0cmluZyAoc3ViLT5jb250YWluZXJfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfdHlwZV90b19zdHJpbmcgKGV4cGVjdGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHdyaXRlci0+dHlwZV9zdHIpLCB3cml0ZXItPnR5cGVfcG9zKTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIldyaXRpbmcgYW4gZWxlbWVudCBvZiB0eXBlICVzLCBidXQgbm8gdmFsdWUgaXMgZXhwZWN0ZWQgaGVyZVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgb3ZlcmFsbCBzaWduYXR1cmUgZXhwZWN0ZWQgaGVyZSB3YXMgJyVzJyBhbmQgd2UgYXJlIG9uIGJ5dGUgJWQgb2YgdGhhdCBzaWduYXR1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgc2lnbmF0dXJlIGV4cGVjdGVkIGhlcmUgd2FzICclcycgYW5kIHdlIGFyZSBvbiBieXRlICVkIG9mIHRoYXQgc2lnbmF0dXJlLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c190eXBlX3RvX3N0cmluZyAoc3ViLT5jb250YWluZXJfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICh3cml0ZXItPnR5cGVfc3RyKSwgd3JpdGVyLT50eXBlX3Bvcyk7CiAgICAgICAgICAgCkBAIC0xNzMyLDEyICsxNzMxLDEyIEBACiAgICAgICAgICAgewogICAgICAgICAgICAgaWYgKGV4cGVjdGVkICE9IERCVVNfVFlQRV9JTlZBTElEKQogICAgICAgICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIkFycmF5IG9yIHZhcmlhbnQgdHlwZSByZXF1aXJlcyB0aGF0IHR5cGUgJXMgYmUgd3JpdHRlbiwgYnV0ICVzIHdhcyB3cml0dGVuLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBvdmVyYWxsIHNpZ25hdHVyZSBleHBlY3RlZCBoZXJlIHdhcyAnJXMnIGFuZCB3ZSBhcmUgb24gYnl0ZSAlZCBvZiB0aGF0IHNpZ25hdHVyZS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBvdmVyYWxsIHNpZ25hdHVyZSBleHBlY3RlZCBoZXJlIHdhcyAnJXMnIGFuZCB3ZSBhcmUgb24gYnl0ZSAlZCBvZiB0aGF0IHNpZ25hdHVyZS5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c190eXBlX3RvX3N0cmluZyAoZXhwZWN0ZWQpLCBfZGJ1c190eXBlX3RvX3N0cmluZyAodHlwZWNvZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICh3cml0ZXItPnR5cGVfc3RyKSwgd3JpdGVyLT50eXBlX3Bvcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiQXJyYXkgb3IgdmFyaWFudCB0eXBlIHdhc24ndCBleHBlY3RpbmcgYW55IG1vcmUgdmFsdWVzIHRvIGJlIHdyaXR0ZW4gaW50byBpdCwgYnV0IGEgdmFsdWUgJXMgd2FzIHdyaXR0ZW4uXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgc2lnbmF0dXJlIGV4cGVjdGVkIGhlcmUgd2FzICclcycgYW5kIHdlIGFyZSBvbiBieXRlICVkIG9mIHRoYXQgc2lnbmF0dXJlLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgc2lnbmF0dXJlIGV4cGVjdGVkIGhlcmUgd2FzICclcycgYW5kIHdlIGFyZSBvbiBieXRlICVkIG9mIHRoYXQgc2lnbmF0dXJlLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nICh0eXBlY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHdyaXRlci0+dHlwZV9zdHIpLCB3cml0ZXItPnR5cGVfcG9zKTsKICAgICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImJhZCB0eXBlIGluc2VydGVkIHNvbWV3aGVyZSBpbnNpZGUgYW4gYXJyYXkgb3IgdmFyaWFudCIpOwpAQCAtMTgzMCw3ICsxODI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT50eXBlX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT51LmFycmF5LmVsZW1lbnRfdHlwZV9wb3MgKyAxKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiV3JpdGluZyBhbiBhcnJheSBvZiAnJXMnIGJ1dCB0aGlzIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBleHBlY3RlZCB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBwYXJlbnQgYXJyYXkiLAorICAgICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiV3JpdGluZyBhbiBhcnJheSBvZiAnJXMnIGJ1dCB0aGlzIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBleHBlY3RlZCB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBwYXJlbnQgYXJyYXlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKGNvbnRhaW5lZF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWRfdHlwZV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkX3R5cGVfbGVuKSk7CkBAIC0xOTM1LDcgKzE5MzQsNyBAQAogICAgICAgICAgIF9kYnVzX2Fzc2VydCAoX0RCVVNfQUxJR05fVkFMVUUgKHN1Yi0+dS5hcnJheS5sZW5fcG9zLCA0KSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBzdWItPnUuYXJyYXkubGVuX3Bvcyk7CiAgICAgICAgICAgbGVuID0gX2RidXNfdW5wYWNrX3VpbnQzMiAoc3ViLT5ieXRlX29yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfdWRhdGFfbGVuIChzdWItPnZhbHVlX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuIChzdWItPnZhbHVlX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWItPnUuYXJyYXkubGVuX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KSk7CiAKQEAgLTI1ODAsNyArMjU3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBmaXh1cC5sZW5fcG9zX2luX3JlYWRlcik7CiAKICAgICAgICAgICAgICAgb2xkX2xlbiA9IF9kYnVzX3VucGFja191aW50MzIgKHJlYWRlci0+Ynl0ZV9vcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfdWRhdGFfbGVuIChyZWFkZXItPnZhbHVlX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHJlYWRlci0+dmFsdWVfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dXAubGVuX3Bvc19pbl9yZWFkZXIsIDQpKTsKIAogICAgICAgICAgICAgICBpZiAob2xkX2xlbiAhPSBmaXh1cC5uZXdfbGVuICYmICFhcHBlbmRfZml4dXAgKGZpeHVwcywgJmZpeHVwKSkKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYXJzaGFsLXZhbGlkYXRlLXV0aWwuYyBiL2RidXMvZGJ1cy1tYXJzaGFsLXZhbGlkYXRlLXV0aWwuYwppbmRleCA5ZTc1YTdlLi5lMTFlMWFjIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWFyc2hhbC12YWxpZGF0ZS11dGlsLmMKKysrIGIvZGJ1cy9kYnVzLW1hcnNoYWwtdmFsaWRhdGUtdXRpbC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgIGlmICh2ICE9IHRlc3RzW2ldLmV4cGVjdGVkKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkltcHJvcGVyIHZhbGlkYXRpb24gcmVzdWx0ICVkIGZvciAnJXMnIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgiSW1wcm9wZXIgdmFsaWRhdGlvbiByZXN1bHQgJWQgZm9yICclcydcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgdiwgdGVzdHNbaV0uZGF0YSk7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidGVzdCBmYWlsZWQiKTsKICAgICAgICAgfQpAQCAtNjYsOSArNjYsNyBAQAogCiBzdGF0aWMgY29uc3QgVmFsaWRpdHlUZXN0IHNpZ25hdHVyZV90ZXN0c1tdID0gewogICB7ICIiLCBEQlVTX1ZBTElEIH0sCi0gIHsgInNzcyIsIERCVVNfVkFMSUQgfSwKICAgeyAiaSIsIERCVVNfVkFMSUQgfSwKLSAgeyAiYiIsIERCVVNfVkFMSUQgfSwKICAgeyAiYWkiLCBEQlVTX1ZBTElEIH0sCiAgIHsgIihpKSIsIERCVVNfVkFMSUQgfSwKICAgeyAidyIsIERCVVNfSU5WQUxJRF9VTktOT1dOX1RZUEVDT0RFIH0sCkBAIC05NywxNSArOTUsOSBAQAogICB7ICJhe2lhfSIsIERCVVNfSU5WQUxJRF9NSVNTSU5HX0FSUkFZX0VMRU1FTlRfVFlQRSB9LAogICB7ICJhe30iLCBEQlVTX0lOVkFMSURfRElDVF9FTlRSWV9IQVNfTk9fRklFTERTIH0sCiAgIHsgImF7YWlpfSIsIERCVVNfSU5WQUxJRF9ESUNUX0tFWV9NVVNUX0JFX0JBU0lDX1RZUEUgfSwKLSAgeyAiICIsIERCVVNfSU5WQUxJRF9VTktOT1dOX1RZUEVDT0RFIH0sCi0gIHsgIm5vdCBhIHZhbGlkIHNpZ25hdHVyZSIsIERCVVNfSU5WQUxJRF9VTktOT1dOX1RZUEVDT0RFIH0sCi0gIHsgIjEyMyIsIERCVVNfSU5WQUxJRF9VTktOT1dOX1RZUEVDT0RFIH0sCi0gIHsgIi4iLCBEQlVTX0lOVkFMSURfVU5LTk9XTl9UWVBFQ09ERSB9LAotICAvKiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgwMyAqLwotICB7ICJheyhpaSlpfSIsIERCVVNfSU5WQUxJRF9ESUNUX0tFWV9NVVNUX0JFX0JBU0lDX1RZUEUgfSwKLSAgeyAiYXtpfSIsIERCVVNfSU5WQUxJRF9ESUNUX0VOVFJZX0hBU19PTkxZX09ORV9GSUVMRCB9LAotICB7ICJ7aXN9IiwgREJVU19JTlZBTElEX0RJQ1RfRU5UUllfTk9UX0lOU0lERV9BUlJBWSB9LAotICB7ICJhe2lzaX0iLCBEQlVTX0lOVkFMSURfRElDVF9FTlRSWV9IQVNfVE9PX01BTllfRklFTERTIH0sCisgIC8qIHsgImF7aX0iLCBEQlVTX0lOVkFMSURfRElDVF9FTlRSWV9IQVNfT05MWV9PTkVfRklFTEQgfSwgKi8KKyAgLyogeyAie2lzfSIsIERCVVNfSU5WQUxJRF9ESUNUX0VOVFJZX05PVF9JTlNJREVfQVJSQVkgfSwgKi8KKyAgLyogeyAiYXtpc2l9IiwgREJVU19JTlZBTElEX0RJQ1RfRU5UUllfSEFTX1RPT19NQU5ZX0ZJRUxEUyB9LCAqLwogfTsKIAogZGJ1c19ib29sX3QKQEAgLTIyMSw2ICsyMTMsMjIgQEAKICAgICAiZm9vIGJhciIKICAgfTsKIAorICBjb25zdCBjaGFyICp2YWxpZF9zaWduYXR1cmVzW10gPSB7CisgICAgIiIsCisgICAgInNzcyIsCisgICAgImkiLAorICAgICJiIgorICB9OworCisgIGNvbnN0IGNoYXIgKmludmFsaWRfc2lnbmF0dXJlc1tdID0geworICAgICIgIiwKKyAgICAibm90IGEgdmFsaWQgc2lnbmF0dXJlIiwKKyAgICAiMTIzIiwKKyAgICAiLiIsCisgICAgIigiLAorICAgICJheyhpaSlpfSIgLyogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MDMgKi8KKyAgfTsKKwogICAvKiBTaWduYXR1cmUgd2l0aCByZWFzb24gKi8KIAogICBydW5fdmFsaWRpdHlfdGVzdHMgKHNpZ25hdHVyZV90ZXN0cywgX0RCVVNfTl9FTEVNRU5UUyAoc2lnbmF0dXJlX3Rlc3RzKSwKQEAgLTIzNSw3ICsyNDMsNyBAQAogICAgICAgaWYgKCFfZGJ1c192YWxpZGF0ZV9wYXRoICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIlBhdGggXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWQiLCB2YWxpZF9wYXRoc1tpXSk7CisgICAgICAgICAgX2RidXNfd2FybiAoIlBhdGggXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWRcbiIsIHZhbGlkX3BhdGhzW2ldKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIHBhdGgiKTsKICAgICAgICAgfQogCkBAIC0yNTAsNyArMjU4LDcgQEAKICAgICAgIGlmIChfZGJ1c192YWxpZGF0ZV9wYXRoICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSkpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiUGF0aCBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiBpbnZhbGlkIiwgaW52YWxpZF9wYXRoc1tpXSk7CisgICAgICAgICAgX2RidXNfd2FybiAoIlBhdGggXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gaW52YWxpZFxuIiwgaW52YWxpZF9wYXRoc1tpXSk7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgidmFsaWQgcGF0aCIpOwogICAgICAgICB9CiAKQEAgLTI2Niw3ICsyNzQsNyBAQAogICAgICAgaWYgKCFfZGJ1c192YWxpZGF0ZV9pbnRlcmZhY2UgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzdHIpKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJJbnRlcmZhY2UgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWQiLCB2YWxpZF9pbnRlcmZhY2VzW2ldKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiSW50ZXJmYWNlIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIHZhbGlkXG4iLCB2YWxpZF9pbnRlcmZhY2VzW2ldKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIGludGVyZmFjZSIpOwogICAgICAgICB9CiAKQEAgLTI4MSw3ICsyODksNyBAQAogICAgICAgaWYgKF9kYnVzX3ZhbGlkYXRlX2ludGVyZmFjZSAoJnN0ciwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSkpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiSW50ZXJmYWNlIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIGludmFsaWQiLCBpbnZhbGlkX2ludGVyZmFjZXNbaV0pOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJJbnRlcmZhY2UgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gaW52YWxpZFxuIiwgaW52YWxpZF9pbnRlcmZhY2VzW2ldKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ2YWxpZCBpbnRlcmZhY2UiKTsKICAgICAgICAgfQogCkBAIC0yOTksNyArMzA3LDcgQEAKICAgICAgIGlmICghX2RidXNfdmFsaWRhdGVfYnVzX25hbWUgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSkpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiQnVzIG5hbWUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWQiLCB2YWxpZF9pbnRlcmZhY2VzW2ldKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiQnVzIG5hbWUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWRcbiIsIHZhbGlkX2ludGVyZmFjZXNbaV0pOwogICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQgYnVzIG5hbWUiKTsKICAgICAgICAgfQogCkBAIC0zMTYsNyArMzI0LDcgQEAKICAgICAgICAgICBpZiAoX2RidXNfdmFsaWRhdGVfYnVzX25hbWUgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiQnVzIG5hbWUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gaW52YWxpZCIsIGludmFsaWRfaW50ZXJmYWNlc1tpXSk7CisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJCdXMgbmFtZSBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiBpbnZhbGlkXG4iLCBpbnZhbGlkX2ludGVyZmFjZXNbaV0pOwogICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ2YWxpZCBidXMgbmFtZSIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMzMsNyArMzQxLDcgQEAKICAgICAgIGlmICghX2RidXNfdmFsaWRhdGVfYnVzX25hbWUgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkJ1cyBuYW1lIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIHZhbGlkIiwgdmFsaWRfdW5pcXVlX25hbWVzW2ldKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiQnVzIG5hbWUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWRcbiIsIHZhbGlkX3VuaXF1ZV9uYW1lc1tpXSk7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCB1bmlxdWUgbmFtZSIpOwogICAgICAgICB9CiAKQEAgLTM0OCw3ICszNTYsNyBAQAogICAgICAgaWYgKF9kYnVzX3ZhbGlkYXRlX2J1c19uYW1lICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkJ1cyBuYW1lIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIGludmFsaWQiLCBpbnZhbGlkX3VuaXF1ZV9uYW1lc1tpXSk7CisgICAgICAgICAgX2RidXNfd2FybiAoIkJ1cyBuYW1lIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIGludmFsaWRcbiIsIGludmFsaWRfdW5pcXVlX25hbWVzW2ldKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ2YWxpZCB1bmlxdWUgbmFtZSIpOwogICAgICAgICB9CiAKQEAgLTM2Niw3ICszNzQsNyBAQAogICAgICAgaWYgKCFfZGJ1c192YWxpZGF0ZV9lcnJvcl9uYW1lICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkVycm9yIG5hbWUgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWQiLCB2YWxpZF9pbnRlcmZhY2VzW2ldKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiRXJyb3IgbmFtZSBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiB2YWxpZFxuIiwgdmFsaWRfaW50ZXJmYWNlc1tpXSk7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBlcnJvciBuYW1lIik7CiAgICAgICAgIH0KIApAQCAtMzgzLDcgKzM5MSw3IEBACiAgICAgICAgICAgaWYgKF9kYnVzX3ZhbGlkYXRlX2Vycm9yX25hbWUgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJFcnJvciBuYW1lIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIGludmFsaWQiLCBpbnZhbGlkX2ludGVyZmFjZXNbaV0pOworICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRXJyb3IgbmFtZSBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiBpbnZhbGlkXG4iLCBpbnZhbGlkX2ludGVyZmFjZXNbaV0pOwogICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ2YWxpZCBlcnJvciBuYW1lIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQwMCw3ICs0MDgsNyBAQAogICAgICAgaWYgKCFfZGJ1c192YWxpZGF0ZV9tZW1iZXIgKCZzdHIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzdHIpKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZW1iZXIgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gdmFsaWQiLCB2YWxpZF9tZW1iZXJzW2ldKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiTWVtYmVyIFwiJXNcIiBzaG91bGQgaGF2ZSBiZWVuIHZhbGlkXG4iLCB2YWxpZF9tZW1iZXJzW2ldKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIG1lbWJlciIpOwogICAgICAgICB9CiAKQEAgLTQxNSwxMyArNDIzLDQ0IEBACiAgICAgICBpZiAoX2RidXNfdmFsaWRhdGVfbWVtYmVyICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzdHIpKSkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJNZW1iZXIgXCIlc1wiIHNob3VsZCBoYXZlIGJlZW4gaW52YWxpZCIsIGludmFsaWRfbWVtYmVyc1tpXSk7CisgICAgICAgICAgX2RidXNfd2FybiAoIk1lbWJlciBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiBpbnZhbGlkXG4iLCBpbnZhbGlkX21lbWJlcnNbaV0pOwogICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoInZhbGlkIG1lbWJlciIpOwogICAgICAgICB9CiAKICAgICAgICsraTsKICAgICB9CiAKKyAgLyogU2lnbmF0dXJlIHZhbGlkYXRpb24gKi8KKyAgaSA9IDA7CisgIHdoaWxlIChpIDwgKGludCkgX0RCVVNfTl9FTEVNRU5UUyAodmFsaWRfc2lnbmF0dXJlcykpCisgICAgeworICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZzdHIsIHZhbGlkX3NpZ25hdHVyZXNbaV0pOworCisgICAgICBpZiAoIV9kYnVzX3ZhbGlkYXRlX3NpZ25hdHVyZSAoJnN0ciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQorICAgICAgICB7CisgICAgICAgICAgX2RidXNfd2FybiAoIlNpZ25hdHVyZSBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiB2YWxpZFxuIiwgdmFsaWRfc2lnbmF0dXJlc1tpXSk7CisgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBzaWduYXR1cmUiKTsKKyAgICAgICAgfQorCisgICAgICArK2k7CisgICAgfQorCisgIGkgPSAwOworICB3aGlsZSAoaSA8IChpbnQpIF9EQlVTX05fRUxFTUVOVFMgKGludmFsaWRfc2lnbmF0dXJlcykpCisgICAgeworICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZzdHIsIGludmFsaWRfc2lnbmF0dXJlc1tpXSk7CisKKyAgICAgIGlmIChfZGJ1c192YWxpZGF0ZV9zaWduYXR1cmUgKCZzdHIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQorICAgICAgICB7CisgICAgICAgICAgX2RidXNfd2FybiAoIlNpZ25hdHVyZSBcIiVzXCIgc2hvdWxkIGhhdmUgYmVlbiBpbnZhbGlkXG4iLCBpbnZhbGlkX3NpZ25hdHVyZXNbaV0pOworICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoInZhbGlkIHNpZ25hdHVyZSIpOworICAgICAgICB9CisKKyAgICAgICsraTsKKyAgICB9CisKICAgLyogVmFsaWRhdGUgY2xhaW1lZCBsZW5ndGggbG9uZ2VyIHRoYW4gcmVhbCBsZW5ndGggKi8KICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZzdHIsICJhYmMuZWZnIik7CiAgIGlmIChfZGJ1c192YWxpZGF0ZV9idXNfbmFtZSAoJnN0ciwgMCwgOCkpCkBAIC00MzUsNiArNDc0LDEwIEBACiAgIGlmIChfZGJ1c192YWxpZGF0ZV9tZW1iZXIgKCZzdHIsIDAsIDQpKQogICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoInZhbGlkYXRlZCB0b28tbG9uZyBzdHJpbmciKTsKIAorICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJnN0ciwgInNzcyIpOworICBpZiAoX2RidXNfdmFsaWRhdGVfc2lnbmF0dXJlICgmc3RyLCAwLCA0KSkKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJ2YWxpZGF0ZWQgdG9vLWxvbmcgc2lnbmF0dXJlIik7CisKICAgLyogVmFsaWRhdGUgc3RyaW5nIGV4Y2VlZGluZyBtYXggbmFtZSBsZW5ndGggKi8KICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnN0cikpCiAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgibm8gbWVtb3J5Iik7CkBAIC00OTQsNyArNTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJmJvZHkpKTsKICAgICAgICAgaWYgKHZhbGlkaXR5ICE9IERCVVNfVkFMSUQpCiAgICAgICAgICAgewotICAgICAgICAgICAgX2RidXNfd2FybiAoImludmFsaWQgY29kZSAlZCBleHBlY3RlZCB2YWxpZCBvbiBzZXF1ZW5jZSAlZCBsaXR0bGUgZW5kaWFuIiwKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJpbnZhbGlkIGNvZGUgJWQgZXhwZWN0ZWQgdmFsaWQgb24gc2VxdWVuY2UgJWQgbGl0dGxlIGVuZGlhblxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5LCBzZXF1ZW5jZSk7CiAgICAgICAgICAgICBfZGJ1c192ZXJib3NlX2J5dGVzX29mX3N0cmluZyAoJnNpZ25hdHVyZSwgMCwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzaWduYXR1cmUpKTsKICAgICAgICAgICAgIF9kYnVzX3ZlcmJvc2VfYnl0ZXNfb2Zfc3RyaW5nICgmYm9keSwgMCwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZib2R5KSk7CkBAIC01MTksNyArNTYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJmJvZHkpKTsKICAgICAgICAgaWYgKHZhbGlkaXR5ICE9IERCVVNfVkFMSUQpCiAgICAgICAgICAgewotICAgICAgICAgICAgX2RidXNfd2FybiAoImludmFsaWQgY29kZSAlZCBleHBlY3RlZCB2YWxpZCBvbiBzZXF1ZW5jZSAlZCBiaWcgZW5kaWFuIiwKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJpbnZhbGlkIGNvZGUgJWQgZXhwZWN0ZWQgdmFsaWQgb24gc2VxdWVuY2UgJWQgYmlnIGVuZGlhblxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5LCBzZXF1ZW5jZSk7CiAgICAgICAgICAgICBfZGJ1c192ZXJib3NlX2J5dGVzX29mX3N0cmluZyAoJnNpZ25hdHVyZSwgMCwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzaWduYXR1cmUpKTsKICAgICAgICAgICAgIF9kYnVzX3ZlcmJvc2VfYnl0ZXNfb2Zfc3RyaW5nICgmYm9keSwgMCwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZib2R5KSk7CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtbWFyc2hhbC12YWxpZGF0ZS5jIGIvZGJ1cy9kYnVzLW1hcnNoYWwtdmFsaWRhdGUuYwppbmRleCA0ZDQ5MmYzLi45MTg3YTNlIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWFyc2hhbC12YWxpZGF0ZS5jCisrKyBiL2RidXMvZGJ1cy1tYXJzaGFsLXZhbGlkYXRlLmMKQEAgLTgzLDkgKzgzLDkgQEAKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICBwID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YV9sZW4gKHR5cGVfc3RyLCB0eXBlX3BvcywgMCk7CisgIHAgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuICh0eXBlX3N0ciwgdHlwZV9wb3MsIDApOwogCi0gIGVuZCA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfdWRhdGFfbGVuICh0eXBlX3N0ciwgdHlwZV9wb3MgKyBsZW4sIDApOworICBlbmQgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuICh0eXBlX3N0ciwgdHlwZV9wb3MgKyBsZW4sIDApOwogICBzdHJ1Y3RfZGVwdGggPSAwOwogICBhcnJheV9kZXB0aCA9IDA7CiAgIGRpY3RfZW50cnlfZGVwdGggPSAwOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBpZiAoKnAgPT0gREJVU19UWVBFX0FSUkFZICYmIHAgIT0gZW5kKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDE7CisJICAgICAgIGNvbnN0IGNoYXIgKnAxOwogCSAgICAgICBwMSA9IHAgKyAxOwogICAgICAgICAgICAgICAgaWYgKCpwMSA9PSBEQlVTX1NUUlVDVF9FTkRfQ0hBUiB8fAogICAgICAgICAgICAgICAgICAgICpwMSA9PSBEQlVTX0RJQ1RfRU5UUllfRU5EX0NIQVIpCkBAIC0zNTgsMTMgKzM1OCw4IEBACiAgICAgICAgICAgCiAgICAgICAgICAgaWYgKGN1cnJlbnRfdHlwZSA9PSBEQlVTX1RZUEVfQk9PTEVBTikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZGJ1c191aW50MzJfdCB2OwotCi0gICAgICAgICAgICAgIGlmIChwICsgNCA+IGVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gREJVU19JTlZBTElEX05PVF9FTk9VR0hfREFUQTsKLQotICAgICAgICAgICAgICB2ID0gX2RidXNfdW5wYWNrX3VpbnQzMiAoYnl0ZV9vcmRlciwgcCk7Ci0KKyAgICAgICAgICAgICAgZGJ1c191aW50MzJfdCB2ID0gX2RidXNfdW5wYWNrX3VpbnQzMiAoYnl0ZV9vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCk7CiAgICAgICAgICAgICAgIGlmICghKHYgPT0gMCB8fCB2ID09IDEpKQogICAgICAgICAgICAgICAgIHJldHVybiBEQlVTX0lOVkFMSURfQk9PTEVBTl9OT1RfWkVST19PUl9PTkU7CiAgICAgICAgICAgICB9CkBAIC00MjUsNyArNDIwLDcgQEAKICAgICAgICAgICAgIGlmIChjdXJyZW50X3R5cGUgPT0gREJVU19UWVBFX09CSkVDVF9QQVRIKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyBzdHI7Ci0gICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmc3RyLCAoY29uc3QgY2hhciAqKSBwLCBjbGFpbWVkX2xlbik7CisgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmc3RyLCBwLCBjbGFpbWVkX2xlbik7CiAgICAgICAgICAgICAgICAgaWYgKCFfZGJ1c192YWxpZGF0ZV9wYXRoICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzdHIpKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiBEQlVTX0lOVkFMSURfQkFEX1BBVEg7CkBAIC00MzUsNyArNDMwLDcgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRfdHlwZSA9PSBEQlVTX1RZUEVfU1RSSU5HKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyBzdHI7Ci0gICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmc3RyLCAoY29uc3QgY2hhciAqKSBwLCBjbGFpbWVkX2xlbik7CisgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmc3RyLCBwLCBjbGFpbWVkX2xlbik7CiAgICAgICAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfdmFsaWRhdGVfdXRmOCAoJnN0ciwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIERCVVNfSU5WQUxJRF9CQURfVVRGOF9JTl9TVFJJTkc7CkBAIC01MzQsNyArNTI5LDcgQEAKICAgICAgICAgICAgIGlmIChjbGFpbWVkX2xlbiArIDEgPiAodW5zaWduZWQgbG9uZykgKGVuZCAtIHApKQogICAgICAgICAgICAgICByZXR1cm4gREJVU19JTlZBTElEX1NJR05BVFVSRV9MRU5HVEhfT1VUX09GX0JPVU5EUzsKIAotICAgICAgICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3RfbGVuICgmc3RyLCAoY29uc3QgY2hhciAqKSBwLCBjbGFpbWVkX2xlbik7CisgICAgICAgICAgICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdF9sZW4gKCZzdHIsIHAsIGNsYWltZWRfbGVuKTsKICAgICAgICAgICAgIHZhbGlkaXR5ID0KICAgICAgICAgICAgICAgX2RidXNfdmFsaWRhdGVfc2lnbmF0dXJlX3dpdGhfcmVhc29uICgmc3RyLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSk7CkBAIC01NzgsNyArNTczLDcgQEAKICAgICAgICAgICAgIGlmIChjbGFpbWVkX2xlbiArIDEgPiAodW5zaWduZWQgbG9uZykgKGVuZCAtIHApKQogICAgICAgICAgICAgICByZXR1cm4gREJVU19JTlZBTElEX1ZBUklBTlRfU0lHTkFUVVJFX0xFTkdUSF9PVVRfT0ZfQk9VTkRTOwogCi0gICAgICAgICAgICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdF9sZW4gKCZzaWcsIChjb25zdCBjaGFyICopIHAsIGNsYWltZWRfbGVuKTsKKyAgICAgICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0X2xlbiAoJnNpZywgcCwgY2xhaW1lZF9sZW4pOwogICAgICAgICAgICAgcmVhc29uID0gX2RidXNfdmFsaWRhdGVfc2lnbmF0dXJlX3dpdGhfcmVhc29uICgmc2lnLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc2lnKSk7CiAgICAgICAgICAgICBpZiAoIShyZWFzb24gPT0gREJVU19WQUxJRCkpCkBAIC03MzAsNyArNzI1LDcgQEAKICAgX2RidXNfdHlwZV9yZWFkZXJfaW5pdF90eXBlc19vbmx5ICgmcmVhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpZ25hdHVyZSwgZXhwZWN0ZWRfc2lnbmF0dXJlX3N0YXJ0KTsKIAotICBwID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YV9sZW4gKHZhbHVlX3N0ciwgdmFsdWVfcG9zLCBsZW4pOworICBwID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhX2xlbiAodmFsdWVfc3RyLCB2YWx1ZV9wb3MsIGxlbik7CiAgIGVuZCA9IHAgKyBsZW47CiAKICAgdmFsaWRpdHkgPSB2YWxpZGF0ZV9ib2R5X2hlbHBlciAoJnJlYWRlciwgYnl0ZV9vcmRlciwgVFJVRSwgMCwgcCwgZW5kLCAmcCk7CkBAIC04MDUsNyArODAwLDcgQEAKICAgaWYgKGxlbiA9PSAwKQogICAgIHJldHVybiBGQUxTRTsKIAotICBzID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF91ZGF0YSAoc3RyKSArIHN0YXJ0OworICBzID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhIChzdHIpICsgc3RhcnQ7CiAgIGVuZCA9IHMgKyBsZW47CiAKICAgaWYgKCpzICE9ICcvJykKQEAgLTkwMyw5ICs4OTgsNyBAQAogICAgIGNhc2UgREJVU19JTlZBTElEX0RJQ1RfRU5UUllfSEFTX1RPT19NQU5ZX0ZJRUxEUzogICAgICAgICAgICAgIHJldHVybiAiRGljdCBlbnRyeSBoYXMgdG9vIG1hbnkgZmllbGRzIjsKICAgICBjYXNlIERCVVNfSU5WQUxJRF9ESUNUX0VOVFJZX05PVF9JTlNJREVfQVJSQVk6ICAgICAgICAgICAgICAgICByZXR1cm4gIkRpY3QgZW50cnkgbm90IGluc2lkZSBhcnJheSI7CiAgICAgY2FzZSBEQlVTX0lOVkFMSURfRElDVF9LRVlfTVVTVF9CRV9CQVNJQ19UWVBFOiAgICAgICAgICAgICAgICAgcmV0dXJuICJEaWN0IGtleSBtdXN0IGJlIGJhc2ljIHR5cGUiOwotICAgIGNhc2UgREJVU19JTlZBTElEX01JU1NJTkdfVU5JWF9GRFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiVW5peCBmaWxlIGRlc2NyaXB0b3IgbWlzc2luZyI7CiAgICAgY2FzZSBEQlVTX0lOVkFMSURfTkVTVEVEX1RPT19ERUVQTFk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJWYXJpYW50cyBjYW5ub3QgYmUgdXNlZCB0byBjcmVhdGUgYSBodWdlbHkgcmVjdXJzaXZlIHRyZWUgb2YgdmFsdWVzIjsKLSAgICBjYXNlIERCVVNfVkFMSURJVFlfTEFTVDoKICAgICBkZWZhdWx0OgogICAgICAgcmV0dXJuICJJbnZhbGlkIjsKICAgICB9CkBAIC05NDgsNyArOTQxLDcgQEAKICAgICByZXR1cm4gRkFMU0U7CiAKICAgbGFzdF9kb3QgPSBOVUxMOwotICBpZmFjZSA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfdWRhdGEgKHN0cikgKyBzdGFydDsKKyAgaWZhY2UgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHN0cikgKyBzdGFydDsKICAgZW5kID0gaWZhY2UgKyBsZW47CiAgIHMgPSBpZmFjZTsKIApAQCAtMTAyMiw3ICsxMDE1LDcgQEAKICAgaWYgKGxlbiA9PSAwKQogICAgIHJldHVybiBGQUxTRTsKIAotICBtZW1iZXIgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhIChzdHIpICsgc3RhcnQ7CisgIG1lbWJlciA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoc3RyKSArIHN0YXJ0OwogICBlbmQgPSBtZW1iZXIgKyBsZW47CiAgIHMgPSBtZW1iZXI7CiAKQEAgLTExMTQsNyArMTEwNyw3IEBACiAgICAgcmV0dXJuIEZBTFNFOwogCiAgIGxhc3RfZG90ID0gTlVMTDsKLSAgaWZhY2UgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhIChzdHIpICsgc3RhcnQ7CisgIGlmYWNlID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhIChzdHIpICsgc3RhcnQ7CiAgIGVuZCA9IGlmYWNlICsgbGVuOwogICBzID0gaWZhY2U7CiAKQEAgLTEyMTksNiArMTIxMiwzMyBAQAogICByZXR1cm4gX2RidXNfdmFsaWRhdGVfYnVzX25hbWVfZnVsbCAoc3RyLCBzdGFydCwgbGVuLCBUUlVFKTsKIH0KIAorLyoqCisgKiBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgdGhlIHN0cmluZyBpcyBhIHZhbGlkIG1lc3NhZ2UgdHlwZQorICogc2lnbmF0dXJlIGluIHRoZSBELUJ1cyBwcm90b2NvbC4KKyAqCisgKiBAdG9kbyB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIG1vc3Qgb2YgREJ1c1N0cmluZyBpbiB0aGF0CisgKiBpdCBhbGxvd3MgYSBzdGFydCxsZW4gcmFuZ2UgdGhhdCBleHRlbmRzIHBhc3QgdGhlIHN0cmluZyBlbmQuCisgKgorICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nCisgKiBAcGFyYW0gc3RhcnQgZmlyc3QgYnl0ZSBpbmRleCB0byBjaGVjaworICogQHBhcmFtIGxlbiBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sKKyAqIEByZXR1cm5zICNUUlVFIGlmIHRoZSBieXRlIHJhbmdlIGV4aXN0cyBhbmQgaXMgYSB2YWxpZCBzaWduYXR1cmUKKyAqLworZGJ1c19ib29sX3QKK19kYnVzX3ZhbGlkYXRlX3NpZ25hdHVyZSAoY29uc3QgREJ1c1N0cmluZyAgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgbGVuKQoreworICBfZGJ1c19hc3NlcnQgKHN0YXJ0ID49IDApOworICBfZGJ1c19hc3NlcnQgKHN0YXJ0IDw9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpKTsKKyAgX2RidXNfYXNzZXJ0IChsZW4gPj0gMCk7CisKKyAgaWYgKGxlbiA+IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpIC0gc3RhcnQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBfZGJ1c192YWxpZGF0ZV9zaWduYXR1cmVfd2l0aF9yZWFzb24gKHN0ciwgc3RhcnQsIGxlbikgPT0gREJVU19WQUxJRDsKK30KKwogLyoqIGRlZmluZSBfZGJ1c19jaGVja19pc192YWxpZF9wYXRoKCkgKi8KIERFRklORV9EQlVTX05BTUVfQ0hFQ0socGF0aCkKIC8qKiBkZWZpbmUgX2RidXNfY2hlY2tfaXNfdmFsaWRfaW50ZXJmYWNlKCkgKi8KQEAgLTEyMjksNiArMTI0OSw4IEBACiBERUZJTkVfREJVU19OQU1FX0NIRUNLKGVycm9yX25hbWUpCiAvKiogZGVmaW5lIF9kYnVzX2NoZWNrX2lzX3ZhbGlkX2J1c19uYW1lKCkgKi8KIERFRklORV9EQlVTX05BTUVfQ0hFQ0soYnVzX25hbWUpCisvKiogZGVmaW5lIF9kYnVzX2NoZWNrX2lzX3ZhbGlkX3NpZ25hdHVyZSgpICovCitERUZJTkVfREJVU19OQU1FX0NIRUNLKHNpZ25hdHVyZSkKIC8qKiBkZWZpbmUgX2RidXNfY2hlY2tfaXNfdmFsaWRfdXRmOCgpICovCiBERUZJTkVfREJVU19OQU1FX0NIRUNLKHV0ZjgpCiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tYXJzaGFsLXZhbGlkYXRlLmggYi9kYnVzL2RidXMtbWFyc2hhbC12YWxpZGF0ZS5oCmluZGV4IGRmOGU1NjcuLjhhYjAyNGYgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tYXJzaGFsLXZhbGlkYXRlLmgKKysrIGIvZGJ1cy9kYnVzLW1hcnNoYWwtdmFsaWRhdGUuaApAQCAtMTU1LDYgKzE1NSwxMCBAQAogZGJ1c19ib29sX3QgX2RidXNfdmFsaWRhdGVfYnVzX25hbWVzcGFjZSAoY29uc3QgREJ1c1N0cmluZyAgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICBsZW4pOworREJVU19QUklWQVRFX0VYUE9SVAorZGJ1c19ib29sX3QgX2RidXNfdmFsaWRhdGVfc2lnbmF0dXJlICAoY29uc3QgREJ1c1N0cmluZyAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBsZW4pOwogLyoganVzdCB0byBoYXZlIGEgbmFtZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlOiAqLwogI2RlZmluZSBfZGJ1c192YWxpZGF0ZV91dGY4KHMsYixlKSBfZGJ1c19zdHJpbmdfdmFsaWRhdGVfdXRmOCAocywgYiwgZSkKIApAQCAtMjAxLDYgKzIwNSw4IEBACiBERUNMQVJFX0RCVVNfTkFNRV9DSEVDSyhlcnJvcl9uYW1lKTsKIC8qKiBkZWZpbmVzIF9kYnVzX2NoZWNrX2lzX3ZhbGlkX2J1c19uYW1lKCkgKi8KIERFQ0xBUkVfREJVU19OQU1FX0NIRUNLKGJ1c19uYW1lKTsKKy8qKiBkZWZpbmVzIF9kYnVzX2NoZWNrX2lzX3ZhbGlkX3NpZ25hdHVyZSgpICovCitERUNMQVJFX0RCVVNfTkFNRV9DSEVDSyhzaWduYXR1cmUpOwogLyoqIGRlZmluZXMgX2RidXNfY2hlY2tfaXNfdmFsaWRfdXRmOCgpICovCiBERUNMQVJFX0RCVVNfTkFNRV9DSEVDSyh1dGY4KTsKIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1lbW9yeS5jIGIvZGJ1cy9kYnVzLW1lbW9yeS5jCmluZGV4IGE5YzJmN2EuLjY3ZDVjYjAgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tZW1vcnkuYworKysgYi9kYnVzL2RidXMtbWVtb3J5LmMKQEAgLTMzNCwxMCArMzM0LDkgQEAKICAgICAgIHJldHVybiAibWFsbG9jMCI7CiAgICAgY2FzZSBTT1VSQ0VfUkVBTExPQ19OVUxMOgogICAgICAgcmV0dXJuICJyZWFsbG9jKE5VTEwpIjsKLSAgICBkZWZhdWx0OgotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiSW52YWxpZCBtYWxsb2MgYmxvY2sgc291cmNlIElEIik7Ci0gICAgICByZXR1cm4gImludmFsaWQhIjsKICAgICB9CisgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIkludmFsaWQgbWFsbG9jIGJsb2NrIHNvdXJjZSBJRCIpOworICByZXR1cm4gImludmFsaWQhIjsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM2NSw3ICszNjQsNyBAQAogICAgICAgICAgIGRidXNfdWludDMyX3QgdmFsdWUgPSAqKGRidXNfdWludDMyX3QqKSAmYmxvY2tbaV07CiAgICAgICAgICAgaWYgKHZhbHVlICE9IEdVQVJEX1ZBTFVFKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgiQmxvY2sgb2YgJWx1IGJ5dGVzIGZyb20gJXMgaGFkIHN0YXJ0IGd1YXJkIHZhbHVlIDB4JXV4IGF0ICVkIGV4cGVjdGVkIDB4JXgiLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgiQmxvY2sgb2YgJWx1IGJ5dGVzIGZyb20gJXMgaGFkIHN0YXJ0IGd1YXJkIHZhbHVlIDB4JXV4IGF0ICVkIGV4cGVjdGVkIDB4JXhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSByZXF1ZXN0ZWRfYnl0ZXMsIHNvdXJjZV9zdHJpbmcgKHNvdXJjZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpLCBHVUFSRF9WQUxVRSk7CiAgICAgICAgICAgICAgIGZhaWxlZCA9IFRSVUU7CkBAIC0zODAsNyArMzc5LDcgQEAKICAgICAgICAgICBkYnVzX3VpbnQzMl90IHZhbHVlID0gKihkYnVzX3VpbnQzMl90KikgJmJsb2NrW2ldOwogICAgICAgICAgIGlmICh2YWx1ZSAhPSBHVUFSRF9WQUxVRSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkJsb2NrIG9mICVsdSBieXRlcyBmcm9tICVzIGhhZCBlbmQgZ3VhcmQgdmFsdWUgMHgldXggYXQgJWQgZXhwZWN0ZWQgMHgleCIsCisgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJCbG9jayBvZiAlbHUgYnl0ZXMgZnJvbSAlcyBoYWQgZW5kIGd1YXJkIHZhbHVlIDB4JXV4IGF0ICVkIGV4cGVjdGVkIDB4JXhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSByZXF1ZXN0ZWRfYnl0ZXMsIHNvdXJjZV9zdHJpbmcgKHNvdXJjZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpLCBHVUFSRF9WQUxVRSk7CiAgICAgICAgICAgICAgIGZhaWxlZCA9IFRSVUU7CkBAIC00ODcsNyArNDg2LDcgQEAKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAobWFsbG9jX2Nhbm5vdF9mYWlsKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IG1hbGxvYyAoJWxkICsgJWxkKSIsCisgICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IG1hbGxvYyAoJWxkICsgJWxkKVxuIiwKICAgICAgICAgICAgICAgKGxvbmcpIGJ5dGVzLCAobG9uZykgR1VBUkRfRVhUUkFfU0laRSk7CiAgICAgICAgICAgX2RidXNfYWJvcnQgKCk7CiAgICAgICAgIH0KQEAgLTUwNyw3ICs1MDYsNyBAQAogICAgICAgICB9CiAgICAgICBlbHNlIGlmIChtYWxsb2NfY2Fubm90X2ZhaWwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgib3V0IG9mIG1lbW9yeTogbWFsbG9jICglbGQpIiwgKGxvbmcpIGJ5dGVzKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgib3V0IG9mIG1lbW9yeTogbWFsbG9jICglbGQpXG4iLCAobG9uZykgYnl0ZXMpOwogICAgICAgICAgIF9kYnVzX2Fib3J0ICgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTU1OSw3ICs1NTgsNyBAQAogICAgICAgICB9CiAgICAgICBlbHNlIGlmIChtYWxsb2NfY2Fubm90X2ZhaWwpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgib3V0IG9mIG1lbW9yeTogY2FsbG9jICglbGQgKyAlbGQsIDEpIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgib3V0IG9mIG1lbW9yeTogY2FsbG9jICglbGQgKyAlbGQsIDEpXG4iLAogICAgICAgICAgICAgICAobG9uZykgYnl0ZXMsIChsb25nKSBHVUFSRF9FWFRSQV9TSVpFKTsKICAgICAgICAgICBfZGJ1c19hYm9ydCAoKTsKICAgICAgICAgfQpAQCAtNTc5LDcgKzU3OCw3IEBACiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKG1hbGxvY19jYW5ub3RfZmFpbCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJvdXQgb2YgbWVtb3J5OiBjYWxsb2MgKCVsZCkiLCAobG9uZykgYnl0ZXMpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJvdXQgb2YgbWVtb3J5OiBjYWxsb2MgKCVsZClcbiIsIChsb25nKSBieXRlcyk7CiAgICAgICAgICAgX2RidXNfYWJvcnQgKCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNjM3LDcgKzYzNiw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtYWxsb2NfY2Fubm90X2ZhaWwpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IHJlYWxsb2MgKCVwLCAlbGQgKyAlbGQpIiwKKyAgICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJvdXQgb2YgbWVtb3J5OiByZWFsbG9jICglcCwgJWxkICsgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksIChsb25nKSBieXRlcywgKGxvbmcpIEdVQVJEX0VYVFJBX1NJWkUpOwogICAgICAgICAgICAgICAgICAgX2RidXNfYWJvcnQgKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjY0LDcgKzY2Myw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZSBpZiAobWFsbG9jX2Nhbm5vdF9mYWlsKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBfZGJ1c193YXJuICgib3V0IG9mIG1lbW9yeTogbWFsbG9jICglbGQgKyAlbGQpIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IG1hbGxvYyAoJWxkICsgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgIChsb25nKSBieXRlcywgKGxvbmcpIEdVQVJEX0VYVFJBX1NJWkUpOwogICAgICAgICAgICAgICBfZGJ1c19hYm9ydCAoKTsKICAgICAgICAgICAgIH0KQEAgLTY4MSw3ICs2ODAsNyBAQAogI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCiAgICAgICBpZiAobWVtID09IE5VTEwgJiYgbWFsbG9jX2Nhbm5vdF9mYWlsKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IG1hbGxvYyAoJWxkKSIsIChsb25nKSBieXRlcyk7CisgICAgICAgICAgX2RidXNfd2FybiAoIm91dCBvZiBtZW1vcnk6IG1hbGxvYyAoJWxkKVxuIiwgKGxvbmcpIGJ5dGVzKTsKICAgICAgICAgICBfZGJ1c19hYm9ydCAoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtbWVtb3J5LmggYi9kYnVzL2RidXMtbWVtb3J5LmgKaW5kZXggYzU3NWI0Ni4uNGZkNTZiZCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1lbW9yeS5oCisrKyBiL2RidXMvZGJ1cy1tZW1vcnkuaApAQCAtNDgsNiArNDgsNyBAQAogdm9pZCogZGJ1c19tYWxsb2MwICAgICAgIChzaXplX3QgYnl0ZXMpOwogCiBEQlVTX0VYUE9SVAorREJVU19NQUxMT0MKIERCVVNfQUxMT0NfU0laRSgyKQogdm9pZCogZGJ1c19yZWFsbG9jICAgICAgICh2b2lkICAqbWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1lc3NhZ2UtZmFjdG9yeS5jIGIvZGJ1cy9kYnVzLW1lc3NhZ2UtZmFjdG9yeS5jCmluZGV4IDIzZTEzZDguLmI3NDJlNGMgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tZXNzYWdlLWZhY3RvcnkuYworKysgYi9kYnVzL2RidXMtbWVzc2FnZS1mYWN0b3J5LmMKQEAgLTEzOSwxMSArMTM5LDExIEBACiAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIm9vbSIpOwogICAgICAgCiAgICAgICB7Ci0gICAgICAgIERCdXNNZXNzYWdlSXRlciBpdGVyMjsKKyAgICAgICAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CiAgICAgICAgIGNvbnN0IGNoYXIgKnZfU1RSSU5HID0gIlRoaXMgaXMgYW4gZXJyb3IiOwogICAgICAgICAKLSAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKG1lc3NhZ2UsICZpdGVyMik7Ci0gICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmaXRlcjIsCisgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kIChtZXNzYWdlLCAmaXRlcik7CisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdl9TVFJJTkcpKQogICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIm9vbSIpOwpAQCAtMzYyLDI0ICszNjIsMTkgQEAKICAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKG1lc3NhZ2UsICZwYXJlbnRzW2ldKTsKICAgd2hpbGUgKGkgPCBsZXZlbHMpCiAgICAgewotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJnBhcmVudHNbaV0sIERCVVNfVFlQRV9WQVJJQU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PSAobGV2ZWxzIC0gMSkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyX0FTX1NUUklORyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hpbGRyZW5baV0pKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJvb20iKTsKKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmcGFyZW50c1tpXSwgREJVU19UWVBFX1ZBUklBTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PSAobGV2ZWxzIC0gMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMl9BU19TVFJJTkcgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9WQVJJQU5UX0FTX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hpbGRyZW5baV0pOwogICAgICAgKytpOwogICAgICAgcGFyZW50c1tpXSA9IGNoaWxkcmVuW2ktMV07CiAgICAgfQogICAtLWk7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZjaGlsZHJlbltpXSwgREJVU19UWVBFX0lOVDMyLCAmdl9JTlQzMikpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgib29tIik7Ci0KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmY2hpbGRyZW5baV0sIERCVVNfVFlQRV9JTlQzMiwgJnZfSU5UMzIpOwogICB3aGlsZSAoaSA+PSAwKQogICAgIHsKLSAgICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmcGFyZW50c1tpXSwgJmNoaWxkcmVuW2ldKSkKLSAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgib29tIik7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZwYXJlbnRzW2ldLCAmY2hpbGRyZW5baV0pOwogICAgICAgLS1pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1lc3NhZ2UtaW50ZXJuYWwuaCBiL2RidXMvZGJ1cy1tZXNzYWdlLWludGVybmFsLmgKaW5kZXggMzhjNzkyMy4uNGJiNGQ4YiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1lc3NhZ2UtaW50ZXJuYWwuaAorKysgYi9kYnVzL2RidXMtbWVzc2FnZS1pbnRlcm5hbC5oCkBAIC01NSw3ICs1NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqKmZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm5fZmRzKTsKIAotdW5zaWduZWQgaW50IF9kYnVzX21lc3NhZ2VfZ2V0X25fdW5peF9mZHMgICAgICAgKERCdXNNZXNzYWdlICAqbWVzc2FnZSk7CiB2b2lkICAgICAgICBfZGJ1c19tZXNzYWdlX2xvY2sgICAgICAgICAgICAgICAgICAoREJ1c01lc3NhZ2UgICptZXNzYWdlKTsKIHZvaWQgICAgICAgIF9kYnVzX21lc3NhZ2VfdW5sb2NrICAgICAgICAgICAgICAgIChEQnVzTWVzc2FnZSAgKm1lc3NhZ2UpOwogZGJ1c19ib29sX3QgX2RidXNfbWVzc2FnZV9hZGRfY291bnRlciAgICAgICAgICAgKERCdXNNZXNzYWdlICAqbWVzc2FnZSwKQEAgLTc0LDI1ICs3MywxOSBAQAogCiBEQlVTX1BSSVZBVEVfRVhQT1JUCiB2b2lkICAgICAgICAgICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAgICAgICAgICAgIChEQnVzTWVzc2FnZUxvYWRlciAgKmxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNTdHJpbmcgICAgICAgICoqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICptYXhfdG9fcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfYm9vbF90ICAgICAgICAqbWF5X3JlYWRfdW5peF9mZHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyAgICAgICAgKipidWZmZXIpOwogREJVU19QUklWQVRFX0VYUE9SVAogdm9pZCAgICAgICAgICAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3JldHVybl9idWZmZXIgICAgICAgICAoREJ1c01lc3NhZ2VMb2FkZXIgICpsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzU3RyaW5nICAgICAgICAgKmJ1ZmZlcik7CiAKLQotI2lmZGVmIEhBVkVfVU5JWF9GRF9QQVNTSU5HCiBEQlVTX1BSSVZBVEVfRVhQT1JUCiBkYnVzX2Jvb2xfdCAgICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X3VuaXhfZmRzICAgICAgICAgIChEQnVzTWVzc2FnZUxvYWRlciAgKmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICoqZmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgICAgICAgICAgICptYXhfbl9mZHMpOwotCiBEQlVTX1BSSVZBVEVfRVhQT1JUCiB2b2lkICAgICAgICAgICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfcmV0dXJuX3VuaXhfZmRzICAgICAgIChEQnVzTWVzc2FnZUxvYWRlciAgKmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAqZmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgICAgICAgICAgICBuX2Zkcyk7Ci0jZW5kaWYKIAogREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19ib29sX3QgICAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3F1ZXVlX21lc3NhZ2VzICAgICAgICAoREJ1c01lc3NhZ2VMb2FkZXIgICpsb2FkZXIpOwpAQCAtMTIwLDI3ICsxMTMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiBjYWxsYmFjaykgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKIAotdHlwZWRlZiBzdHJ1Y3QgREJ1c1ZhcmlhbnQgREJ1c1ZhcmlhbnQ7Ci1EQlVTX1BSSVZBVEVfRVhQT1JUCi1EQnVzVmFyaWFudCAgICAgICAqX2RidXNfdmFyaWFudF9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQnVzTWVzc2FnZUl0ZXIgKnJlYWRlcik7Ci1EQlVTX1BSSVZBVEVfRVhQT1JUCi1kYnVzX2Jvb2xfdCAgICAgICAgX2RidXNfdmFyaWFudF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQnVzVmFyaWFudCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciAqd3JpdGVyKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLXZvaWQgICAgICAgICAgICAgICBfZGJ1c192YXJpYW50X2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERCdXNWYXJpYW50ICpzZWxmKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLWludCAgICAgICAgICAgICAgICBfZGJ1c192YXJpYW50X2dldF9sZW5ndGggICAgICAgICAgICAgICAgICAgICAgKERCdXNWYXJpYW50ICpzZWxmKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLWNvbnN0IERCdXNTdHJpbmcgICpfZGJ1c192YXJpYW50X3BlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERCdXNWYXJpYW50ICpzZWxmKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLWNvbnN0IGNoYXIgICAgICAgICpfZGJ1c192YXJpYW50X2dldF9zaWduYXR1cmUgICAgICAgICAgICAgICAgICAgKERCdXNWYXJpYW50ICpzZWxmKTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1fZGJ1c19jbGVhcl92YXJpYW50IChEQnVzVmFyaWFudCAqKnZhcmlhbnRfcCkKLXsKLSAgX2RidXNfY2xlYXJfcG9pbnRlcl9pbXBsIChEQnVzVmFyaWFudCwgdmFyaWFudF9wLCBfZGJ1c192YXJpYW50X2ZyZWUpOwotfQotCiB0eXBlZGVmIHN0cnVjdCBEQnVzSW5pdGlhbEZEcyBEQnVzSW5pdGlhbEZEczsKIERCdXNJbml0aWFsRkRzICpfZGJ1c19jaGVja19mZGxlYWtzX2VudGVyICh2b2lkKTsKIHZvaWQgICAgICAgICAgICBfZGJ1c19jaGVja19mZGxlYWtzX2xlYXZlIChEQnVzSW5pdGlhbEZEcyAqZmRzKTsKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tZXNzYWdlLXV0aWwuYyBiL2RidXMvZGJ1cy1tZXNzYWdlLXV0aWwuYwppbmRleCBlYmYwMGUyLi41YWNkNTQxIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWVzc2FnZS11dGlsLmMKKysrIGIvZGJ1cy9kYnVzLW1lc3NhZ2UtdXRpbC5jCkBAIC00NSwyMiArNDUsNiBAQAogICogQHsKICAqLwogCi0vKioKLSAqIEdldHMgdGhlIG51bWJlciBvZiB1bml4IGZkcyBhdHRhY2hlZCB0byB0aGlzIG1lc3NhZ2UuCi0gKgotICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UKLSAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycwotICovCi11bnNpZ25lZCBpbnQKLV9kYnVzX21lc3NhZ2VfZ2V0X25fdW5peF9mZHMgKERCdXNNZXNzYWdlICptZXNzYWdlKQotewotI2lmZGVmIEhBVkVfVU5JWF9GRF9QQVNTSU5HCi0gIHJldHVybiBtZXNzYWdlLT5uX3VuaXhfZmRzOwotI2Vsc2UKLSAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQogI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCiAvKioKICAqIFJlYWRzIGFyZ3VtZW50cyBmcm9tIGEgbWVzc2FnZSBpdGVyYXRvciBnaXZlbiBhIHZhcmlhYmxlIGFyZ3VtZW50CkBAIC0xNDgsNyArMTMyLDcgQEAKIAogICBpZiAoX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCkgIT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiJWQgZGJ1c19tYWxsb2MgYmxvY2tzIHdlcmUgbm90IGZyZWVkIGluICVzIiwKKyAgICAgIF9kYnVzX3dhcm4gKCIlZCBkYnVzX21hbGxvYyBibG9ja3Mgd2VyZSBub3QgZnJlZWQgaW4gJXNcbiIsCiAgICAgICAgICAgICAgICAgICBfZGJ1c19nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZyAoKSwgX19GSUxFX18pOwogICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgibWVtbGVha3MiKTsKICAgICB9CkBAIC0xOTgsMTMgKzE4Miw2IEBACiAgICAgICAgICAgaWYgKGZkID09IGRpcmZkIChkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgaWYgKGZkID49IEZEX1NFVFNJWkUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJGRCAlZCB1bmV4cGVjdGVkbHkgbGFyZ2U7IGNhbm5vdCB0cmFjayB3aGV0aGVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0IGlzIGxlYWtlZFxuIiwgZmQpOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgIEZEX1NFVCAoZmQsICZmZHMtPnNldCk7CiAgICAgICAgIH0KIApAQCAtMjUwLDE3ICsyMjcsMTAgQEAKICAgICAgICAgICBpZiAoZmQgPT0gZGlyZmQgKGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICBpZiAoZmQgPj0gRkRfU0VUU0laRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIkZEICVkIHVuZXhwZWN0ZWRseSBsYXJnZTsgY2Fubm90IHRyYWNrIHdoZXRoZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXQgaXMgbGVha2VkXG4iLCBmZCk7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgaWYgKEZEX0lTU0VUIChmZCwgJmZkcy0+c2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgX2RidXNfd2FybiAoImZpbGUgZGVzY3JpcHRvciAlaSBsZWFrZWQgaW4gJXMuIiwgZmQsIF9fRklMRV9fKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiZmlsZSBkZXNjcmlwdG9yICVpIGxlYWtlZCBpbiAlcy5cbiIsIGZkLCBfX0ZJTEVfXyk7CiAgICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZmRsZWFrcyIpOwogICAgICAgICB9CiAKQEAgLTI4NCw3ICsyNTQsNyBAQAogCiAgIGlmIChfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfaXNfY29ycnVwdGVkIChsb2FkZXIpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJsb2FkZXIgY29ycnVwdGVkIG9uIG1lc3NhZ2UgdGhhdCB3YXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQ7IGludmFsaWQgcmVhc29uICVkIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJsb2FkZXIgY29ycnVwdGVkIG9uIG1lc3NhZ2UgdGhhdCB3YXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQ7IGludmFsaWQgcmVhc29uICVkXG4iLAogICAgICAgICAgICAgICAgICAgbG9hZGVyLT5jb3JydXB0aW9uX3JlYXNvbik7CiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CkBAIC0yOTIsMTMgKzI2MiwxMyBAQAogICBtZXNzYWdlID0gX2RidXNfbWVzc2FnZV9sb2FkZXJfcG9wX21lc3NhZ2UgKGxvYWRlcik7CiAgIGlmIChtZXNzYWdlID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoImRpZG4ndCBsb2FkIG1lc3NhZ2UgdGhhdCB3YXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQgKG1lc3NhZ2Ugbm90IHBvcHBlZCkiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJkaWRuJ3QgbG9hZCBtZXNzYWdlIHRoYXQgd2FzIGV4cGVjdGVkIHRvIGJlIHZhbGlkIChtZXNzYWdlIG5vdCBwb3BwZWQpXG4iKTsKICAgICAgIGdvdG8gZmFpbGVkOwogICAgIH0KIAogICBpZiAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZsb2FkZXItPmRhdGEpID4gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiaGFkIGxlZnRvdmVyIGJ5dGVzIGZyb20gZXhwZWN0ZWQtdG8tYmUtdmFsaWQgc2luZ2xlIG1lc3NhZ2UiKTsKKyAgICAgIF9kYnVzX3dhcm4gKCJoYWQgbGVmdG92ZXIgYnl0ZXMgZnJvbSBleHBlY3RlZC10by1iZS12YWxpZCBzaW5nbGUgbWVzc2FnZVxuIik7CiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTMzMyw3ICszMDMsNyBAQAogCiAgIGlmICghX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2lzX2NvcnJ1cHRlZCAobG9hZGVyKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgibG9hZGVyIG5vdCBjb3JydXB0ZWQgb24gbWVzc2FnZSB0aGF0IHdhcyBleHBlY3RlZCB0byBiZSBpbnZhbGlkIik7CisgICAgICBfZGJ1c193YXJuICgibG9hZGVyIG5vdCBjb3JydXB0ZWQgb24gbWVzc2FnZSB0aGF0IHdhcyBleHBlY3RlZCB0byBiZSBpbnZhbGlkXG4iKTsKICAgICAgIGdvdG8gZmFpbGVkOwogICAgIH0KIApAQCAtMzQyLDcgKzMxMiw3IEBACiAgIGlmIChleHBlY3RlZF92YWxpZGl0eSAhPSBEQlVTX0lOVkFMSURfRk9SX1VOS05PV05fUkVBU09OICYmCiAgICAgICBsb2FkZXItPmNvcnJ1cHRpb25fcmVhc29uICE9IGV4cGVjdGVkX3ZhbGlkaXR5KQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCBtZXNzYWdlIHRvIGJlIGNvcnJ1cHRlZCBmb3IgcmVhc29uICVkIGFuZCB3YXMgY29ycnVwdGVkIGZvciAlZCBpbnN0ZWFkIiwKKyAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCBtZXNzYWdlIHRvIGJlIGNvcnJ1cHRlZCBmb3IgcmVhc29uICVkIGFuZCB3YXMgY29ycnVwdGVkIGZvciAlZCBpbnN0ZWFkXG4iLAogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdmFsaWRpdHksIGxvYWRlci0+Y29ycnVwdGlvbl9yZWFzb24pOwogICAgICAgZ290byBmYWlsZWQ7CiAgICAgfQpAQCAtMzY0LDcgKzMzNCw3IEBACiAKICAgaWYgKF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9pc19jb3JydXB0ZWQgKGxvYWRlcikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoImxvYWRlciBjb3JydXB0ZWQgb24gbWVzc2FnZSB0aGF0IHdhcyBleHBlY3RlZCB0byBiZSB2YWxpZCAoYnV0IGluY29tcGxldGUpLCBjb3JydXB0aW9uIHJlYXNvbiAlZCIsCisgICAgICBfZGJ1c193YXJuICgibG9hZGVyIGNvcnJ1cHRlZCBvbiBtZXNzYWdlIHRoYXQgd2FzIGV4cGVjdGVkIHRvIGJlIHZhbGlkIChidXQgaW5jb21wbGV0ZSksIGNvcnJ1cHRpb24gcmVhc29uICVkXG4iLAogICAgICAgICAgICAgICAgICAgbG9hZGVyLT5jb3JydXB0aW9uX3JlYXNvbik7CiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CkBAIC0zNzIsNyArMzQyLDcgQEAKICAgbWVzc2FnZSA9IF9kYnVzX21lc3NhZ2VfbG9hZGVyX3BvcF9tZXNzYWdlIChsb2FkZXIpOwogICBpZiAobWVzc2FnZSAhPSBOVUxMKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJsb2FkZWQgbWVzc2FnZSB0aGF0IHdhcyBleHBlY3RlZCB0byBiZSBpbmNvbXBsZXRlIik7CisgICAgICBfZGJ1c193YXJuICgibG9hZGVkIG1lc3NhZ2UgdGhhdCB3YXMgZXhwZWN0ZWQgdG8gYmUgaW5jb21wbGV0ZVxuIik7CiAgICAgICBnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTQzMCw3ICs0MDAsNyBAQAogICBfZGJ1c192ZXJib3NlICgiTG9hZGluZyByYXcgJXNcbiIsIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoZmlsZW5hbWUpKTsKICAgaWYgKCFfZGJ1c19maWxlX2dldF9jb250ZW50cyAoZGF0YSwgZmlsZW5hbWUsICZlcnJvcikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBsb2FkIG1lc3NhZ2UgZmlsZSAlczogJXMiLAorICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBsb2FkIG1lc3NhZ2UgZmlsZSAlczogJXNcbiIsCiAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKGZpbGVuYW1lKSwKICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UpOwogICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwpAQCAtNDYyLDcgKzQzMiw3IEBACiAgIHJldHZhbCA9IEZBTFNFOwogCiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZkYXRhKSkKLSAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJjb3VsZCBub3QgYWxsb2NhdGUgc3RyaW5nIik7CisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiY291bGQgbm90IGFsbG9jYXRlIHN0cmluZ1xuIik7CiAKICAgaWYgKCFkYnVzX2ludGVybmFsX2RvX25vdF91c2VfbG9hZF9tZXNzYWdlX2ZpbGUgKGZpbGVuYW1lLCAmZGF0YSkpCiAgICAgZ290byBmYWlsZWQ7CkBAIC00NzcsNyArNDQ3LDcgQEAKICAgICAgICAgX2RidXNfdmVyYm9zZV9ieXRlc19vZl9zdHJpbmcgKCZkYXRhLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZkYXRhKSk7CiAKLSAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgbWVzc2FnZSBsb2FkZXIgdGVzdCBvbiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIG1lc3NhZ2UgbG9hZGVyIHRlc3Qgb24gJXNcbiIsCiAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKGZpbGVuYW1lKSk7CiAgICAgfQogCkBAIC01MDksMjIgKzQ3OSwyMCBAQAogICAvKiBXcml0ZSB0aGUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KIAogICBsb2FkZXIgPSBfZGJ1c19tZXNzYWdlX2xvYWRlcl9uZXcgKCk7Ci0gIGlmIChsb2FkZXIgPT0gTlVMTCkKLSAgICBnb3RvIGZhaWxlZDsKIAogICAvKiBjaGVjayBzb21lIHRyaXZpYWwgbG9hZGVyIGZ1bmN0aW9ucyAqLwogICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9yZWYgKGxvYWRlcik7CiAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3VucmVmIChsb2FkZXIpOworICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfbWF4X21lc3NhZ2Vfc2l6ZSAobG9hZGVyKTsKIAogICBsZW4gPSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoZGF0YSk7CiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7CiAgICAgICBEQnVzU3RyaW5nICpidWZmZXI7CiAKLSAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9idWZmZXIgKGxvYWRlciwgJmJ1ZmZlciwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmRfYnl0ZSAoYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAoZGF0YSwgaSkpKQotICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9idWZmZXIgKGxvYWRlciwgJmJ1ZmZlcik7CisgICAgICBfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9ieXRlIChkYXRhLCBpKSk7CiAgICAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9yZXR1cm5fYnVmZmVyIChsb2FkZXIsIGJ1ZmZlcik7CiAgICAgfQogCkBAIC01MzcsMTYgKzUwNSwxMyBAQAogICAvKiBXcml0ZSB0aGUgZGF0YSBhbGwgYXQgb25jZSAqLwogCiAgIGxvYWRlciA9IF9kYnVzX21lc3NhZ2VfbG9hZGVyX25ldyAoKTsKLSAgaWYgKGxvYWRlciA9PSBOVUxMKQotICAgIGdvdG8gZmFpbGVkOwogCiAgIHsKICAgICBEQnVzU3RyaW5nICpidWZmZXI7CiAKLSAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfYnVmZmVyIChsb2FkZXIsICZidWZmZXIsIE5VTEwsIE5VTEwpOwotICAgIGlmICghX2RidXNfc3RyaW5nX2NvcHkgKGRhdGEsIDAsIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoYnVmZmVyKSkpCi0gICAgICAgIGdvdG8gZmFpbGVkOworICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9idWZmZXIgKGxvYWRlciwgJmJ1ZmZlcik7CisgICAgX2RidXNfc3RyaW5nX2NvcHkgKGRhdGEsIDAsIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKGJ1ZmZlcikpOwogICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3JldHVybl9idWZmZXIgKGxvYWRlciwgYnVmZmVyKTsKICAgfQogCkBAIC01NTksMjYgKzUyNCwxOCBAQAogICAvKiBXcml0ZSB0aGUgZGF0YSAyIGJ5dGVzIGF0IGEgdGltZSAqLwogCiAgIGxvYWRlciA9IF9kYnVzX21lc3NhZ2VfbG9hZGVyX25ldyAoKTsKLSAgaWYgKGxvYWRlciA9PSBOVUxMKQotICAgIGdvdG8gZmFpbGVkOwogCiAgIGxlbiA9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChkYXRhKTsKICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyKQogICAgIHsKICAgICAgIERCdXNTdHJpbmcgKmJ1ZmZlcjsKIAotICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAobG9hZGVyLCAmYnVmZmVyLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9ieXRlIChidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9ieXRlIChkYXRhLCBpKSkpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotCisgICAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfYnVmZmVyIChsb2FkZXIsICZidWZmZXIpOworICAgICAgX2RidXNfc3RyaW5nX2FwcGVuZF9ieXRlIChidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAoZGF0YSwgaSkpOwogICAgICAgaWYgKChpKzEpIDwgbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9ieXRlIChkYXRhLCBpKzEpKSkKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICB9Ci0KKyAgICAgICAgX2RidXNfc3RyaW5nX2FwcGVuZF9ieXRlIChidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9ieXRlIChkYXRhLCBpKzEpKTsKICAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3JldHVybl9idWZmZXIgKGxvYWRlciwgYnVmZmVyKTsKICAgICB9CiAKQEAgLTYxNSw3ICs1NzIsNyBAQAogICBkaXIgPSBOVUxMOwogCiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZ0ZXN0X2RpcmVjdG9yeSkpCi0gICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGFsbG9jYXRlIHRlc3RfZGlyZWN0b3J5Iik7CisgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZGlkbid0IGFsbG9jYXRlIHRlc3RfZGlyZWN0b3J5XG4iKTsKIAogICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJmZpbGVuYW1lLCBzdWJkaXIpOwogCkBAIC02MjgsMTIgKzU4NSwxMiBAQAogCiAgIF9kYnVzX3N0cmluZ19mcmVlICgmZmlsZW5hbWUpOwogICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmZmlsZW5hbWUpKQotICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImRpZG4ndCBhbGxvY2F0ZSBmaWxlbmFtZSBzdHJpbmciKTsKKyAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJkaWRuJ3QgYWxsb2NhdGUgZmlsZW5hbWUgc3RyaW5nXG4iKTsKIAogICBkaXIgPSBfZGJ1c19kaXJlY3Rvcnlfb3BlbiAoJnRlc3RfZGlyZWN0b3J5LCAmZXJyb3IpOwogICBpZiAoZGlyID09IE5VTEwpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBvcGVuICVzOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IG9wZW4gJXM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmdGVzdF9kaXJlY3RvcnkpLAogICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CkBAIC02ODcsNyArNjQ0LDcgQEAKIAogICBpZiAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBnZXQgbmV4dCBmaWxlIGluICVzOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IGdldCBuZXh0IGZpbGUgaW4gJXM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmdGVzdF9kaXJlY3RvcnkpLAogICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CkBAIC05MTgsNyArODc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91cl9zdHJpbmdfYXJyYXksICZvdXJfc3RyaW5nX2FycmF5X2xlbiwKIAkJCQkgICAwKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiZXJyb3I6ICVzIC0gJXMiLCBlcnJvci5uYW1lLAorICAgICAgX2RidXNfd2FybiAoImVycm9yOiAlcyAtICVzXG4iLCBlcnJvci5uYW1lLAogICAgICAgICAgICAgICAgICAgKGVycm9yLm1lc3NhZ2UgIT0gTlVMTCkgPyBlcnJvci5tZXNzYWdlIDogIm5vIG1lc3NhZ2UiKTsKICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIkNvdWxkIG5vdCBnZXQgYXJndW1lbnRzIik7CiAgICAgfQpAQCAtMTA0OSw3ICsxMDA2LDcgQEAKICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJncyAoJml0ZXIsICZlcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJlcnJvcjogJXMgLSAlcyIsIGVycm9yLm5hbWUsCisgICAgICBfZGJ1c193YXJuICgiZXJyb3I6ICVzIC0gJXNcbiIsIGVycm9yLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IubWVzc2FnZSAhPSBOVUxMKSA/IGVycm9yLm1lc3NhZ2UgOiAibm8gbWVzc2FnZSIpOwogICAgIH0KICAgZWxzZQpAQCAtMTA2NCw3ICsxMDIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJm91cl91aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoImVycm9yOiAlcyAtICVzIiwgZXJyb3IubmFtZSwKKyAgICAgIF9kYnVzX3dhcm4gKCJlcnJvcjogJXMgLSAlc1xuIiwgZXJyb3IubmFtZSwKICAgICAgICAgICAgICAgICAgICAgIChlcnJvci5tZXNzYWdlICE9IE5VTEwpID8gZXJyb3IubWVzc2FnZSA6ICJubyBtZXNzYWdlIik7CiAgICAgfQogICBlbHNlCkBAIC0xMTIwLDcgKzEwNzcsNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJlcnJvcjogcGFyc2Ugd2l0aCB3cm9uZyBzaWduYXR1cmU6ICd1YXNodXUnLiIpOworICAgICAgX2RidXNfd2FybiAoImVycm9yOiBwYXJzZSB3aXRoIHdyb25nIHNpZ25hdHVyZTogJ3Vhc2h1dScuXG4iKTsKICAgICB9CiAKICAgLyogcGFyc2Ugd2l0aCB3cm9uZyBzaWduYXR1cmU6ICJ1YXNodWFzaHUiICovCkBAIC0xMTU0LDcgKzExMTEsNyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJlcnJvcjogcGFyc2Ugd2l0aCB3cm9uZyBzaWduYXR1cmU6ICd1YXNodWFzaHUnLiIpOworICAgICAgX2RidXNfd2FybiAoImVycm9yOiBwYXJzZSB3aXRoIHdyb25nIHNpZ25hdHVyZTogJ3Vhc2h1YXNodScuXG4iKTsKICAgICB9CiAKICAgLyogcGFyc2Ugd2l0aCBjb3JyZWN0IHNpZ25hdHVyZTogInVhc2h1YXNoIiAqLwpAQCAtMTE3NSw3ICsxMTMyLDcgQEAKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoImVycm9yOiAlcyAtICVzIiwgZXJyb3IubmFtZSwKKyAgICAgIF9kYnVzX3dhcm4gKCJlcnJvcjogJXMgLSAlc1xuIiwgZXJyb3IubmFtZSwKICAgICAgICAgICAgICAgICAgIChlcnJvci5tZXNzYWdlICE9IE5VTEwpID8gZXJyb3IubWVzc2FnZSA6ICJubyBtZXNzYWdlIik7CiAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJDb3VsZCBub3QgZ2V0IGFyZ3VtZW50cyIpOwogICAgIH0KQEAgLTE1NDEsNyArMTQ5OCw3IEBACiAgICAgewogICAgICAgREJ1c1N0cmluZyAqYnVmZmVyOwogCi0gICAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfYnVmZmVyIChsb2FkZXIsICZidWZmZXIsIE5VTEwsIE5VTEwpOworICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAobG9hZGVyLCAmYnVmZmVyKTsKICAgICAgIF9kYnVzX3N0cmluZ19hcHBlbmRfYnl0ZSAoYnVmZmVyLCBkYXRhW2ldKTsKICAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX3JldHVybl9idWZmZXIgKGxvYWRlciwgYnVmZmVyKTsKICAgICB9CkBAIC0xNTUyLDcgKzE1MDksNyBAQAogICAgIHsKICAgICAgIERCdXNTdHJpbmcgKmJ1ZmZlcjsKIAotICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAobG9hZGVyLCAmYnVmZmVyLCBOVUxMLCBOVUxMKTsKKyAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9idWZmZXIgKGxvYWRlciwgJmJ1ZmZlcik7CiAgICAgICBfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKGJ1ZmZlciwgZGF0YVtpXSk7CiAgICAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9yZXR1cm5fYnVmZmVyIChsb2FkZXIsIGJ1ZmZlcik7CiAgICAgfQpAQCAtMTc5Miw3ICsxNzQ5LDcgQEAKICAgICAgICAgaWYgKCFkYnVzX2ludGVybmFsX2RvX25vdF91c2VfdHJ5X21lc3NhZ2VfZGF0YSAoJm1kYXRhLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kYXRhLmV4cGVjdGVkX3ZhbGlkaXR5KSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBfZGJ1c193YXJuICgiZXhwZWN0ZWQgdmFsaWRpdHkgJWQgYW5kIGRpZCBub3QgZ2V0IGl0IiwKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJleHBlY3RlZCB2YWxpZGl0eSAlZCBhbmQgZGlkIG5vdCBnZXQgaXRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZGF0YS5leHBlY3RlZF92YWxpZGl0eSk7CiAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJtZXNzYWdlIGRhdGEgZmFpbGVkIik7CiAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLW1lc3NhZ2UuYyBiL2RidXMvZGJ1cy1tZXNzYWdlLmMKaW5kZXggODRkOGMwYy4uZTBkOWM4YiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLW1lc3NhZ2UuYworKysgYi9kYnVzL2RidXMtbWVzc2FnZS5jCkBAIC00MzQsNiArNDM0LDUwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZSk7CiB9CiAKKyNpZiAwCisvKiBQcm9iYWJseSB3ZSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzICovCisvKioKKyAqIFNldHMgdGhlIHNpZ25hdHVyZSBvZiB0aGUgbWVzc2FnZSwgaS5lLiB0aGUgYXJndW1lbnRzIGluIHRoZQorICogbWVzc2FnZSBwYXlsb2FkLiBUaGUgc2lnbmF0dXJlIGluY2x1ZGVzIG9ubHkgImluIiBhcmd1bWVudHMgZm9yCisgKiAjREJVU19NRVNTQUdFX1RZUEVfTUVUSE9EX0NBTEwgYW5kIG9ubHkgIm91dCIgYXJndW1lbnRzIGZvcgorICogI0RCVVNfTUVTU0FHRV9UWVBFX01FVEhPRF9SRVRVUk4sIHNvIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tCisgKiB3aGF0IHlvdSBtaWdodCBleHBlY3QgKGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHNpZ25hdHVyZSBvZiB0aGUKKyAqIGVudGlyZSBDKystc3R5bGUgbWV0aG9kKS4KKyAqCisgKiBUaGUgc2lnbmF0dXJlIGlzIGEgc3RyaW5nIG1hZGUgdXAgb2YgdHlwZSBjb2RlcyBzdWNoIGFzCisgKiAjREJVU19UWVBFX0lOVDMyLiBUaGUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBudWwgKG51bCBpcyBhbHNvCisgKiB0aGUgdmFsdWUgb2YgI0RCVVNfVFlQRV9JTlZBTElEKS4gVGhlIG1hY3JvcyBzdWNoIGFzCisgKiAjREJVU19UWVBFX0lOVDMyIGV2YWx1YXRlIHRvIGludGVnZXJzOyB0byBhc3NlbWJsZSBhIHNpZ25hdHVyZSB5b3UKKyAqIG1heSBmaW5kIGl0IHVzZWZ1bCB0byB1c2UgdGhlIHN0cmluZyBmb3Jtcywgc3VjaCBhcworICogI0RCVVNfVFlQRV9JTlQzMl9BU19TVFJJTkcuCisgKgorICogQW4gInVuc2V0IiBvciAjTlVMTCBzaWduYXR1cmUgaXMgY29uc2lkZXJlZCB0aGUgc2FtZSBhcyBhbiBlbXB0eQorICogc2lnbmF0dXJlLiBJbiBmYWN0IGRidXNfbWVzc2FnZV9nZXRfc2lnbmF0dXJlKCkgd2lsbCBuZXZlciByZXR1cm4KKyAqICNOVUxMLgorICoKKyAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlCisgKiBAcGFyYW0gc2lnbmF0dXJlIHRoZSB0eXBlIHNpZ25hdHVyZSBvciAjTlVMTCB0byB1bnNldAorICogQHJldHVybnMgI0ZBTFNFIGlmIG5vIG1lbW9yeQorICovCitzdGF0aWMgZGJ1c19ib29sX3QKK19kYnVzX21lc3NhZ2Vfc2V0X3NpZ25hdHVyZSAoREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICpzaWduYXR1cmUpCit7CisgIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBGQUxTRSk7CisgIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbCAoIW1lc3NhZ2UtPmxvY2tlZCwgRkFMU0UpOworICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpZ25hdHVyZSA9PSBOVUxMIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfY2hlY2tfaXNfdmFsaWRfc2lnbmF0dXJlIChzaWduYXR1cmUpKTsKKyAgLyogY2FuJ3QgZGVsZXRlIHRoZSBzaWduYXR1cmUgaWYgeW91IGhhdmUgYSBtZXNzYWdlIGJvZHkgKi8KKyAgX2RidXNfcmV0dXJuX3ZhbF9pZl9mYWlsIChfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJm1lc3NhZ2UtPmJvZHkpID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgIT0gTlVMTCk7CisKKyAgcmV0dXJuIHNldF9vcl9kZWxldGVfc3RyaW5nX2ZpZWxkIChtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfSEVBREVSX0ZJRUxEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSk7Cit9CisjZW5kaWYKKwogLyogTWVzc2FnZSBDYWNoZQogICoKICAqIFdlIGNhY2hlIHNvbWUgREJ1c01lc3NhZ2UgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nCkBAIC01OTIsNyArNjM2LDcgQEAKICAgICB7CiAgICAgICBpZiAoIV9kYnVzX2Nsb3NlKGZkc1tpXSwgJmUpKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybigiRmFpbGVkIHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcjogJXMiLCBlLm1lc3NhZ2UpOworICAgICAgICAgIF9kYnVzX3dhcm4oIkZhaWxlZCB0byBjbG9zZSBmaWxlIGRlc2NyaXB0b3I6ICVzXG4iLCBlLm1lc3NhZ2UpOwogICAgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MDksMzggKzc1Myw2IEBACiAgICAgZGJ1c19tZXNzYWdlX2ZpbmFsaXplIChtZXNzYWdlKTsKIH0KIAotLyoKLSAqIEFycmFuZ2UgZm9yIGl0ZXIgdG8gYmUgc29tZXRoaW5nIHRoYXQgX2RidXNfbWVzc2FnZV9pdGVyX2NoZWNrKCkgd291bGQKLSAqIHJlamVjdCBhcyBub3QgYSB2YWxpZCBpdGVyYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLV9kYnVzX21lc3NhZ2VfcmVhbF9pdGVyX3plcm8gKERCdXNNZXNzYWdlUmVhbEl0ZXIgKml0ZXIpCi17Ci0gIF9kYnVzX2Fzc2VydCAoaXRlciAhPSBOVUxMKTsKLSAgX0RCVVNfWkVSTyAoKml0ZXIpOwotICAvKiBOVUxMIGlzIG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIGd1YXJhbnRlZWQgdG8gYmUgYWxsLWJpdHMtemVybyAqLwotICBpdGVyLT5tZXNzYWdlID0gTlVMTDsKLX0KLQotLyoqCi0gKiBJbml0aWFsaXplIGl0ZXIgYXMgaWYgd2l0aCAjREJVU19NRVNTQUdFX0lURVJfSU5JVF9DTE9TRUQuIFRoZSBvbmx5IHZhbGlkCi0gKiBvcGVyYXRpb24gZm9yIHN1Y2ggYW4gaXRlcmF0b3IgaXMKLSAqIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyX2lmX29wZW4oKSwgd2hpY2ggZG9lcyBub3RoaW5nLgotICovCi12b2lkCi1kYnVzX21lc3NhZ2VfaXRlcl9pbml0X2Nsb3NlZCAoREJ1c01lc3NhZ2VJdGVyICppdGVyKQotewotICBfZGJ1c19yZXR1cm5faWZfZmFpbCAoaXRlciAhPSBOVUxMKTsKLSAgX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfemVybyAoKERCdXNNZXNzYWdlUmVhbEl0ZXIgKikgaXRlcik7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAotX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfaXNfemVyb2VkIChEQnVzTWVzc2FnZVJlYWxJdGVyICppdGVyKQotewotICByZXR1cm4gKGl0ZXIgIT0gTlVMTCAmJiBpdGVyLT5tZXNzYWdlID09IE5VTEwgJiYgaXRlci0+Y2hhbmdlZF9zdGFtcCA9PSAwICYmCi0gICAgICAgICAgaXRlci0+aXRlcl90eXBlID09IDAgJiYgaXRlci0+c2lnX3JlZmNvdW50ID09IDApOwotfQotCiAjaWYgZGVmaW5lZChEQlVTX0VOQUJMRV9DSEVDS1MpIHx8IGRlZmluZWQoREJVU19FTkFCTEVfQVNTRVJUKQogc3RhdGljIGRidXNfYm9vbF90CiBfZGJ1c19tZXNzYWdlX2l0ZXJfY2hlY2sgKERCdXNNZXNzYWdlUmVhbEl0ZXIgKml0ZXIpCkBAIC03NDksMTQgKzc2MSw3IEBACiAKICAgaWYgKGl0ZXIgPT0gTlVMTCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBpdGVyYXRvciBpcyBOVUxMIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGlmIChpdGVyLT5tZXNzYWdlID09IE5VTEwgfHwgaXRlci0+aXRlcl90eXBlID09IDApCi0gICAgewotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJkYnVzIG1lc3NhZ2UgaXRlcmF0b3IgaGFzIGFscmVhZHkgYmVlbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3NlZCwgb3IgaXMgdW5pbml0aWFsaXplZCBvciBjb3JydXB0Iik7CisgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBpdGVyYXRvciBpcyBOVUxMXG4iKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTc2Niw3ICs3NzEsNyBAQAogICAgIHsKICAgICAgIGlmIChpdGVyLT51LnJlYWRlci5ieXRlX29yZGVyICE9IGJ5dGVfb3JkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBjaGFuZ2VkIGJ5dGUgb3JkZXIgc2luY2UgaXRlcmF0b3Igd2FzIGNyZWF0ZWQiKTsKKyAgICAgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBjaGFuZ2VkIGJ5dGUgb3JkZXIgc2luY2UgaXRlcmF0b3Igd2FzIGNyZWF0ZWRcbiIpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgICAgLyogYmVjYXVzZSB3ZSBzd2FwIHRoZSBtZXNzYWdlIGludG8gY29tcGlsZXIgb3JkZXIgd2hlbiB5b3UgaW5pdCBhbiBpdGVyICovCkBAIC03NzYsNyArNzgxLDcgQEAKICAgICB7CiAgICAgICBpZiAoaXRlci0+dS53cml0ZXIuYnl0ZV9vcmRlciAhPSBieXRlX29yZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJkYnVzIG1lc3NhZ2UgY2hhbmdlZCBieXRlIG9yZGVyIHNpbmNlIGFwcGVuZCBpdGVyYXRvciB3YXMgY3JlYXRlZCIpOworICAgICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiZGJ1cyBtZXNzYWdlIGNoYW5nZWQgYnl0ZSBvcmRlciBzaW5jZSBhcHBlbmQgaXRlcmF0b3Igd2FzIGNyZWF0ZWRcbiIpOwogICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgICAgLyogYmVjYXVzZSB3ZSBzd2FwIHRoZSBtZXNzYWdlIGludG8gY29tcGlsZXIgb3JkZXIgd2hlbiB5b3UgaW5pdCBhbiBpdGVyICovCkBAIC03ODQsMTMgKzc4OSwxMyBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiZGJ1cyBtZXNzYWdlIGl0ZXJhdG9yIGxvb2tzIHVuaW5pdGlhbGl6ZWQgb3IgY29ycnVwdGVkIik7CisgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBpdGVyYXRvciBsb29rcyB1bmluaXRpYWxpemVkIG9yIGNvcnJ1cHRlZFxuIik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgIGlmIChpdGVyLT5jaGFuZ2VkX3N0YW1wICE9IGl0ZXItPm1lc3NhZ2UtPmNoYW5nZWRfc3RhbXApCiAgICAgewotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJkYnVzIG1lc3NhZ2UgaXRlcmF0b3IgaW52YWxpZCBiZWNhdXNlIHRoZSBtZXNzYWdlIGhhcyBiZWVuIG1vZGlmaWVkIChvciBwZXJoYXBzIHRoZSBpdGVyYXRvciBpcyBqdXN0IHVuaW5pdGlhbGl6ZWQpIik7CisgICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoImRidXMgbWVzc2FnZSBpdGVyYXRvciBpbnZhbGlkIGJlY2F1c2UgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gbW9kaWZpZWQgKG9yIHBlcmhhcHMgdGhlIGl0ZXJhdG9yIGlzIGp1c3QgdW5pbml0aWFsaXplZClcbiIpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtOTkwLDcgKzk5NSw3IEBACiAjaWZuZGVmIERCVVNfRElTQUJMRV9DSEVDS1MKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJ5b3UgY2FuJ3QgcmVhZCBhcnJheXMgb2YgY29udGFpbmVyIHR5cGVzIChzdHJ1Y3QsIHZhcmlhbnQsIGFycmF5KSB3aXRoICVzIGZvciBub3ciLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgieW91IGNhbid0IHJlYWQgYXJyYXlzIG9mIGNvbnRhaW5lciB0eXBlcyAoc3RydWN0LCB2YXJpYW50LCBhcnJheSkgd2l0aCAlcyBmb3Igbm93XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfREJVU19GVU5DVElPTl9OQU1FKTsKICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICB9CkBAIC05OTksNyArMTAwNCw3IEBACiAjaWZuZGVmIERCVVNfRElTQUJMRV9DSEVDS1MKICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJ5b3UgY2FuIG9ubHkgcmVhZCBhcnJheXMgYW5kIGJhc2ljIHR5cGVzIHdpdGggJXMgZm9yIG5vdyIsCisgICAgICAgICAgX2RidXNfd2FybiAoInlvdSBjYW4gb25seSByZWFkIGFycmF5cyBhbmQgYmFzaWMgdHlwZXMgd2l0aCAlcyBmb3Igbm93XG4iLAogICAgICAgICAgICAgICAgICAgICAgIF9EQlVTX0ZVTkNUSU9OX05BTUUpOwogICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CkBAIC0xNzczLDE2ICsxNzc4LDEwIEBACiAgKiBUbyBhcHBlbmQgYW4gYXJyYXkgb2YgZml4ZWQtbGVuZ3RoIGJhc2ljIHR5cGVzIChleGNlcHQgVW5peCBmaWxlCiAgKiBkZXNjcmlwdG9ycyksIHBhc3MgaW4gdGhlIERCVVNfVFlQRV9BUlJBWSB0eXBlY29kZSwgdGhlIGVsZW1lbnQKICAqIHR5cGVjb2RlLCB0aGUgYWRkcmVzcyBvZiB0aGUgYXJyYXkgcG9pbnRlciwgYW5kIGEgMzItYml0IGludGVnZXIKLSAqIGdpdmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4gU28gZm9yIGV4YW1wbGU6Ci0gKgotICogQGNvZGUKLSAqCi0gKiBjb25zdCBkYnVzX2ludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwgMyB9OwotICogY29uc3QgZGJ1c19pbnQzMl90ICp2X0FSUkFZID0gYXJyYXk7Ci0gKiBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG1lc3NhZ2UsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9BUlJBWSwgREJVU19UWVBFX0lOVDMyLCAmdl9BUlJBWSwgMywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpOwotICoKKyAqIGdpdmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4gU28gZm9yIGV4YW1wbGU6IEBjb2RlCisgKiBjb25zdCBkYnVzX2ludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwgMyB9OyBjb25zdCBkYnVzX2ludDMyX3QKKyAqICp2X0FSUkFZID0gYXJyYXk7IGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWVzc2FnZSwKKyAqIERCVVNfVFlQRV9BUlJBWSwgREJVU19UWVBFX0lOVDMyLCAmdl9BUlJBWSwgMywgREJVU19UWVBFX0lOVkFMSUQpOwogICogQGVuZGNvZGUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgYXJyYXlzIG9mIFVuaXggZmlsZSBkZXNjcmlwdG9ycy4gSWYKQEAgLTE5MzMsMTAgKzE5MzIsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoImFycmF5cyBvZiAlcyBjYW4ndCBiZSBhcHBlbmRlZCB3aXRoICVzIGZvciBub3ciLAorICAgICAgICAgICAgICBfZGJ1c193YXJuICgiYXJyYXlzIG9mICVzIGNhbid0IGJlIGFwcGVuZGVkIHdpdGggJXMgZm9yIG5vd1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfdHlwZV90b19zdHJpbmcgKGVsZW1lbnRfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQlVTX0ZVTkNUSU9OX05BTUUpOwotICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lciAoJml0ZXIsICZhcnJheSk7CiAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogCkBAIC0xOTQ2LDcgKzE5NDQsNyBAQAogI2lmbmRlZiBEQlVTX0RJU0FCTEVfQ0hFQ0tTCiAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgidHlwZSAlcyBpc24ndCBzdXBwb3J0ZWQgeWV0IGluICVzIiwKKyAgICAgICAgICBfZGJ1c193YXJuICgidHlwZSAlcyBpc24ndCBzdXBwb3J0ZWQgeWV0IGluICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3R5cGVfdG9fc3RyaW5nICh0eXBlKSwgX0RCVVNfRlVOQ1RJT05fTkFNRSk7CiAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KQEAgLTI1ODMsOSArMjU4MSw2IEBACiAKICAgcmVhbC0+c2lnX3JlZmNvdW50ID0gMTsKIAotICAvKiBJZiB0aGlzIGFzc2VydGlvbiBmYWlsZWQsIHRoZW4gc3RyIHdvdWxkIGJlIG5laXRoZXIgc3RvcmVkIGluIHUud3JpdGVyCi0gICAqIG5vciBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLCByZXN1bHRpbmcgaW4gYSBtZW1vcnkgbGVhay4gKi8KLSAgX2RidXNfYXNzZXJ0IChyZWFsLT51LndyaXRlci50eXBlX3N0ciA9PSBOVUxMKTsKICAgX2RidXNfdHlwZV93cml0ZXJfYWRkX3R5cGVzICgmcmVhbC0+dS53cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoc3RyKSk7CiAgIHJldHVybiBUUlVFOwpAQCAtMjY3Myw3ICsyNjY4LDcgQEAKIAogICBpZiAoaXRlci0+bWVzc2FnZS0+bG9ja2VkKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiZGJ1cyBhcHBlbmQgaXRlcmF0b3IgY2FuJ3QgYmUgdXNlZDogbWVzc2FnZSBpcyBsb2NrZWQgKGhhcyBhbHJlYWR5IGJlZW4gc2VudCkiKTsKKyAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiZGJ1cyBhcHBlbmQgaXRlcmF0b3IgY2FuJ3QgYmUgdXNlZDogbWVzc2FnZSBpcyBsb2NrZWQgKGhhcyBhbHJlYWR5IGJlZW4gc2VudClcbiIpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMjc1MCw4ICsyNzQ1LDYgQEAKICNpZm5kZWYgREJVU19ESVNBQkxFX0NIRUNLUwogICBzd2l0Y2ggKHR5cGUpCiAgICAgewotICAgICAgREJ1c1N0cmluZyBzdHI7Ci0gICAgICBEQnVzVmFsaWRpdHkgc2lnbmF0dXJlX3ZhbGlkaXR5OwogICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICpzdHJpbmdfcDsKICAgICAgIGNvbnN0IGRidXNfYm9vbF90ICpib29sX3A7CiAKQEAgLTI3NjcsMTUgKzI3NjAsNyBAQAogCiAgICAgICBjYXNlIERCVVNfVFlQRV9TSUdOQVRVUkU6CiAgICAgICAgIHN0cmluZ19wID0gdmFsdWU7Ci0gICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmc3RyLCAqc3RyaW5nX3ApOwotICAgICAgICBzaWduYXR1cmVfdmFsaWRpdHkgPSBfZGJ1c192YWxpZGF0ZV9zaWduYXR1cmVfd2l0aF9yZWFzb24gKCZzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnN0cikpOwotCi0gICAgICAgIGlmIChzaWduYXR1cmVfdmFsaWRpdHkgPT0gREJVU19WQUxJRElUWV9VTktOT1dOX09PTV9FUlJPUikKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgX2RidXNfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaWduYXR1cmVfdmFsaWRpdHkgPT0gREJVU19WQUxJRCwgRkFMU0UpOworICAgICAgICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9kYnVzX2NoZWNrX2lzX3ZhbGlkX3NpZ25hdHVyZSAoKnN0cmluZ19wKSwgRkFMU0UpOwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBEQlVTX1RZUEVfQk9PTEVBTjoKQEAgLTI3OTksMjIgKzI3ODQsMjAgQEAKICAgICAgIGludCAqZmRzOwogICAgICAgZGJ1c191aW50MzJfdCB1OwogCi0gICAgICByZXQgPSBGQUxTRTsKLQogICAgICAgLyogRmlyc3Qgc3RlcCwgaW5jbHVkZSB0aGUgZmQgaW4gdGhlIGZkIGxpc3Qgb2YgdGhpcyBtZXNzYWdlICovCiAgICAgICBpZiAoIShmZHMgPSBleHBhbmRfZmRfYXJyYXkocmVhbC0+bWVzc2FnZSwgMSkpKQotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAgICAgICAqZmRzID0gX2RidXNfZHVwKCooaW50KikgdmFsdWUsIE5VTEwpOwogICAgICAgaWYgKCpmZHMgPCAwKQotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAgICAgICB1ID0gcmVhbC0+bWVzc2FnZS0+bl91bml4X2ZkczsKIAogICAgICAgLyogU2Vjb25kIHN0ZXAsIHdyaXRlIHRoZSBpbmRleCB0byB0aGUgZmQgKi8KICAgICAgIGlmICghKHJldCA9IF9kYnVzX3R5cGVfd3JpdGVyX3dyaXRlX2Jhc2ljICgmcmVhbC0+dS53cml0ZXIsIERCVVNfVFlQRV9VTklYX0ZELCAmdSkpKSB7CiAgICAgICAgIF9kYnVzX2Nsb3NlKCpmZHMsIE5VTEwpOwotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgfQogCiAgICAgICByZWFsLT5tZXNzYWdlLT5uX3VuaXhfZmRzICs9IDE7CkBAIC0yODMzLDkgKzI4MTYsNiBAQAogICAgICAgICAgZnJlZWQuICovCiAjZWxzZQogICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAvKiBUaGlzIGlzIHJlZHVuZGFudCAod2UgY291bGQganVzdCBmYWxsIHRocm91Z2gpLCBidXQgaXQgYXZvaWRzCi0gICAgICAgKiAtV3VudXNlZC1sYWJlbCBpbiBidWlsZHMgdGhhdCBkb24ndCBIQVZFX1VOSVhfRkRfUEFTU0lORyAqLwotICAgICAgZ290byBvdXQ7CiAjZW5kaWYKICAgICB9CiAgIGVsc2UKQEAgLTI4NDMsNyArMjgyMyw2IEBACiAgICAgICByZXQgPSBfZGJ1c190eXBlX3dyaXRlcl93cml0ZV9iYXNpYyAoJnJlYWwtPnUud3JpdGVyLCB0eXBlLCB2YWx1ZSk7CiAgICAgfQogCi1vdXQ6CiAgIGlmICghX2RidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX3NpZ25hdHVyZSAocmVhbCkpCiAgICAgcmV0ID0gRkFMU0U7CiAKQEAgLTI5MjMsOCArMjkwMiw4IEBACiB9CiAKIC8qKgotICogQXBwZW5kcyBhIGNvbnRhaW5lci10eXBlZCB2YWx1ZSB0byB0aGUgbWVzc2FnZS4gT24gc3VjY2VzcywgeW91IGFyZQotICogcmVxdWlyZWQgdG8gYXBwZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSByZXR1cm5lZAorICogQXBwZW5kcyBhIGNvbnRhaW5lci10eXBlZCB2YWx1ZSB0byB0aGUgbWVzc2FnZTsgeW91IGFyZSByZXF1aXJlZCB0bworICogYXBwZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIHVzaW5nIHRoZSByZXR1cm5lZAogICogc3ViLWl0ZXJhdG9yLCBhbmQgdGhlbiBjYWxsCiAgKiBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoKS4gQ29udGFpbmVyIHR5cGVzIGFyZSBmb3IKICAqIGV4YW1wbGUgc3RydWN0LCB2YXJpYW50LCBhbmQgYXJyYXkuIEZvciB2YXJpYW50cywgdGhlCkBAIC0yOTM3LDEyICsyOTE2LDYgQEAKICAqIEB0b2RvIElmIHRoaXMgZmFpbHMgZHVlIHRvIGxhY2sgb2YgbWVtb3J5LCB0aGUgbWVzc2FnZSBpcyBob3NlZCBhbmQKICAqIHlvdSBoYXZlIHRvIHN0YXJ0IG92ZXIgYnVpbGRpbmcgdGhlIHdob2xlIG1lc3NhZ2UuCiAgKgotICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgdGhlIHN1Yi1pdGVyYXRvciByZW1haW5zIGludmFsaWQsIGFuZCBtdXN0Ci0gKiBub3QgYmUgY2xvc2VkIHdpdGggZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCkgb3IgYWJhbmRvbmVkCi0gKiB3aXRoIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyKCkuIEhvd2V2ZXIsIGFmdGVyIHRoaXMKLSAqIGZ1bmN0aW9uIGhhcyBlaXRoZXIgc3VjY2VlZGVkIG9yIGZhaWxlZCwgaXQgaXMgdmFsaWQgdG8gY2FsbAotICogZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbigpLgotICoKICAqIEBwYXJhbSBpdGVyIHRoZSBhcHBlbmQgaXRlcmF0b3IKICAqIEBwYXJhbSB0eXBlIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZQogICogQHBhcmFtIGNvbnRhaW5lZF9zaWduYXR1cmUgdGhlIHR5cGUgb2YgY29udGFpbmVyIGNvbnRlbnRzCkBAIC0yOTU4LDE3ICsyOTMxLDExIEBACiAgIERCdXNNZXNzYWdlUmVhbEl0ZXIgKnJlYWwgPSAoREJ1c01lc3NhZ2VSZWFsSXRlciAqKWl0ZXI7CiAgIERCdXNNZXNzYWdlUmVhbEl0ZXIgKnJlYWxfc3ViID0gKERCdXNNZXNzYWdlUmVhbEl0ZXIgKilzdWI7CiAgIERCdXNTdHJpbmcgY29udGFpbmVkX3N0cjsKLSAgREJ1c1ZhbGlkaXR5IGNvbnRhaW5lZF9zaWduYXR1cmVfdmFsaWRpdHk7Ci0gIGRidXNfYm9vbF90IHJldDsKLQotICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN1YiAhPSBOVUxMLCBGQUxTRSk7Ci0gIC8qIERvIG91ciBiZXN0IHRvIG1ha2Ugc3VyZSB0aGUgc3ViLWl0ZXJhdG9yIGRvZXNuJ3QgY29udGFpbiBzb21ldGhpbmcKLSAgICogdmFsaWQtbG9va2luZyBvbiBmYWlsdXJlICovCi0gIF9kYnVzX21lc3NhZ2VfcmVhbF9pdGVyX3plcm8gKHJlYWxfc3ViKTsKIAogICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9kYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfY2hlY2sgKHJlYWwpLCBGQUxTRSk7CiAgIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbCAocmVhbC0+aXRlcl90eXBlID09IERCVVNfTUVTU0FHRV9JVEVSX1RZUEVfV1JJVEVSLCBGQUxTRSk7CiAgIF9kYnVzX3JldHVybl92YWxfaWZfZmFpbCAoZGJ1c190eXBlX2lzX2NvbnRhaW5lciAodHlwZSksIEZBTFNFKTsKKyAgX2RidXNfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdWIgIT0gTlVMTCwgRkFMU0UpOwogICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKCh0eXBlID09IERCVVNfVFlQRV9TVFJVQ1QgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkX3NpZ25hdHVyZSA9PSBOVUxMKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlID09IERCVVNfVFlQRV9ESUNUX0VOVFJZICYmCkBAIC0yOTgyLDU0ICsyOTQ5LDMyIEBACiAgICAqIGRpY3QgZW50cmllcyBhcmUgaW52YWxpZCBzaWduYXR1cmVzIHN0YW5kYWxvbmUgKHRoZXkgbXVzdCBiZSBpbgogICAgKiBhbiBhcnJheSkKICAgICovCi0gIGlmIChjb250YWluZWRfc2lnbmF0dXJlICE9IE5VTEwpCi0gICAgewotICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZjb250YWluZWRfc3RyLCBjb250YWluZWRfc2lnbmF0dXJlKTsKLSAgICAgIGNvbnRhaW5lZF9zaWduYXR1cmVfdmFsaWRpdHkgPSBfZGJ1c192YWxpZGF0ZV9zaWduYXR1cmVfd2l0aF9yZWFzb24gKCZjb250YWluZWRfc3RyLAotICAgICAgICAgIDAsCi0gICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZjb250YWluZWRfc3RyKSk7Ci0KLSAgICAgIGlmIChjb250YWluZWRfc2lnbmF0dXJlX3ZhbGlkaXR5ID09IERCVVNfVkFMSURJVFlfVU5LTk9XTl9PT01fRVJST1IpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKiBqdXN0IHNvbWUgcGxhY2Vob2xkZXIgdmFsdWUgKi8KLSAgICAgIGNvbnRhaW5lZF9zaWduYXR1cmVfdmFsaWRpdHkgPSBEQlVTX1ZBTElEX0JVVF9JTkNPTVBMRVRFOwotICAgIH0KLQogICBfZGJ1c19yZXR1cm5fdmFsX2lmX2ZhaWwgKCh0eXBlID09IERCVVNfVFlQRV9BUlJBWSAmJiBjb250YWluZWRfc2lnbmF0dXJlICYmICpjb250YWluZWRfc2lnbmF0dXJlID09IERCVVNfRElDVF9FTlRSWV9CRUdJTl9DSEFSKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZF9zaWduYXR1cmUgPT0gTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZF9zaWduYXR1cmVfdmFsaWRpdHkgPT0gREJVU19WQUxJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVkX3NpZ25hdHVyZSA9PSBOVUxMIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX2NoZWNrX2lzX3ZhbGlkX3NpZ25hdHVyZSAoY29udGFpbmVkX3NpZ25hdHVyZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIAogICBpZiAoIV9kYnVzX21lc3NhZ2VfaXRlcl9vcGVuX3NpZ25hdHVyZSAocmVhbCkpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIHJldCA9IEZBTFNFOwogICAqcmVhbF9zdWIgPSAqcmVhbDsKIAogICBpZiAoY29udGFpbmVkX3NpZ25hdHVyZSAhPSBOVUxMKQogICAgIHsKICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmY29udGFpbmVkX3N0ciwgY29udGFpbmVkX3NpZ25hdHVyZSk7CiAKLSAgICAgIHJldCA9IF9kYnVzX3R5cGVfd3JpdGVyX3JlY3Vyc2UgKCZyZWFsLT51LndyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVkX3N0ciwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWFsX3N1Yi0+dS53cml0ZXIpOworICAgICAgcmV0dXJuIF9kYnVzX3R5cGVfd3JpdGVyX3JlY3Vyc2UgKCZyZWFsLT51LndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb250YWluZWRfc3RyLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWFsX3N1Yi0+dS53cml0ZXIpOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHJldCA9IF9kYnVzX3R5cGVfd3JpdGVyX3JlY3Vyc2UgKCZyZWFsLT51LndyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlYWxfc3ViLT51LndyaXRlcik7Ci0gICAgfQotCi0gIGlmICghcmV0KQotICAgIF9kYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX3NpZ25hdHVyZSAocmVhbCk7Ci0KLSAgcmV0dXJuIHJldDsKKyAgICAgIHJldHVybiBfZGJ1c190eXBlX3dyaXRlcl9yZWN1cnNlICgmcmVhbC0+dS53cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWFsX3N1Yi0+dS53cml0ZXIpOworICAgIH0gCiB9CiAKIApAQCAtMzAzOSwxMiArMjk4NCw2IEBACiAgKiBjb250YWluZXIgaXMgd3JpdHRlbiwgYW5kIG1heSBmcmVlIHJlc291cmNlcyBjcmVhdGVkIGJ5CiAgKiBkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigpLgogICoKLSAqIEV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBmYWlscyBkdWUgdG8gbGFjayBvZiBtZW1vcnksIHRoZSBzdWItaXRlcmF0b3Igc3ViCi0gKiBoYXMgYmVlbiBjbG9zZWQgYW5kIGludmFsaWRhdGVkLiBJdCBtdXN0IG5vdCBiZSBjbG9zZWQgYWdhaW4gd2l0aCB0aGlzCi0gKiBmdW5jdGlvbiwgb3IgYWJhbmRvbmVkIHdpdGggZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIoKS4KLSAqIEhvd2V2ZXIsIGl0IHJlbWFpbnMgdmFsaWQgdG8gY2FsbAotICogZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbigpLgotICoKICAqIEB0b2RvIElmIHRoaXMgZmFpbHMgZHVlIHRvIGxhY2sgb2YgbWVtb3J5LCB0aGUgbWVzc2FnZSBpcyBob3NlZCBhbmQKICAqIHlvdSBoYXZlIHRvIHN0YXJ0IG92ZXIgYnVpbGRpbmcgdGhlIHdob2xlIG1lc3NhZ2UuCiAgKgpAQCAtMzA2Nyw3ICszMDA2LDYgQEAKIAogICByZXQgPSBfZGJ1c190eXBlX3dyaXRlcl91bnJlY3Vyc2UgKCZyZWFsLT51LndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9zdWItPnUud3JpdGVyKTsKLSAgX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfemVybyAocmVhbF9zdWIpOwogCiAgIGlmICghX2RidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX3NpZ25hdHVyZSAocmVhbCkpCiAgICAgcmV0ID0gRkFMU0U7CkBAIC0zMDkxLDkgKzMwMjksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciAqc3ViKQogewogICBEQnVzTWVzc2FnZVJlYWxJdGVyICpyZWFsID0gKERCdXNNZXNzYWdlUmVhbEl0ZXIgKilpdGVyOworI2lmbmRlZiBEQlVTX0RJU0FCTEVfQ0hFQ0tTCiAgIERCdXNNZXNzYWdlUmVhbEl0ZXIgKnJlYWxfc3ViID0gKERCdXNNZXNzYWdlUmVhbEl0ZXIgKilzdWI7CiAKLSNpZm5kZWYgREJVU19ESVNBQkxFX0NIRUNLUwogICBfZGJ1c19yZXR1cm5faWZfZmFpbCAoX2RidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9jaGVjayAocmVhbCkpOwogICBfZGJ1c19yZXR1cm5faWZfZmFpbCAocmVhbC0+aXRlcl90eXBlID09IERCVVNfTUVTU0FHRV9JVEVSX1RZUEVfV1JJVEVSKTsKICAgX2RidXNfcmV0dXJuX2lmX2ZhaWwgKF9kYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfY2hlY2sgKHJlYWxfc3ViKSk7CkBAIC0zMTAxLDk3ICszMDM5LDYgQEAKICNlbmRpZgogCiAgIF9kYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX3NpZ25hdHVyZSAocmVhbCk7Ci0gIF9kYnVzX21lc3NhZ2VfcmVhbF9pdGVyX3plcm8gKHJlYWxfc3ViKTsKLX0KLQotLyoqCi0gKiBBYmFuZG9ucyBjcmVhdGlvbiBvZiBhIGNvbnRhaW5lZC10eXBlZCB2YWx1ZSBhbmQgZnJlZXMgcmVzb3VyY2VzIGNyZWF0ZWQKLSAqIGJ5IGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCkuICBPbmNlIHRoaXMgcmV0dXJucywgdGhlIG1lc3NhZ2UKLSAqIGlzIGhvc2VkIGFuZCB5b3UgaGF2ZSB0byBzdGFydCBvdmVyIGJ1aWxkaW5nIHRoZSB3aG9sZSBtZXNzYWdlLgotICoKLSAqIFVubGlrZSBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lcigpLCBpdCBpcyB2YWxpZCB0byBjYWxsIHRoaXMKLSAqIGZ1bmN0aW9uIG9uIGFuIGl0ZXJhdG9yIHRoYXQgd2FzIGluaXRpYWxpemVkIHdpdGgKLSAqICNEQlVTX01FU1NBR0VfSVRFUl9JTklUX0NMT1NFRCwgb3IgYW4gaXRlcmF0b3IgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQKLSAqIG9yIGFiYW5kb25lZC4gSG93ZXZlciwgaXQgaXMgbm90IHZhbGlkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbgotICogdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBlcnJvciBjbGVhbnVwCi0gKiBjb2RlIHBhdGhzLCBzaW1pbGFyIHRvIHRoaXMgcGF0dGVybjoKLSAqCi0gKiAgICAgICBEQnVzTWVzc2FnZUl0ZXIgb3V0ZXIgPSBEQlVTX01FU1NBR0VfSVRFUl9JTklUX0NMT1NFRDsKLSAqICAgICAgIERCdXNNZXNzYWdlSXRlciBpbm5lciA9IERCVVNfTUVTU0FHRV9JVEVSX0lOSVRfQ0xPU0VEOwotICogICAgICAgZGJ1c19ib29sX3QgcmVzdWx0ID0gRkFMU0U7Ci0gKgotICogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoaXRlciwgLi4uLCAmb3V0ZXIpKQotICogICAgICAgICBnb3RvIG91dDsKLSAqCi0gKiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmb3V0ZXIsIC4uLiwgJmlubmVyKSkKLSAqICAgICAgICAgZ290byBvdXQ7Ci0gKgotICogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZpbm5lciwgLi4uKSkKLSAqICAgICAgICAgZ290byBvdXQ7Ci0gKgotICogICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZvdXRlciwgLi4uLCAmaW5uZXIpKQotICogICAgICAgICBnb3RvIG91dDsKLSAqCi0gKiAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lciAoaXRlciwgLi4uLCAmb3V0ZXIpKQotICogICAgICAgICBnb3RvIG91dDsKLSAqCi0gKiAgICAgICByZXN1bHQgPSBUUlVFOwotICoKLSAqICAgICBvdXQ6Ci0gKiAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lcl9pZl9vcGVuICgmb3V0ZXIsICZpbm5lcik7Ci0gKiAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lcl9pZl9vcGVuIChpdGVyLCAmb3V0ZXIpOwotICogICAgICAgcmV0dXJuIHJlc3VsdDsKLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgYXBwZW5kIGl0ZXJhdG9yCi0gKiBAcGFyYW0gc3ViIHN1Yi1pdGVyYXRvciB0byBjbG9zZQotICovCi12b2lkCi1kYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lcl9pZl9vcGVuIChEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKnN1YikKLXsKLSAgREJ1c01lc3NhZ2VSZWFsSXRlciAqcmVhbCA9IChEQnVzTWVzc2FnZVJlYWxJdGVyICopaXRlcjsKLSAgREJ1c01lc3NhZ2VSZWFsSXRlciAqcmVhbF9zdWIgPSAoREJ1c01lc3NhZ2VSZWFsSXRlciAqKXN1YjsKLQotICAvKiBJZiBib3RoIHRoZSBwYXJlbnQgYW5kIHRoZSBjaGlsZCBhcmUgemVyb2VkIG91dCwgdGhlbiBlaXRoZXIgd2UgZGlkbid0Ci0gICAqIGV2ZW4gZ2V0IGFzIGZhciBhcyBzdWNjZXNzZnVsbHkgcmVjdXJzaW5nIGludG8gdGhlIHBhcmVudCwgb3Igd2UgYWxyZWFkeQotICAgKiBjbG9zZWQgYm90aCB0aGUgY2hpbGQgYW5kIHRoZSBwYXJlbnQuIEZvciBleGFtcGxlLCBpbiB0aGUgY29kZSBzYW1wbGUKLSAgICogaW4gdGhlIGRvYy1jb21tZW50IGFib3ZlLCB0aGlzIGhhcHBlbnMgZm9yCi0gICAqIGFiYW5kb25fY29udGFpbmVyX2lmX29wZW4gKCZvdXRlciwgJmlubmVyKSBpZiB0aGUgZmlyc3Qgb3Blbl9jb250YWluZXIKLSAgICogY2FsbCBmYWlsZWQsIG9yIGlmIHdlIHJlYWNoZWQgcmVzdWx0ID0gVFJVRSBhbmQgZmVsbCB0aHJvdWdoLiAqLwotICBpZiAoX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfaXNfemVyb2VkIChyZWFsKSAmJgotICAgICAgX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfaXNfemVyb2VkIChyZWFsX3N1YikpCi0gICAgcmV0dXJuOwotCi0jaWZuZGVmIERCVVNfRElTQUJMRV9DSEVDS1MKLSAgLyogSWYgdGhlIGNoaWxkIGlzIG5vdCB6ZXJvZWQgb3V0LCBidXQgdGhlIHBhcmVudCBpcywgdGhlbiBzb21ldGhpbmcgaGFzCi0gICAqIGdvbmUgaG9ycmlibHkgd3JvbmcgKGluIHByYWN0aWNlIHRoYXQgd291bGQgcHJvYmFibHkgbWVhbiBib3RoIGFyZQotICAgKiB1bmluaXRpYWxpemVkIG9yIGNvcnJ1cHQsIGFuZCB0aGUgcGFyZW50IGhhcHBlbnMgdG8gaGF2ZSBlbmRlZCB1cAotICAgKiBhbGwtYnl0ZXMtemVybykuICovCi0gIF9kYnVzX3JldHVybl9pZl9mYWlsIChfZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2NoZWNrIChyZWFsKSk7Ci0gIF9kYnVzX3JldHVybl9pZl9mYWlsIChyZWFsLT5pdGVyX3R5cGUgPT0gREJVU19NRVNTQUdFX0lURVJfVFlQRV9XUklURVIpOwotI2VuZGlmCi0KLSAgLyogSWYgdGhlIHBhcmVudCBpcyBub3QgemVyb2VkIG91dCwgYnV0IHRoZSBjaGlsZCBpcywgdGhlbiBlaXRoZXIgd2UgZGlkCi0gICAqIG5vdCBzdWNjZXNzZnVsbHkgb3BlbiB0aGUgY2hpbGQsIG9yIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBjaGlsZC4gVGhpcwotICAgKiBtZWFucyB3ZSBkbyBub3Qgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQncyBzaWduYXR1cmUsIHNvIGl0IHdvdWxkCi0gICAqIGJlIHdyb25nIHRvIHJlbGVhc2UgaXQ7IHNvIHdlIG11c3Qgbm90IGNhbGwgYWJhbmRvbl9zaWduYXR1cmUoKSBoZXJlLgotICAgKiBJbiB0aGUgY29kZSBzYW1wbGUgaW4gdGhlIGRvYy1jb21tZW50IGFib3ZlLCB0aGlzIGhhcHBlbnMgZm9yCi0gICAqIGFiYW5kb25fY29udGFpbmVyX2lmX29wZW4gKCZvdXRlciwgJmlubmVyKSBpZiB0aGUgc2Vjb25kIG9wZW5fY29udGFpbmVyCi0gICAqIGNhbGwgZmFpbGVkLCBvciBpZiB0aGUgc2Vjb25kIGNsb3NlX2NvbnRhaW5lciBjYWxsIGZhaWxlZC4gKi8KLSAgaWYgKF9kYnVzX21lc3NhZ2VfcmVhbF9pdGVyX2lzX3plcm9lZCAocmVhbF9zdWIpKQotICAgIHJldHVybjsKLQotI2lmbmRlZiBEQlVTX0RJU0FCTEVfQ0hFQ0tTCi0gIF9kYnVzX3JldHVybl9pZl9mYWlsIChfZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2NoZWNrIChyZWFsX3N1YikpOwotICBfZGJ1c19yZXR1cm5faWZfZmFpbCAocmVhbF9zdWItPml0ZXJfdHlwZSA9PSBEQlVTX01FU1NBR0VfSVRFUl9UWVBFX1dSSVRFUik7Ci0jZW5kaWYKLQotICAvKiBJZiBuZWl0aGVyIHRoZSBwYXJlbnQgbm9yIHRoZSBjaGlsZCBpcyB6ZXJvZWQgb3V0LCB0aGVuIHdlIGdlbnVpbmVseQotICAgKiBoYXZlIGFuIG9wZW4gY29udGFpbmVyOyBjbG9zZSBpdC4gSW4gdGhlIGNvZGUgc2FtcGxlIGluIHRoZSBkb2MtY29tbWVudCwKLSAgICogdGhpcyBoYXBwZW5zIGZvciBhYmFuZG9uX2NvbnRhaW5lcl9pZl9vcGVuICgmb3V0ZXIsICZpbm5lcikgaWYgdGhlCi0gICAqIGFwcGVuZF9iYXNpYyBjYWxsIGZhaWxlZC4gKi8KLSAgX2RidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fc2lnbmF0dXJlIChyZWFsKTsKLSAgX2RidXNfbWVzc2FnZV9yZWFsX2l0ZXJfemVybyAocmVhbF9zdWIpOwogfQogCiAvKioKQEAgLTQxOTAsOTkgKzQwMzcsMTMgQEAKICAqLwogdm9pZAogX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAoREJ1c01lc3NhZ2VMb2FkZXIgICpsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzU3RyaW5nICAgICAgICAqKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAqbWF4X3RvX3JlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2Jvb2xfdCAgICAgICAgKm1heV9yZWFkX2ZkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNTdHJpbmcgICAgICAgICoqYnVmZmVyKQogewogICBfZGJ1c19hc3NlcnQgKCFsb2FkZXItPmJ1ZmZlcl9vdXRzdGFuZGluZyk7CiAKICAgKmJ1ZmZlciA9ICZsb2FkZXItPmRhdGE7CiAKICAgbG9hZGVyLT5idWZmZXJfb3V0c3RhbmRpbmcgPSBUUlVFOwotCi0gIGlmIChtYXhfdG9fcmVhZCAhPSBOVUxMKQotICAgIHsKLSNpZmRlZiBIQVZFX1VOSVhfRkRfUEFTU0lORwotICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgICBpbnQgcmVtYWluOwotICAgICAgaW50IGJ5dGVfb3JkZXI7Ci0gICAgICBpbnQgZmllbGRzX2FycmF5X2xlbjsKLSAgICAgIGludCBoZWFkZXJfbGVuOwotICAgICAgaW50IGJvZHlfbGVuOwotI2VuZGlmCi0KLSAgICAgICptYXhfdG9fcmVhZCA9IERCVVNfTUFYSU1VTV9NRVNTQUdFX0xFTkdUSDsKLSAgICAgICptYXlfcmVhZF9mZHMgPSBUUlVFOwotCi0jaWZkZWYgSEFWRV9VTklYX0ZEX1BBU1NJTkcKLSAgICAgIC8qIElmIHdlIGFyZW4ndCBob2xkaW5nIG9udG8gYW55IGZkcywgd2UgY2FuIHJlYWQgYXMgbXVjaCBhcyB3ZSB3YW50Ci0gICAgICAgKiAoZmFzdCBwYXRoKS4gKi8KLSAgICAgIGlmIChsb2FkZXItPm5fdW5peF9mZHMgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvKiBTbG93IHBhdGg6IHdlIGhhdmUgYSBtZXNzYWdlIHdpdGggc29tZSBmZHMgaW4gaXQuIFdlIGRvbid0IHdhbnQKLSAgICAgICAqIHRvIHN0YXJ0IG9uIHRoZSBuZXh0IG1lc3NhZ2UgdW50aWwgdGhpcyBvbmUgaXMgb3V0IG9mIHRoZSB3YXk7Ci0gICAgICAgKiBvdGhlcndpc2UgYSBsZWdpdGltYXRlIHNlbmRlciBjYW4ga2VlcCB1cyBwcm9jZXNzaW5nIG1lc3NhZ2VzCi0gICAgICAgKiBjb250YWluaW5nIGZkcywgdW50aWwgd2UgZGlzY29ubmVjdCBpdCBmb3IgaGF2aW5nIGhhZCBmZHMgcGVuZGluZwotICAgICAgICogZm9yIHRvbyBsb25nLCBhIGxpbWl0IHRoYXQgaXMgaW4gcGxhY2UgdG8gc3RvcCBtYWxpY2lvdXMgc2VuZGVycwotICAgICAgICogZnJvbSBzZXR0aW5nIHVwIHJlY3Vyc2l2ZSBmZC1wYXNzaW5nIHRoYXQgdGFrZXMgdXAgb3VyIHF1b3RhIGFuZAotICAgICAgICogd2lsbCBuZXZlciBnbyBhd2F5LiAqLwotCi0gICAgICByZW1haW4gPSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJmxvYWRlci0+ZGF0YSk7Ci0KLSAgICAgIHdoaWxlIChyZW1haW4gPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgREJ1c1ZhbGlkaXR5IHZhbGlkaXR5ID0gREJVU19WQUxJRElUWV9VTktOT1dOOwotICAgICAgICAgIGludCBuZWVkZWQ7Ci0KLSAgICAgICAgICAvKiBJZiAwIDwgcmVtYWluIDwgREJVU19NSU5JTVVNX0hFQURFUl9TSVpFLCB0aGVuIHdlJ3ZlIGhhZCBhdAotICAgICAgICAgICAqIGxlYXN0IHRoZSBmaXJzdCBieXRlIG9mIGEgbWVzc2FnZSwgYnV0IHdlIGRvbid0IGtub3cgaG93Ci0gICAgICAgICAgICogbXVjaCBtb3JlIHRvIHJlYWQuIE9ubHkgcmVhZCB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAgICAgKiBEQlVTX01JTklNVU1fSEVBREVSX1NJWkUgZm9yIG5vdzsgdGhlbiB3ZSdsbCBrbm93LiAqLwotICAgICAgICAgIGlmIChyZW1haW4gPCBEQlVTX01JTklNVU1fSEVBREVSX1NJWkUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICptYXhfdG9fcmVhZCA9IERCVVNfTUlOSU1VTV9IRUFERVJfU0laRSAtIHJlbWFpbjsKLSAgICAgICAgICAgICAgKm1heV9yZWFkX2ZkcyA9IEZBTFNFOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoIV9kYnVzX2hlYWRlcl9oYXZlX21lc3NhZ2VfdW50cnVzdGVkIChsb2FkZXItPm1heF9tZXNzYWdlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbGlkaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlX29yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZHNfYXJyYXlfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXJfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib2R5X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9hZGVyLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW4pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvKiBJZiBhIG1lc3NhZ2UgaW4gdGhlIGJ1ZmZlciBpcyBpbnZhbGlkLCB3ZSdyZSBnb2luZyB0bwotICAgICAgICAgICAgICAgKiBkaXNjb25uZWN0IHRoZSBzZW5kZXIgYW55d2F5LCBzbyByZWFkaW5nIGFuIGFyYml0cmFyeSBhbW91bnQKLSAgICAgICAgICAgICAgICogaXMgZmluZS4gKi8KLSAgICAgICAgICAgICAgaWYgKHZhbGlkaXR5ICE9IERCVVNfVkFMSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBwYXJ0aWFsIG1lc3NhZ2UsIHdpdGggdGhlCi0gICAgICAgICAgICAgICAqIERCVVNfTUlOSU1VTV9IRUFERVJfU0laRS1ieXRlIGZpeGVkIHBhcnQgb2YgdGhlIGhlYWRlciAod2hpY2gKLSAgICAgICAgICAgICAgICogbGV0cyB1cyB3b3JrIG91dCBob3cgbXVjaCBtb3JlIHdlIG5lZWQpLCBidXQgbm8gbW9yZS4gUmVhZAotICAgICAgICAgICAgICAgKiB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4gKi8KLSAgICAgICAgICAgICAgbmVlZGVkID0gaGVhZGVyX2xlbiArIGJvZHlfbGVuOwotICAgICAgICAgICAgICBfZGJ1c19hc3NlcnQgKG5lZWRlZCA+IHJlbWFpbik7Ci0gICAgICAgICAgICAgICptYXhfdG9fcmVhZCA9IG5lZWRlZCAtIHJlbWFpbjsKLSAgICAgICAgICAgICAgKm1heV9yZWFkX2ZkcyA9IEZBTFNFOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiBTa2lwIG92ZXIgZW50aXJlIG1lc3NhZ2VzIHVudGlsIHdlIGhhdmUgbGVzcyB0aGFuIGEgbWVzc2FnZQotICAgICAgICAgICAqIHJlbWFpbmluZy4gKi8KLSAgICAgICAgICBuZWVkZWQgPSBoZWFkZXJfbGVuICsgYm9keV9sZW47Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0IChuZWVkZWQgPiBEQlVTX01JTklNVU1fSEVBREVSX1NJWkUpOwotICAgICAgICAgIF9kYnVzX2Fzc2VydCAocmVtYWluID49IG5lZWRlZCk7Ci0gICAgICAgICAgcmVtYWluIC09IG5lZWRlZDsKLSAgICAgICAgICBvZmZzZXQgKz0gbmVlZGVkOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CiB9CiAKIC8qKgpAQCAtNDMwNCw3ICs0MDY1LDYgQEAKICAgbG9hZGVyLT5idWZmZXJfb3V0c3RhbmRpbmcgPSBGQUxTRTsKIH0KIAotI2lmZGVmIEhBVkVfVU5JWF9GRF9QQVNTSU5HCiAvKioKICAqIEdldHMgdGhlIGJ1ZmZlciB0byB1c2UgZm9yIHJlYWRpbmcgdW5peCBmZHMgZnJvbSB0aGUgbmV0d29yay4KICAqCkBAIC00MzIwLDYgKzQwODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICoqZmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICAgICAgICAgICAqbWF4X25fZmRzKQogeworI2lmZGVmIEhBVkVfVU5JWF9GRF9QQVNTSU5HCiAgIF9kYnVzX2Fzc2VydCAoIWxvYWRlci0+dW5peF9mZHNfb3V0c3RhbmRpbmcpOwogCiAgIC8qIEFsbG9jYXRlIHNwYWNlIHdoZXJlIHdlIGNhbiBwdXQgdGhlIGZkcyB3ZSByZWFkLiBXZSBhbGxvY2F0ZQpAQCAtNDM0Nyw2ICs0MTA4LDEwIEBACiAKICAgbG9hZGVyLT51bml4X2Zkc19vdXRzdGFuZGluZyA9IFRSVUU7CiAgIHJldHVybiBUUlVFOworI2Vsc2UKKyAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkKCJQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgdW5peCBmZCBwYXNzaW5nIik7CisgIHJldHVybiBGQUxTRTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTQzNjQsNiArNDEyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICpmZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgICAgICAgICAgICBuX2ZkcykKIHsKKyNpZmRlZiBIQVZFX1VOSVhfRkRfUEFTU0lORwogICBfZGJ1c19hc3NlcnQobG9hZGVyLT51bml4X2Zkc19vdXRzdGFuZGluZyk7CiAgIF9kYnVzX2Fzc2VydChsb2FkZXItPnVuaXhfZmRzICsgbG9hZGVyLT5uX3VuaXhfZmRzID09IGZkcyk7CiAgIF9kYnVzX2Fzc2VydChsb2FkZXItPm5fdW5peF9mZHMgKyBuX2ZkcyA8PSBsb2FkZXItPm5fdW5peF9mZHNfYWxsb2NhdGVkKTsKQEAgLTQzNzMsOCArNDEzOSwxMCBAQAogCiAgIGlmIChuX2ZkcyAmJiBsb2FkZXItPnVuaXhfZmRzX2NoYW5nZSkKICAgICBsb2FkZXItPnVuaXhfZmRzX2NoYW5nZSAobG9hZGVyLT51bml4X2Zkc19jaGFuZ2VfZGF0YSk7Ci19CisjZWxzZQorICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQoIlBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCB1bml4IGZkIHBhc3NpbmciKTsKICNlbmRpZgorfQogCiAvKgogICogRklYTUUgd2hlbiB3ZSBtb3ZlIHRoZSBoZWFkZXIgb3V0IG9mIHRoZSBidWZmZXIsIHRoYXQgbWVtbW92ZXMgYWxsCkBAIC01MTA0LDcgKzQ4NzIsNyBAQAogICBpZiAobG9hZGVyID09IE5VTEwpCiAgICAgcmV0dXJuIE5VTEw7CiAKLSAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAobG9hZGVyLCAmYnVmZmVyLCBOVUxMLCBOVUxMKTsKKyAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAobG9hZGVyLCAmYnVmZmVyKTsKIAogICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmRfbGVuIChidWZmZXIsIHN0ciwgbGVuKSkKICAgICBnb3RvIGZhaWxfb29tOwpAQCAtNTIzNiwyNDggKzUwMDQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0hFQURFUl9GTEFHX0FMTE9XX0lOVEVSQUNUSVZFX0FVVEhPUklaQVRJT04pOwogfQogCi0vKioKLSAqIEFuIG9wYXF1ZSBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBzZXJpYWxpemVkIGZvcm0gb2YgYW55IHNpbmdsZQotICogRC1CdXMgbWVzc2FnZSBpdGVtLCB3aG9zZSBzaWduYXR1cmUgaXMgYSBzaW5nbGUgY29tcGxldGUgdHlwZS4KLSAqCi0gKiAoSW1wbGVtZW50YXRpb24gZGV0YWlsOiBJdCdzIHNlcmlhbGl6ZWQgYXMgYSBzaW5nbGUgdmFyaWFudC4pCi0gKi8KLXN0cnVjdCBEQnVzVmFyaWFudAotewotICBEQnVzU3RyaW5nIGRhdGE7Ci19OwotCi0vKioKLSAqIENvcHkgYSBzaW5nbGUgRC1CdXMgbWVzc2FnZSBpdGVtIGZyb20gcmVhZGVyIGludG8gYQotICogbmV3bHktYWxsb2NhdGVkICNEQnVzVmFyaWFudC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaWYgYSBtZXNzYWdlIGNvbnRhaW5zIHRocmVlIHN0cmluZyBhcmd1bWVudHMsIGFuZCByZWFkZXIgcG9pbnRzCi0gKiB0byB0aGUgc2Vjb25kIHN0cmluZywgdGhlIHJlc3VsdGluZyBEQnVzVmFyaWFudCB3aWxsIGhhdmUgc2lnbmF0dXJlCi0gKiAjREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcgYW5kIGNvbnRhaW4gb25seSB0aGF0IHNlY29uZCBzdHJpbmcuCi0gKgotICogQHBhcmFtIHJlYWRlciBBbiBpdGVyYXRvciBvdmVyIG1lc3NhZ2UgaXRlbXMsIHBvaW50aW5nIHRvIG9uZSBpdGVtIHRvIGNvcHkKLSAqIEByZXR1cm5zIFRoZSB2YXJpYW50LCBvciAjTlVMTCBpZiBvdXQgb2YgbWVtb3J5Ci0gKi8KLURCdXNWYXJpYW50ICoKLV9kYnVzX3ZhcmlhbnRfcmVhZCAoREJ1c01lc3NhZ2VJdGVyICpyZWFkZXIpCi17Ci0gIERCdXNWYXJpYW50ICpzZWxmID0gTlVMTDsKLSAgLyogUG9pbnRzIHRvIHRoZSBzaW5nbGUgaXRlbSB3ZSB3aWxsIHJlYWQgZnJvbSB0aGUgcmVhZGVyICovCi0gIERCdXNNZXNzYWdlUmVhbEl0ZXIgKnJlYWxfcmVhZGVyID0gKERCdXNNZXNzYWdlUmVhbEl0ZXIgKikgcmVhZGVyOwotICAvKiBUaGUgcG9zaXRpb24gaW4gc2VsZiBhdCB3aGljaCB3ZSB3aWxsIHdyaXRlIGEgc2luZ2xlIHZhcmlhbnQKLSAgICogKGl0IGlzIHBvc2l0aW9uIDApICovCi0gIERCdXNUeXBlV3JpdGVyIGl0ZW1zX3dyaXRlcjsKLSAgLyogVGhlIHBvc2l0aW9uIGluIHNlbGYgYXQgd2hpY2ggd2Ugd2lsbCB3cml0ZSBhIGNvcHkgb2YgcmVhZGVyCi0gICAqIChpdCBpcyBpbnNpZGUgdGhlIHZhcmlhbnQpICovCi0gIERCdXNUeXBlV3JpdGVyIHZhcmlhbnRfd3JpdGVyOwotICAvKiAndicgKi8KLSAgREJ1c1N0cmluZyB2YXJpYW50X3NpZ25hdHVyZTsKLSAgLyogV2hhdGV2ZXIgaXMgdGhlIHNpZ25hdHVyZSBvZiB0aGUgaXRlbSB3ZSB3aWxsIGNvcHkgZnJvbSB0aGUgcmVhZGVyICovCi0gIERCdXNTdHJpbmcgY29udGFpbmVkX3NpZ25hdHVyZTsKLSAgLyogVFJVRSBpZiBzZWxmLT5kYXRhIG5lZWRzIHRvIGJlIGZyZWVkICovCi0gIGRidXNfYm9vbF90IGRhdGFfaW5pdGVkID0gRkFMU0U7Ci0gIC8qIFRoZSB0eXBlIG9mIHRoZSBpdGVtIHdlIHdpbGwgcmVhZCBmcm9tIHRoZSByZWFkZXIgKi8KLSAgaW50IHR5cGU7Ci0gIC8qIFRoZSBzdHJpbmcsIHN0YXJ0IHBvc2l0aW9uIHdpdGhpbiB0aGF0IHN0cmluZywgYW5kIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlCi0gICAqIG9mIHRoZSBzaW5nbGUgY29tcGxldGUgdHlwZSBvZiB0aGUgaXRlbSByZWFkZXIgcG9pbnRzIHRvICovCi0gIGNvbnN0IERCdXNTdHJpbmcgKnNpZzsKLSAgaW50IHN0YXJ0LCBsZW47Ci0KLSAgX2RidXNfYXNzZXJ0IChfZGJ1c19tZXNzYWdlX2l0ZXJfY2hlY2sgKHJlYWxfcmVhZGVyKSk7Ci0gIF9kYnVzX2Fzc2VydCAocmVhbF9yZWFkZXItPml0ZXJfdHlwZSA9PSBEQlVTX01FU1NBR0VfSVRFUl9UWVBFX1JFQURFUik7Ci0gIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmdmFyaWFudF9zaWduYXR1cmUsIERCVVNfVFlQRV9WQVJJQU5UX0FTX1NUUklORyk7Ci0gIHR5cGUgPSBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKHJlYWRlcik7Ci0gIF9kYnVzX3R5cGVfcmVhZGVyX2dldF9zaWduYXR1cmUgKCZyZWFsX3JlYWRlci0+dS5yZWFkZXIsICZzaWcsICZzdGFydCwgJmxlbik7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmNvbnRhaW5lZF9zaWduYXR1cmUpKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmICghX2RidXNfc3RyaW5nX2NvcHlfbGVuIChzaWcsIHN0YXJ0LCBsZW4sICZjb250YWluZWRfc2lnbmF0dXJlLCAwKSkKLSAgICBnb3RvIG9vbTsKLQotICBzZWxmID0gZGJ1c19uZXcwIChEQnVzVmFyaWFudCwgMSk7Ci0KLSAgaWYgKHNlbGYgPT0gTlVMTCkKLSAgICBnb3RvIG9vbTsKLQotICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmc2VsZi0+ZGF0YSkpCi0gICAgZ290byBvb207Ci0KLSAgZGF0YV9pbml0ZWQgPSBUUlVFOwotCi0gIF9kYnVzX3R5cGVfd3JpdGVyX2luaXRfdmFsdWVzX29ubHkgKCZpdGVtc193cml0ZXIsIERCVVNfQ09NUElMRVJfQllURV9PUkRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhcmlhbnRfc2lnbmF0dXJlLCAwLCAmc2VsZi0+ZGF0YSwgMCk7Ci0KLSAgaWYgKCFfZGJ1c190eXBlX3dyaXRlcl9yZWN1cnNlICgmaXRlbXNfd3JpdGVyLCBEQlVTX1RZUEVfVkFSSUFOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVkX3NpZ25hdHVyZSwgMCwgJnZhcmlhbnRfd3JpdGVyKSkKLSAgICBnb3RvIG9vbTsKLQotICBpZiAodHlwZSA9PSBEQlVTX1RZUEVfQVJSQVkpCi0gICAgewotICAgICAgLyogUG9pbnRzIHRvIGVhY2ggaXRlbSBpbiB0dXJuIGluc2lkZSB0aGUgYXJyYXkgd2UgYXJlIGNvcHlpbmcgKi8KLSAgICAgIERCdXNNZXNzYWdlSXRlciBhcnJheV9yZWFkZXI7Ci0gICAgICAvKiBTYW1lIGFzIGFycmF5X3JlYWRlciAqLwotICAgICAgREJ1c01lc3NhZ2VSZWFsSXRlciAqcmVhbF9hcnJheV9yZWFkZXIgPSAoREJ1c01lc3NhZ2VSZWFsSXRlciAqKSAmYXJyYXlfcmVhZGVyOwotICAgICAgLyogVGhlIHBvc2l0aW9uIGluc2lkZSB0aGUgY29waWVkIGFycmF5IGF0IHdoaWNoIHdlIHdpbGwgd3JpdGUKLSAgICAgICAqIHRoZSBjb3B5IG9mIGFycmF5X3JlYWRlciAqLwotICAgICAgREJ1c1R5cGVXcml0ZXIgYXJyYXlfd3JpdGVyOwotCi0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlIChyZWFkZXIsICZhcnJheV9yZWFkZXIpOwotCi0gICAgICBpZiAoIV9kYnVzX3R5cGVfd3JpdGVyX3JlY3Vyc2UgKCZ2YXJpYW50X3dyaXRlciwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lZF9zaWduYXR1cmUsIDEsICZhcnJheV93cml0ZXIpKQotICAgICAgICBnb3RvIG9vbTsKLQotICAgICAgaWYgKCFfZGJ1c190eXBlX3dyaXRlcl93cml0ZV9yZWFkZXIgKCZhcnJheV93cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlYWxfYXJyYXlfcmVhZGVyLT51LnJlYWRlcikpCi0gICAgICAgIGdvdG8gb29tOwotCi0gICAgICBpZiAoIV9kYnVzX3R5cGVfd3JpdGVyX3VucmVjdXJzZSAoJnZhcmlhbnRfd3JpdGVyLCAmYXJyYXlfd3JpdGVyKSkKLSAgICAgICAgZ290byBvb207Ci0gICAgfQotICBlbHNlIGlmICh0eXBlID09IERCVVNfVFlQRV9ESUNUX0VOVFJZIHx8IHR5cGUgPT0gREJVU19UWVBFX1ZBUklBTlQgfHwKLSAgICAgICAgICAgdHlwZSA9PSBEQlVTX1RZUEVfU1RSVUNUKQotICAgIHsKLSAgICAgIC8qIFBvaW50cyB0byBlYWNoIGl0ZW0gaW4gdHVybiBpbnNpZGUgdGhlIGNvbnRhaW5lciB3ZSBhcmUgY29weWluZyAqLwotICAgICAgREJ1c01lc3NhZ2VJdGVyIGlubmVyX3JlYWRlcjsKLSAgICAgIC8qIFNhbWUgYXMgaW5uZXJfcmVhZGVyICovCi0gICAgICBEQnVzTWVzc2FnZVJlYWxJdGVyICpyZWFsX2lubmVyX3JlYWRlciA9IChEQnVzTWVzc2FnZVJlYWxJdGVyICopICZpbm5lcl9yZWFkZXI7Ci0gICAgICAvKiBUaGUgcG9zaXRpb24gaW5zaWRlIHRoZSBjb3BpZWQgY29udGFpbmVyIGF0IHdoaWNoIHdlIHdpbGwgd3JpdGUgdGhlCi0gICAgICAgKiBjb3B5IG9mIGlubmVyX3JlYWRlciAqLwotICAgICAgREJ1c1R5cGVXcml0ZXIgaW5uZXJfd3JpdGVyOwotCi0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlIChyZWFkZXIsICZpbm5lcl9yZWFkZXIpOwotCi0gICAgICBpZiAoIV9kYnVzX3R5cGVfd3JpdGVyX3JlY3Vyc2UgKCZ2YXJpYW50X3dyaXRlciwgdHlwZSwgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlubmVyX3dyaXRlcikpCi0gICAgICAgIGdvdG8gb29tOwotCi0gICAgICBpZiAoIV9kYnVzX3R5cGVfd3JpdGVyX3dyaXRlX3JlYWRlciAoJmlubmVyX3dyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9pbm5lcl9yZWFkZXItPnUucmVhZGVyKSkKLSAgICAgICAgZ290byBvb207Ci0KLSAgICAgIGlmICghX2RidXNfdHlwZV93cml0ZXJfdW5yZWN1cnNlICgmdmFyaWFudF93cml0ZXIsICZpbm5lcl93cml0ZXIpKQotICAgICAgICBnb3RvIG9vbTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBEQnVzQmFzaWNWYWx1ZSB2YWx1ZTsKLQotICAgICAgLyogV2UgZWxpbWluYXRlZCBhbGwgdGhlIGNvbnRhaW5lciB0eXBlcyBhYm92ZSAqLwotICAgICAgX2RidXNfYXNzZXJ0IChkYnVzX3R5cGVfaXNfYmFzaWMgKHR5cGUpKTsKLQotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljIChyZWFkZXIsICZ2YWx1ZSk7Ci0KLSAgICAgIGlmICghX2RidXNfdHlwZV93cml0ZXJfd3JpdGVfYmFzaWMgKCZ2YXJpYW50X3dyaXRlciwgdHlwZSwgJnZhbHVlKSkKLSAgICAgICAgZ290byBvb207Ci0gICAgfQotCi0gIF9kYnVzX3N0cmluZ19mcmVlICgmY29udGFpbmVkX3NpZ25hdHVyZSk7Ci0gIHJldHVybiBzZWxmOwotCi1vb206Ci0gIGlmIChzZWxmICE9IE5VTEwpCi0gICAgewotICAgICAgaWYgKGRhdGFfaW5pdGVkKQotICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnNlbGYtPmRhdGEpOwotCi0gICAgICBkYnVzX2ZyZWUgKHNlbGYpOwotICAgIH0KLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmNvbnRhaW5lZF9zaWduYXR1cmUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBSZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiB0aGUgaXRlbSBzdG9yZWQgaW4gc2VsZi4gSXQgaXMgYSBzaW5nbGUgY29tcGxldGUKLSAqIHR5cGUuCi0gKgotICogQHBhcmFtIHNlbGYgdGhlIHZhcmlhbnQKLSAqLwotY29uc3QgY2hhciAqCi1fZGJ1c192YXJpYW50X2dldF9zaWduYXR1cmUgKERCdXNWYXJpYW50ICpzZWxmKQotewotICB1bnNpZ25lZCBjaGFyIGxlbjsKLSAgY29uc3QgY2hhciAqcmV0OwotCi0gIF9kYnVzX2Fzc2VydCAoc2VsZiAhPSBOVUxMKTsKLQotICAvKiBIZXJlIHdlIG1ha2UgdXNlIG9mIHRoZSBmYWN0IHRoYXQgdGhlIHNlcmlhbGl6YXRpb24gb2YgYSB2YXJpYW50IHN0YXJ0cwotICAgKiB3aXRoIHRoZSAxLWJ5dGUgbGVuZ3RoLCB0aGVuIHRoYXQgbWFueSBieXRlcyBvZiBzaWduYXR1cmUsIHRoZW4gXDAuICovCi0gIGxlbiA9IF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAoJnNlbGYtPmRhdGEsIDApOwotICByZXQgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuICgmc2VsZi0+ZGF0YSwgMSwgbGVuKTsKLSAgX2RidXNfYXNzZXJ0IChzdHJsZW4gKHJldCkgPT0gbGVuKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDb3B5IHRoZSBzaW5nbGUgRC1CdXMgbWVzc2FnZSBpdGVtIGZyb20gc2VsZiBpbnRvIHdyaXRlci4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaWYgd3JpdGVyIHBvaW50cyBpbnRvIHRoZSBib2R5IG9mIGFuIGVtcHR5IG1lc3NhZ2UgYW5kIHNlbGYgaGFzCi0gKiBzaWduYXR1cmUgI0RCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLCB0aGVuIHRoZSBtZXNzYWdlIHdpbGwKLSAqIGhhdmUgc2lnbmF0dXJlICNEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqCi0gKiBAcGFyYW0gc2VsZiB0aGUgdmFyaWFudAotICogQHBhcmFtIHdyaXRlciB0aGUgcGxhY2UgdG8gd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YXJpYW50Ci0gKiBAcmV0dXJucyAjVFJVRSBvbiBzdWNjZXNzLCAjRkFMU0UgaWYgb3V0IG9mIG1lbW9yeQotICovCi1kYnVzX2Jvb2xfdAotX2RidXNfdmFyaWFudF93cml0ZSAoREJ1c1ZhcmlhbnQgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKndyaXRlcikKLXsKLSAgLyogJ3YnICovCi0gIERCdXNTdHJpbmcgdmFyaWFudF9zaWduYXR1cmU7Ci0gIC8qIFBvaW50cyB0byB0aGUgc2luZ2xlIGl0ZW0gaW4gc2VsZiAqLwotICBEQnVzVHlwZVJlYWRlciB2YXJpYW50X3JlYWRlcjsKLSAgLyogUG9pbnRzIHRvIHRoZSBzaW5nbGUgaXRlbSAob2Ygd2hhdGV2ZXIgdHlwZSkgaW5zaWRlIHRoZSB2YXJpYW50ICovCi0gIERCdXNUeXBlUmVhZGVyIHJlYWRlcjsKLSAgLyogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHdlIHdpbGwgY29weSByZWFkZXIgKi8KLSAgREJ1c01lc3NhZ2VSZWFsSXRlciAqcmVhbF93cml0ZXIgPSAoREJ1c01lc3NhZ2VSZWFsSXRlciAqKSB3cml0ZXI7Ci0gIGRidXNfYm9vbF90IHJldDsKLQotICBfZGJ1c19hc3NlcnQgKHNlbGYgIT0gTlVMTCk7Ci0gIF9kYnVzX2Fzc2VydCAoX2RidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9jaGVjayAocmVhbF93cml0ZXIpKTsKLSAgX2RidXNfYXNzZXJ0IChyZWFsX3dyaXRlci0+aXRlcl90eXBlID09IERCVVNfTUVTU0FHRV9JVEVSX1RZUEVfV1JJVEVSKTsKLQotICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJnZhcmlhbnRfc2lnbmF0dXJlLCBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcpOwotICBfZGJ1c190eXBlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBEQlVTX0NPTVBJTEVSX0JZVEVfT1JERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJpYW50X3NpZ25hdHVyZSwgMCwgJnNlbGYtPmRhdGEsIDApOwotICBfZGJ1c190eXBlX3JlYWRlcl9yZWN1cnNlICgmcmVhZGVyLCAmdmFyaWFudF9yZWFkZXIpOwotCi0gIGlmICghX2RidXNfbWVzc2FnZV9pdGVyX29wZW5fc2lnbmF0dXJlIChyZWFsX3dyaXRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldCA9IF9kYnVzX3R5cGVfd3JpdGVyX3dyaXRlX3JlYWRlciAoJnJlYWxfd3JpdGVyLT51LndyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyaWFudF9yZWFkZXIpOwotCi0gIGlmICghX2RidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX3NpZ25hdHVyZSAocmVhbF93cml0ZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gcmV0OwotfQotCi1pbnQKLV9kYnVzX3ZhcmlhbnRfZ2V0X2xlbmd0aCAoREJ1c1ZhcmlhbnQgKnNlbGYpCi17Ci0gIF9kYnVzX2Fzc2VydCAoc2VsZiAhPSBOVUxMKTsKLSAgcmV0dXJuIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc2VsZi0+ZGF0YSk7Ci19Ci0KLWNvbnN0IERCdXNTdHJpbmcgKgotX2RidXNfdmFyaWFudF9wZWVrIChEQnVzVmFyaWFudCAqc2VsZikKLXsKLSAgX2RidXNfYXNzZXJ0IChzZWxmICE9IE5VTEwpOwotICByZXR1cm4gJnNlbGYtPmRhdGE7Ci19Ci0KLXZvaWQKLV9kYnVzX3ZhcmlhbnRfZnJlZSAoREJ1c1ZhcmlhbnQgKnNlbGYpCi17Ci0gIF9kYnVzX2Fzc2VydCAoc2VsZiAhPSBOVUxMKTsKLSAgX2RidXNfc3RyaW5nX2ZyZWUgKCZzZWxmLT5kYXRhKTsKLSAgZGJ1c19mcmVlIChzZWxmKTsKLX0KLQogLyoqIEB9ICovCiAKIC8qIHRlc3RzIGluIGRidXMtbWVzc2FnZS11dGlsLmMgKi8KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1tZXNzYWdlLmggYi9kYnVzL2RidXMtbWVzc2FnZS5oCmluZGV4IDhhOWQ1N2EuLmFjM2U0MDggMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1tZXNzYWdlLmgKKysrIGIvZGJ1cy9kYnVzLW1lc3NhZ2UuaApAQCAtNDIsMTcgKzQyLDcgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBEQnVzTWVzc2FnZSBEQnVzTWVzc2FnZTsKLS8qKgotICogT3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGEgbWVzc2FnZSBpdGVyYXRvci4gQ2FuIGJlIGNvcGllZCBieSB2YWx1ZSBhbmQKLSAqIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suCi0gKgotICogQSBEQnVzTWVzc2FnZUl0ZXIgdXN1YWxseSBjb250YWlucyBubyBhbGxvY2F0ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGVyZQotICogaXMgb25lIHNwZWNpYWwgY2FzZTogYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8KLSAqIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCksIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcKLSAqIGVpdGhlciBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoKSBvcgotICogZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIoKSBleGFjdGx5IG9uY2UsIHdpdGggdGhlIHNhbWUgcGFpcgotICogb2YgaXRlcmF0b3JzLgotICovCisvKiogT3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGEgbWVzc2FnZSBpdGVyYXRvci4gQ2FuIGJlIGNvcGllZCBieSB2YWx1ZSwgYW5kIGNvbnRhaW5zIG5vIGFsbG9jYXRlZCBtZW1vcnkgc28gbmV2ZXIgbmVlZHMgdG8gYmUgZnJlZWQgYW5kIGNhbiBiZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiAqLwogdHlwZWRlZiBzdHJ1Y3QgREJ1c01lc3NhZ2VJdGVyIERCdXNNZXNzYWdlSXRlcjsKIAogLyoqCkBAIC03NiwyOCArNjYsNiBAQAogICB2b2lkICpwYWQzOyAgICAgICAgICAgLyoqPCBEb24ndCB1c2UgdGhpcyAqLwogfTsKIAotLyoqCi0gKiBBIG1lc3NhZ2UgaXRlcmF0b3IgZm9yIHdoaWNoIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyX2lmX29wZW4oKQotICogaXMgdGhlIG9ubHkgdmFsaWQgb3BlcmF0aW9uLgotICovCi0jZGVmaW5lIERCVVNfTUVTU0FHRV9JVEVSX0lOSVRfQ0xPU0VEIFwKLXsgXAotICBOVUxMLCAvKiBkdW1teTEgKi8gXAotICBOVUxMLCAvKiBkdW1teTIgKi8gXAotICAwLCAvKiBkdW1teTMgKi8gXAotICAwLCAvKiBkdW1teTQgKi8gXAotICAwLCAvKiBkdW1teTUgKi8gXAotICAwLCAvKiBkdW1teTYgKi8gXAotICAwLCAvKiBkdW1teTcgKi8gXAotICAwLCAvKiBkdW1teTggKi8gXAotICAwLCAvKiBkdW1teTkgKi8gXAotICAwLCAvKiBkdW1teTEwICovIFwKLSAgMCwgLyogZHVtbXkxMSAqLyBcCi0gIDAsIC8qIHBhZDEgKi8gXAotICBOVUxMLCAvKiBwYWQyICovIFwKLSAgTlVMTCAvKiBwYWQzICovIFwKLX0KLQogREJVU19FWFBPUlQKIERCdXNNZXNzYWdlKiBkYnVzX21lc3NhZ2VfbmV3ICAgICAgICAgICAgICAgKGludCAgICAgICAgICBtZXNzYWdlX3R5cGUpOwogREJVU19FWFBPUlQKQEAgLTExOSw3ICs4Nyw3IEBACiBEQnVzTWVzc2FnZSogZGJ1c19tZXNzYWdlX25ld19lcnJvcl9wcmludGYgIChEQnVzTWVzc2FnZSAqcmVwbHlfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqZXJyb3JfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICplcnJvcl9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIF9EQlVTX0dOVUNfUFJJTlRGICgzLCA0KTsKKwkJCQkJICAgICAuLi4pOwogCiBEQlVTX0VYUE9SVAogREJ1c01lc3NhZ2UqIGRidXNfbWVzc2FnZV9jb3B5ICAgICAgICAgICAgICAoY29uc3QgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpOwpAQCAtMjQwLDggKzIwOCw2IEBACiBkYnVzX2Jvb2xfdCBkYnVzX21lc3NhZ2VfY29udGFpbnNfdW5peF9mZHMgICAgKERCdXNNZXNzYWdlICptZXNzYWdlKTsKIAogREJVU19FWFBPUlQKLXZvaWQgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfY2xvc2VkICAgICAgICAoREJ1c01lc3NhZ2VJdGVyICppdGVyKTsKLURCVVNfRVhQT1JUCiBkYnVzX2Jvb2xfdCBkYnVzX21lc3NhZ2VfaXRlcl9pbml0ICAgICAgICAgICAgIChEQnVzTWVzc2FnZSAgICAgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgKml0ZXIpOwogREJVU19FWFBPUlQKQEAgLTMwMSwxMCArMjY3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICpzdWIpOwogCiBEQlVTX0VYUE9SVAotdm9pZCAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbiAoREJ1c01lc3NhZ2VJdGVyICppdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyICpzdWIpOwotCi1EQlVTX0VYUE9SVAogdm9pZCBkYnVzX21lc3NhZ2VfbG9jayAgICAoREJ1c01lc3NhZ2UgICptZXNzYWdlKTsKIAogREJVU19FWFBPUlQKQEAgLTM1MSwyNSArMzEzLDYgQEAKIGRidXNfYm9vbF90IGRidXNfbWVzc2FnZV9nZXRfYWxsb3dfaW50ZXJhY3RpdmVfYXV0aG9yaXphdGlvbiAoCiAgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpOwogCi0vKioKLSAqIENsZWFyIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlciB0aGF0IGNvbnRhaW5zIGEgI0RCdXNNZXNzYWdlLgotICogSWYgaXQgZG9lcyBub3QgY29udGFpbiAjTlVMTCwgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgcHJldmlvdXNseQotICogdGhlcmUgaXMgdW5yZWZlcmVuY2VkIHdpdGggZGJ1c19tZXNzYWdlX3VucmVmKCkuCi0gKgotICogVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gZGJ1c19jbGVhcl9jb25uZWN0aW9uKCk6IHNlZSB0aGF0IGZ1bmN0aW9uCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIEBwYXJhbSBwb2ludGVyX3RvX21lc3NhZ2UgQSBwb2ludGVyIHRvIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlci4KLSAqIHBvaW50ZXJfdG9fbWVzc2FnZSBtdXN0IG5vdCBiZSAjTlVMTCwgYnV0ICpwb2ludGVyX3RvX21lc3NhZ2UKLSAqIG1heSBiZSAjTlVMTC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1kYnVzX2NsZWFyX21lc3NhZ2UgKERCdXNNZXNzYWdlICoqcG9pbnRlcl90b19tZXNzYWdlKQotewotICBfZGJ1c19jbGVhcl9wb2ludGVyX2ltcGwgKERCdXNNZXNzYWdlLCBwb2ludGVyX3RvX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKTsKLX0KLQogLyoqIEB9ICovCiAKIERCVVNfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtbWlzYy5jIGIvZGJ1cy9kYnVzLW1pc2MuYwppbmRleCAyYmU1OGEyLi5hMmRhNTYyIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtbWlzYy5jCisrKyBiL2RidXMvZGJ1cy1taXNjLmMKQEAgLTY3LDEwICs2NywxMCBAQAogICogVGhlIFVVSUQgaXMgbm90IGEgVVVJRCBpbiB0aGUgc2Vuc2Ugb2YgUkZDNDEyMjsgdGhlIGRldGFpbHMKICAqIGFyZSBleHBsYWluZWQgaW4gdGhlIEQtQnVzIHNwZWNpZmljYXRpb24uCiAgKgotICogQHJldHVybnMgYSAzMi1ieXRlLWxvbmcgaGV4LWVuY29kZWQgVVVJRCBzdHJpbmcsIG9yICNOVUxMIG9uIGZhaWx1cmUKKyAqIEByZXR1cm5zIGEgMzItYnl0ZS1sb25nIGhleC1lbmNvZGVkIFVVSUQgc3RyaW5nLCBvciAjTlVMTCBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5CiAgKi8KLWNoYXIgKgotZGJ1c190cnlfZ2V0X2xvY2FsX21hY2hpbmVfaWQgKERCdXNFcnJvciAqZXJyb3IpCitjaGFyKgorZGJ1c19nZXRfbG9jYWxfbWFjaGluZV9pZCAodm9pZCkKIHsKICAgREJ1c1N0cmluZyB1dWlkOwogICBjaGFyICpzOwpAQCAtNzgsMjMgKzc4LDE4IEBACiAgIHMgPSBOVUxMOwogCiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZ1dWlkKSkKLSAgICB7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLCBOVUxMKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICByZXR1cm4gTlVMTDsKIAotICBpZiAoIV9kYnVzX2dldF9sb2NhbF9tYWNoaW5lX3V1aWRfZW5jb2RlZCAoJnV1aWQsIGVycm9yKSkKKyAgLyogVGhlIGRvY3VtZW50YXRpb24gc2F5cyBkYnVzX2dldF9sb2NhbF9tYWNoaW5lX2lkKCkgb25seSBmYWlscyBvbiBPT007CisgICAqIHRoaXMgY2FuIGFjdHVhbGx5IGFsc28gZmFpbCBpZiB0aGUgRC1CdXMgaW5zdGFsbGF0aW9uIGlzIGZhdWx0eQorICAgKiAobm8gVVVJRCkgKmFuZCogcmVhZGluZyBhIG5ldyByYW5kb20gVVVJRCBmYWlscywgYnV0IHdlIGhhdmUgbm8gd2F5CisgICAqIHRvIHJlcG9ydCB0aGF0ICovCisgIGlmICghX2RidXNfZ2V0X2xvY2FsX21hY2hpbmVfdXVpZF9lbmNvZGVkICgmdXVpZCwgTlVMTCkgfHwKKyAgICAgICFfZGJ1c19zdHJpbmdfc3RlYWxfZGF0YSAoJnV1aWQsICZzKSkKICAgICB7CiAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnV1aWQpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gIGlmICghX2RidXNfc3RyaW5nX3N0ZWFsX2RhdGEgKCZ1dWlkLCAmcykpCi0gICAgewotICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7Ci0gICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnV1aWQpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICBlbHNlCiAgICAgewogICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ1dWlkKTsKQEAgLTEwNCw0NiArOTksNiBAQAogfQogCiAvKioKLSAqIE9idGFpbnMgdGhlIG1hY2hpbmUgVVVJRCBvZiB0aGUgbWFjaGluZSB0aGlzIHByb2Nlc3MgaXMgcnVubmluZyBvbi4KLSAqCi0gKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCBkYnVzX2ZyZWUoKS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgI05VTEwgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQKLSAqIHRoZSBVVUlELCBvciBpZiB0aGUgVVVJRCBjb3VsZCBub3QgYmUgcmVhZCBiZWNhdXNlIHRoZSBELUJ1cwotICogbGlicmFyeSB3YXMgaW5zdGFsbGVkIGluY29ycmVjdGx5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIGEgd2FybmluZwotICogaXMgbG9nZ2VkLgotICoKLSAqIE90aGVyIHRoYW4gaXRzIGRlZmljaWVudCBlcnJvciByZXBvcnRpbmcsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHNhbWUgYXMKLSAqIGRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkKCkuCi0gKgotICogQHJldHVybnMgYSAzMi1ieXRlLWxvbmcgaGV4LWVuY29kZWQgVVVJRCBzdHJpbmcsIG9yICNOVUxMIG9uIGZhaWx1cmUKLSAqLwotY2hhciAqCi1kYnVzX2dldF9sb2NhbF9tYWNoaW5lX2lkICh2b2lkKQotewotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNoYXIgKnM7Ci0KLSAgcyA9IGRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkICgmZXJyb3IpOwotCi0gIC8qIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgZGJ1c19nZXRfbG9jYWxfbWFjaGluZV9pZCgpIG9ubHkgZmFpbHMgb24gT09NOwotICAgKiB0aGlzIGNhbiBhY3R1YWxseSBhbHNvIGZhaWwgaWYgdGhlIEQtQnVzIGluc3RhbGxhdGlvbiBpcyBmYXVsdHkKLSAgICogKG5vIFVVSUQpLCBidXQgd2UgaGF2ZSBubyBnb29kIHdheSB0byByZXBvcnQgdGhhdC4gSGlzdG9yaWNhbGx5LAotICAgKiBfZGJ1c19nZXRfbG9jYWxfbWFjaGluZV91dWlkX2VuY29kZWQgd2FzIHJlc3BvbnNpYmxlIGZvciBpc3N1aW5nIHRoZQotICAgKiB3YXJuaW5nOyBub3cgd2UgZG8gdGhhdCBoZXJlLiAqLwotICBpZiAocyA9PSBOVUxMKQotICAgIHsKLSAgICAgIGlmICghZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSkpCi0gICAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiJXMiLCBlcnJvci5tZXNzYWdlKTsKLQotICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gIHJldHVybiBzOwotfQotCi0vKioKICAqIEBkZWYgREJVU19NQUpPUl9WRVJTSU9OCiAgKgogICogVGhlIENPTVBJTEUgVElNRSBtYWpvciB2ZXJzaW9uIG9mIGxpYmRidXMsIHRoYXQgaXMsIHRoZSAiWCIgaW4gIlguWS5aIiwKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1taXNjLmggYi9kYnVzL2RidXMtbWlzYy5oCmluZGV4IGQ3OGQ3OTkuLjZlNzJkOWUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1taXNjLmgKKysrIGIvZGJ1cy9kYnVzLW1pc2MuaApAQCAtNDgsOSArNDgsNiBAQAogZGJ1c19ib29sX3QgZGJ1c19zZXRlbnYgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKnZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKIAotREJVU19FWFBPUlQKLWNoYXIgKmRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkIChEQnVzRXJyb3IgKmVycm9yKTsKLQogLyoqIEB9ICovCiAKIERCVVNfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtbm9uY2UuYyBiL2RidXMvZGJ1cy1ub25jZS5jCmluZGV4IDAwMjU1ZDMuLjNjMGY2ZjMgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1ub25jZS5jCisrKyBiL2RidXMvZGJ1cy1ub25jZS5jCkBAIC00MywyMCArNDMsNiBAQAogCiAgIG5sZWZ0ID0gMTY7CiAKLSAgLyogVGhpcyBpcyBhIHRyaWNrIHRvIG1ha2UgaXQgc2FmZSB0byBjYWxsIF9kYnVzX3N0cmluZ19mcmVlIG9uIHRoZXNlCi0gICAqIHN0cmluZ3MgZHVyaW5nIGVycm9yIHVud2luZGluZywgZXZlbiBpZiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlbQotICAgKiBmYWlscy4gQSBjb25zdGFudCBEQnVzU3RyaW5nIGlzIGNvbnNpZGVyZWQgdG8gYmUgdmFsaWQgdG8gImZyZWUiLAotICAgKiBldmVuIHRob3VnaCB0aGVyZSBpcyBub3RoaW5nIHRvIGZyZWUgKG9mIGNvdXJzZSB0aGUgZnJlZSBvcGVyYXRpb24KLSAgICogaXMgdHJpdmlhbCwgYmVjYXVzZSBpdCBkb2VzIG5vdCBvd24gaXRzIG93biBidWZmZXIpOyBidXQKLSAgICogdW5saWtlIGEgbXV0YWJsZSBEQnVzU3RyaW5nLCBpbml0aWFsaXppbmcgYSBjb25zdGFudCBEQnVzU3RyaW5nCi0gICAqIGNhbm5vdCBmYWlsLgotICAgKgotICAgKiBXZSBtdXN0IHN1Y2Nlc3NmdWxseSByZS1pbml0aWFsaXplIHRoZSBzdHJpbmdzIHRvIGJlIG11dGFibGUgYmVmb3JlCi0gICAqIHdyaXRpbmcgdG8gdGhlbSwgb2YgY291cnNlLgotICAgKi8KLSAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZidWZmZXIsICIiKTsKLSAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZwLCAiIik7Ci0KICAgaWYgKCAgICFfZGJ1c19zdHJpbmdfaW5pdCAoJmJ1ZmZlcikKICAgICAgIHx8ICFfZGJ1c19zdHJpbmdfaW5pdCAoJnApICkgewogICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLCBOVUxMKTsKQEAgLTc4LDcgKzY0LDcgQEAKICAgICAgICAgX2RidXNfc2xlZXBfbWlsbGlzZWNvbmRzICgxMDApOwogICAgICAgZWxzZSBpZiAobj09LTEpCiAgICAgICAgIHsKLSAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfSU9fRVJST1IsICJDb3VsZCBub3QgcmVhZCBub25jZSBmcm9tIHNvY2tldCAoZmQ9JSIgREJVU19TT0NLRVRfRk9STUFUICIpIiwgX2RidXNfc29ja2V0X3ByaW50YWJsZSAoZmQpKTsKKyAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfSU9fRVJST1IsICJDb3VsZCBub3QgcmVhZCBub25jZSBmcm9tIHNvY2tldCAoZmQ9JWQpIiwgZmQgKTsKICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnApOwogICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmYnVmZmVyKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC04Nyw3ICs3Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnApOwogICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmYnVmZmVyKTsKLSAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfSU9fRVJST1IsICJDb3VsZCBub3QgcmVhZCBub25jZSBmcm9tIHNvY2tldCAoZmQ9JSIgREJVU19TT0NLRVRfRk9STUFUICIpIiwgX2RidXNfc29ja2V0X3ByaW50YWJsZSAoZmQpKTsKKyAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfSU9fRVJST1IsICJDb3VsZCBub3QgcmVhZCBub25jZSBmcm9tIHNvY2tldCAoZmQ9JWQpIiwgZmQgKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTEwNSw3ICs5MSw3IEBACiAKICAgcmVzdWx0ID0gIF9kYnVzX3N0cmluZ19lcXVhbF9sZW4gKCZidWZmZXIsIG5vbmNlLCAxNik7CiAgIGlmICghcmVzdWx0KQotICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVELCAiTm9uY2VzIGRvIG5vdCBtYXRjaCwgYWNjZXNzIGRlbmllZCAoZmQ9JSIgREJVU19TT0NLRVRfRk9STUFUICIpIiwgX2RidXNfc29ja2V0X3ByaW50YWJsZSAoZmQpKTsKKyAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfQUNDRVNTX0RFTklFRCwgIk5vbmNlcyBkbyBub3QgbWF0Y2gsIGFjY2VzcyBkZW5pZWQgKGZkPSVkKSIsIGZkICk7CiAKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZwKTsKICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZidWZmZXIpOwpAQCAtMTY1LDM2ICsxNTEsMjQgQEAKIERCdXNTb2NrZXQKIF9kYnVzX2FjY2VwdF93aXRoX25vbmNlZmlsZSAoREJ1c1NvY2tldCBsaXN0ZW5fZmQsIGNvbnN0IERCdXNOb25jZUZpbGUgKm5vbmNlZmlsZSkKIHsKLSAgREJ1c1NvY2tldCBmZCA9IF9kYnVzX3NvY2tldF9nZXRfaW52YWxpZCAoKTsKKyAgREJ1c1NvY2tldCBmZDsKICAgREJ1c1N0cmluZyBub25jZTsKIAogICBfZGJ1c19hc3NlcnQgKG5vbmNlZmlsZSAhPSBOVUxMKTsKLQotICAvKiBNYWtlIGl0IHZhbGlkIHRvICJmcmVlIiB0aGlzIGV2ZW4gaWYgX2RidXNfc3RyaW5nX2luaXQoKSBydW5zCi0gICAqIG91dCBvZiBtZW1vcnk6IHNlZSBjb21tZW50IGluIGRvX2NoZWNrX25vbmNlKCkgKi8KLSAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZub25jZSwgIiIpOwotCiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZub25jZSkpCi0gICAgZ290byBvdXQ7Ci0KKyAgICByZXR1cm4gX2RidXNfc29ja2V0X2dldF9pbnZhbGlkICgpOwogICAvL1BFTkRJTkcoa2RhYik6IHNldCBiZXR0ZXIgZXJyb3JzCiAgIGlmIChfZGJ1c19yZWFkX25vbmNlIChfZGJ1c19ub25jZWZpbGVfZ2V0X3BhdGgobm9uY2VmaWxlKSwgJm5vbmNlLCBOVUxMKSAhPSBUUlVFKQotICAgIGdvdG8gb3V0OwotCisgICAgcmV0dXJuIF9kYnVzX3NvY2tldF9nZXRfaW52YWxpZCAoKTsKICAgZmQgPSBfZGJ1c19hY2NlcHQgKGxpc3Rlbl9mZCk7Ci0KICAgaWYgKCFfZGJ1c19zb2NrZXRfaXNfdmFsaWQgKGZkKSkKLSAgICBnb3RvIG91dDsKLQorICAgIHJldHVybiBmZDsKICAgaWYgKGRvX2NoZWNrX25vbmNlKGZkLCAmbm9uY2UsIE5VTEwpICE9IFRSVUUpIHsKICAgICBfZGJ1c192ZXJib3NlICgibm9uY2UgY2hlY2sgZmFpbGVkLiBDbG9zaW5nIHNvY2tldC5cbiIpOwogICAgIF9kYnVzX2Nsb3NlX3NvY2tldChmZCwgTlVMTCk7Ci0gICAgX2RidXNfc29ja2V0X2ludmFsaWRhdGUgKCZmZCk7Ci0gICAgZ290byBvdXQ7CisgICAgcmV0dXJuIF9kYnVzX3NvY2tldF9nZXRfaW52YWxpZCAoKTsKICAgfQogCi1vdXQ6Ci0gIF9kYnVzX3N0cmluZ19mcmVlICgmbm9uY2UpOwogICByZXR1cm4gZmQ7CiB9CiAKQEAgLTI3MSw5ICsyNDUsOCBAQAogICAgIHsKICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19lcnJvcl9mcm9tX3N5c3RlbV9lcnJubyAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNlbmQgbm9uY2UgKGZkPSUiIERCVVNfU09DS0VUX0ZPUk1BVCAiKTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3NvY2tldF9wcmludGFibGUgKGZkKSwKLSAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJlcnJvcl9mcm9tX2Vycm5vICgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNlbmQgbm9uY2UgKGZkPSVkKTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgIGZkLCBfZGJ1c19zdHJlcnJvcl9mcm9tX2Vycm5vICgpKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTI5MiwxMiArMjY1LDYgQEAKIAogICAgIF9kYnVzX2Fzc2VydCAobm9uY2VmaWxlKTsKIAotICAgIC8qIE1ha2UgaXQgdmFsaWQgdG8gImZyZWUiIHRoZXNlIGV2ZW4gaWYgX2RidXNfc3RyaW5nX2luaXQoKSBydW5zCi0gICAgICogb3V0IG9mIG1lbW9yeTogc2VlIGNvbW1lbnQgaW4gZG9fY2hlY2tfbm9uY2UoKSAqLwotICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmcmFuZG9tU3RyLCAiIik7Ci0gICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZub25jZWZpbGUtPmRpciwgIiIpOwotICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmbm9uY2VmaWxlLT5wYXRoLCAiIik7Ci0KICAgICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmcmFuZG9tU3RyKSkKICAgICAgIHsKICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7CkBAIC0zNjcsNyArMzM0LDcgQEAKIAogICAgIHJldHVybiBUUlVFOwogICBvbl9lcnJvcjoKLSAgICBpZiAodXNlX3N1YmRpciAmJiBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJm5vbmNlZmlsZS0+ZGlyKSAhPSAwKQorICAgIGlmICh1c2Vfc3ViZGlyKQogICAgICAgX2RidXNfZGVsZXRlX2RpcmVjdG9yeSAoJm5vbmNlZmlsZS0+ZGlyLCBOVUxMKTsKICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJm5vbmNlZmlsZS0+ZGlyKTsKICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJm5vbmNlZmlsZS0+cGF0aCk7CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtb2JqZWN0LXRyZWUuYyBiL2RidXMvZGJ1cy1vYmplY3QtdHJlZS5jCmluZGV4IGFiNWRmMzkuLmUyYTNiNzMgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1vYmplY3QtdHJlZS5jCisrKyBiL2RidXMvZGJ1cy1vYmplY3QtdHJlZS5jCkBAIC02NDcsNyArNjQ3LDcgQEAKICNpZm5kZWYgREJVU19ESVNBQkxFX0NIRUNLUwogICBpZiAoZm91bmRfc3VidHJlZSA9PSBGQUxTRSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiQXR0ZW1wdGVkIHRvIHVucmVnaXN0ZXIgcGF0aCAocGF0aFswXSA9ICVzIHBhdGhbMV0gPSAlcykgd2hpY2ggaXNuJ3QgcmVnaXN0ZXJlZCIsCisgICAgICBfZGJ1c193YXJuICgiQXR0ZW1wdGVkIHRvIHVucmVnaXN0ZXIgcGF0aCAocGF0aFswXSA9ICVzIHBhdGhbMV0gPSAlcykgd2hpY2ggaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKICAgICAgICAgICAgICAgICAgIHBhdGhbMF0gPyBwYXRoWzBdIDogIm51bGwiLAogICAgICAgICAgICAgICAgICAgKHBhdGhbMF0gJiYgcGF0aFsxXSkgPyBwYXRoWzFdIDogIm51bGwiKTsKICAgICAgIGdvdG8gdW5sb2NrOyAgICAKQEAgLTE1OTIsNiArMTU5MiwxNCBAQAogICByZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRpYyBzaXplX3QKK3N0cmluZ19hcnJheV9sZW5ndGggKGNvbnN0IGNoYXIgKiphcnJheSkKK3sKKyAgc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGFycmF5W2ldOyBpKyspIDsKKyAgcmV0dXJuIGk7Cit9CisKIHR5cGVkZWYgc3RydWN0CiB7CiAgIGNvbnN0IGNoYXIgKnBhdGg7CkBAIC0xNjA5LDggKzE2MTcsNiBAQAogICB7ICIvZm9vL2Jhci90aGlzL2lzL2xvbmdlciIsIHsgImZvbyIsICJiYXIiLCAidGhpcyIsICJpcyIsICJsb25nZXIiLCBOVUxMIH0gfQogfTsKIAotLyogUmV0dXJuIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gT09NLCBkaWUgd2l0aCBhbiBhc3NlcnRpb24gZmFpbHVyZQotICogb24gZmFpbHVyZS4gKi8KIHN0YXRpYyBkYnVzX2Jvb2xfdAogcnVuX2RlY29tcG9zZV90ZXN0cyAodm9pZCkKIHsKQEAgLTE2MjgsMTUgKzE2MzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXN1bHQsICZyZXN1bHRfbGVuKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgICBleHBlY3RlZF9sZW4gPSBfZGJ1c19zdHJpbmdfYXJyYXlfbGVuZ3RoIChkZWNvbXBvc2VfdGVzdHNbaV0ucmVzdWx0KTsKKyAgICAgIGV4cGVjdGVkX2xlbiA9IHN0cmluZ19hcnJheV9sZW5ndGggKGRlY29tcG9zZV90ZXN0c1tpXS5yZXN1bHQpOwogICAgICAgCi0gICAgICBpZiAocmVzdWx0X2xlbiAhPSAoaW50KSBfZGJ1c19zdHJpbmdfYXJyYXlfbGVuZ3RoICgoY29uc3QgY2hhcioqKXJlc3VsdCkgfHwKKyAgICAgIGlmIChyZXN1bHRfbGVuICE9IChpbnQpIHN0cmluZ19hcnJheV9sZW5ndGggKChjb25zdCBjaGFyKiopcmVzdWx0KSB8fAogICAgICAgICAgIGV4cGVjdGVkX2xlbiAhPSByZXN1bHRfbGVuIHx8CiAgICAgICAgICAgcGF0aF9jb250YWlucyAoZGVjb21wb3NlX3Rlc3RzW2ldLnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhcioqKSByZXN1bHQpICE9IFNUUl9FUVVBTCkKICAgICAgICAgewotICAgICAgICAgIGludCByZWFsX2xlbiA9IF9kYnVzX3N0cmluZ19hcnJheV9sZW5ndGggKChjb25zdCBjaGFyKiopcmVzdWx0KTsKLSAgICAgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgZGVjb21wb3NlIG9mICVzIHRvIGhhdmUgbGVuICVkLCByZXR1cm5lZCAlZCwgYXBwZWFycyB0byBoYXZlICVkIiwKKyAgICAgICAgICBpbnQgcmVhbF9sZW4gPSBzdHJpbmdfYXJyYXlfbGVuZ3RoICgoY29uc3QgY2hhcioqKXJlc3VsdCk7CisgICAgICAgICAgX2RidXNfd2FybiAoIkV4cGVjdGVkIGRlY29tcG9zZSBvZiAlcyB0byBoYXZlIGxlbiAlZCwgcmV0dXJuZWQgJWQsIGFwcGVhcnMgdG8gaGF2ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXBvc2VfdGVzdHNbaV0ucGF0aCwgZXhwZWN0ZWRfbGVuLCByZXN1bHRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgIHJlYWxfbGVuKTsKICAgICAgICAgICBfZGJ1c193YXJuICgiRGVjb21wb3NlIHJlc3VsdGVkIGluIGVsZW1lbnRzOiB7ICIpOwpAQCAtMTY0Nyw4ICsxNjUzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgKyAxKSA9PSByZWFsX2xlbiA/ICIiIDogIiwgIik7CiAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICBfZGJ1c193YXJuICgifSIpOwotICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoInBhdGggZGVjb21wb3NlIGZhaWxlZCIpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJ9XG4iKTsKKyAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJwYXRoIGRlY29tcG9zZSBmYWlsZWRcbiIpOwogICAgICAgICB9CiAKICAgICAgIGRidXNfZnJlZV9zdHJpbmdfYXJyYXkgKHJlc3VsdCk7CkBAIC0xNjcwLDggKzE2NzYsNiBAQAogICByZXR1cm4gZmluZF9zdWJ0cmVlX3JlY3Vyc2UgKHRyZWUtPnJvb3QsIHBhdGgsIEZBTFNFLCBOVUxMLCBOVUxMKTsKIH0KIAotLyogUmV0dXJucyBUUlVFIGlmIHRoZSByaWdodCB0aGluZyBoYXBwZW5zLCBidXQgdGhlIHJpZ2h0IHRoaW5nIG1pZ2h0Ci0gKiBiZSBPT00uICovCiBzdGF0aWMgZGJ1c19ib29sX3QKIG9iamVjdF90cmVlX3Rlc3RfaXRlcmF0aW9uICh2b2lkICpkYXRhKQogewpAQCAtMTY5Nyw3ICsxNzAxLDcgQEAKICAgZGJ1c19ib29sX3QgZXhhY3RfbWF0Y2g7CiAKICAgaWYgKCFydW5fZGVjb21wb3NlX3Rlc3RzICgpKQotICAgIHJldHVybiBUUlVFOyAvKiBPT00gaXMgT0sgKi8KKyAgICByZXR1cm4gRkFMU0U7CiAgIAogICB0cmVlID0gTlVMTDsKIApAQCAtMTg3MSw3ICsxODc1LDcgQEAKICAgICBfZGJ1c19vYmplY3RfdHJlZV9saXN0X3JlZ2lzdGVyZWRfdW5sb2NrZWQgKHRyZWUsIHBhdGgxLCAmY2hpbGRfZW50cmllcyk7CiAgICAgaWYgKGNoaWxkX2VudHJpZXMgIT0gTlVMTCkKICAgICAgIHsKLQluYiA9IF9kYnVzX3N0cmluZ19hcnJheV9sZW5ndGggKChjb25zdCBjaGFyKiopY2hpbGRfZW50cmllcyk7CisJbmIgPSBzdHJpbmdfYXJyYXlfbGVuZ3RoICgoY29uc3QgY2hhcioqKWNoaWxkX2VudHJpZXMpOwogCV9kYnVzX2Fzc2VydCAobmIgPT0gMSk7CiAJZGJ1c19mcmVlX3N0cmluZ19hcnJheSAoY2hpbGRfZW50cmllcyk7CiAgICAgICB9CkBAIC0xODc5LDcgKzE4ODMsNyBAQAogICAgIF9kYnVzX29iamVjdF90cmVlX2xpc3RfcmVnaXN0ZXJlZF91bmxvY2tlZCAodHJlZSwgcGF0aDIsICZjaGlsZF9lbnRyaWVzKTsKICAgICBpZiAoY2hpbGRfZW50cmllcyAhPSBOVUxMKQogICAgICAgewotCW5iID0gX2RidXNfc3RyaW5nX2FycmF5X2xlbmd0aCAoKGNvbnN0IGNoYXIqKiljaGlsZF9lbnRyaWVzKTsKKwluYiA9IHN0cmluZ19hcnJheV9sZW5ndGggKChjb25zdCBjaGFyKiopY2hpbGRfZW50cmllcyk7CiAJX2RidXNfYXNzZXJ0IChuYiA9PSAyKTsKIAlkYnVzX2ZyZWVfc3RyaW5nX2FycmF5IChjaGlsZF9lbnRyaWVzKTsKICAgICAgIH0KQEAgLTE4ODcsNyArMTg5MSw3IEBACiAgICAgX2RidXNfb2JqZWN0X3RyZWVfbGlzdF9yZWdpc3RlcmVkX3VubG9ja2VkICh0cmVlLCBwYXRoOCwgJmNoaWxkX2VudHJpZXMpOwogICAgIGlmIChjaGlsZF9lbnRyaWVzICE9IE5VTEwpCiAgICAgICB7Ci0JbmIgPSBfZGJ1c19zdHJpbmdfYXJyYXlfbGVuZ3RoICgoY29uc3QgY2hhcioqKWNoaWxkX2VudHJpZXMpOworCW5iID0gc3RyaW5nX2FycmF5X2xlbmd0aCAoKGNvbnN0IGNoYXIqKiljaGlsZF9lbnRyaWVzKTsKIAlfZGJ1c19hc3NlcnQgKG5iID09IDApOwogCWRidXNfZnJlZV9zdHJpbmdfYXJyYXkgKGNoaWxkX2VudHJpZXMpOwogICAgICAgfQpAQCAtMTg5NSw3ICsxODk5LDcgQEAKICAgICBfZGJ1c19vYmplY3RfdHJlZV9saXN0X3JlZ2lzdGVyZWRfdW5sb2NrZWQgKHRyZWUsIHJvb3QsICZjaGlsZF9lbnRyaWVzKTsKICAgICBpZiAoY2hpbGRfZW50cmllcyAhPSBOVUxMKQogICAgICAgewotCW5iID0gX2RidXNfc3RyaW5nX2FycmF5X2xlbmd0aCAoKGNvbnN0IGNoYXIqKiljaGlsZF9lbnRyaWVzKTsKKwluYiA9IHN0cmluZ19hcnJheV9sZW5ndGggKChjb25zdCBjaGFyKiopY2hpbGRfZW50cmllcyk7CiAJX2RidXNfYXNzZXJ0IChuYiA9PSAzKTsKIAlkYnVzX2ZyZWVfc3RyaW5nX2FycmF5IChjaGlsZF9lbnRyaWVzKTsKICAgICAgIH0KQEAgLTIzMTksOSArMjMyMywxMSBAQAogZGJ1c19ib29sX3QKIF9kYnVzX29iamVjdF90cmVlX3Rlc3QgKHZvaWQpCiB7Ci0gIHJldHVybiBfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoIm9iamVjdCB0cmVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHJlZV90ZXN0X2l0ZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKCJvYmplY3QgdHJlZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHJlZV90ZXN0X2l0ZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgIHJldHVybiBUUlVFOwogfQogCiAjZW5kaWYgLyogIURPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUyAqLwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC1pbnRlcm5hbC5oIGIvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC1pbnRlcm5hbC5oCmluZGV4IDRmMzc5YjQuLjM5M2U2NjAgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1wZW5kaW5nLWNhbGwtaW50ZXJuYWwuaAorKysgYi9kYnVzL2RidXMtcGVuZGluZy1jYWxsLWludGVybmFsLmgKQEAgLTQxLDE0ICs0MSwxMyBAQAogREJ1c0Nvbm5lY3Rpb24gKiBfZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2Nvbm5lY3Rpb25fYW5kX2xvY2sgICAgICAoREJ1c1BlbmRpbmdDYWxsICAgICpwZW5kaW5nKTsKIERCdXNDb25uZWN0aW9uICogX2RidXNfcGVuZGluZ19jYWxsX2dldF9jb25uZWN0aW9uX3VubG9ja2VkICAgICAgKERCdXNQZW5kaW5nQ2FsbCAgICAqcGVuZGluZyk7CiBkYnVzX2Jvb2xfdCAgICAgIF9kYnVzX3BlbmRpbmdfY2FsbF9nZXRfY29tcGxldGVkX3VubG9ja2VkICAgICAgIChEQnVzUGVuZGluZ0NhbGwgICAgKnBlbmRpbmcpOwotCi12b2lkICAgICAgICAgICAgIF9kYnVzX3BlbmRpbmdfY2FsbF9zdGFydF9jb21wbGV0aW9uX3VubG9ja2VkICAgIChEQnVzUGVuZGluZ0NhbGwgICAgKnBlbmRpbmcpOwotdm9pZCAgICAgICAgICAgICBfZGJ1c19wZW5kaW5nX2NhbGxfZmluaXNoX2NvbXBsZXRpb24gICAgICAgICAgICAoREJ1c1BlbmRpbmdDYWxsICAgICpwZW5kaW5nKTsKLQordm9pZCAgICAgICAgICAgICBfZGJ1c19wZW5kaW5nX2NhbGxfY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAoREJ1c1BlbmRpbmdDYWxsICAgICpwZW5kaW5nKTsKIHZvaWQgICAgICAgICAgICAgX2RidXNfcGVuZGluZ19jYWxsX3NldF9yZXBseV91bmxvY2tlZCAgICAgICAgICAgKERCdXNQZW5kaW5nQ2FsbCAgICAqcGVuZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlICAgICAgICAqbWVzc2FnZSk7CiB2b2lkICAgICAgICAgICAgIF9kYnVzX3BlbmRpbmdfY2FsbF9xdWV1ZV90aW1lb3V0X2Vycm9yX3VubG9ja2VkIChEQnVzUGVuZGluZ0NhbGwgICAgKnBlbmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzQ29ubmVjdGlvbiAgICAgKmNvbm5lY3Rpb24pOwordm9pZCAgICAgICAgICAgICBfZGJ1c19wZW5kaW5nX2NhbGxfc2V0X3JlcGx5X3NlcmlhbF91bmxvY2tlZCAgICAoREJ1c1BlbmRpbmdDYWxsICAgICpwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c191aW50MzJfdCAgICAgICBzZXJpYWwpOwogZGJ1c19ib29sX3QgICAgICBfZGJ1c19wZW5kaW5nX2NhbGxfc2V0X3RpbWVvdXRfZXJyb3JfdW5sb2NrZWQgICAoREJ1c1BlbmRpbmdDYWxsICAgICpwZW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c01lc3NhZ2UgICAgICAgICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c191aW50MzJfdCAgICAgICBzZXJpYWwpOwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC5jIGIvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC5jCmluZGV4IGQwNTdiNDkuLmJlNTM0MTAgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1wZW5kaW5nLWNhbGwuYworKysgYi9kYnVzL2RidXMtcGVuZGluZy1jYWxsLmMKQEAgLTc1LDE2ICs3NSw4IEBACiAgIAogICBkYnVzX3VpbnQzMl90IHJlcGx5X3NlcmlhbDsgICAgICAgICAgICAgICAgICAgICAvKio8IEV4cGVjdGVkIHNlcmlhbCBvZiByZXBseSAqLwogCi0gIC8qKgotICAgKiBUUlVFIGlmIHNvbWUgdGhyZWFkIGhhcyB0YWtlbiByZXNwb25zaWJpbGl0eSBmb3IgY29tcGxldGluZyB0aGlzCi0gICAqIHBlbmRpbmcgY2FsbDogZWl0aGVyIHRoZSBwZW5kaW5nIGNhbGwgaGFzIGNvbXBsZXRlZCwgb3IgaXQgaXMgYWJvdXQKLSAgICogdG8gYmUgY29tcGxldGVkLiBQcm90ZWN0ZWQgYnkgdGhlIGNvbm5lY3Rpb24gbG9jay4KLSAgICovCi0gIHVuc2lnbmVkIGludCBjb21wbGV0ZWQgOiAxOwotICAvKioKLSAgICogVFJVRSBpZiB3ZSBoYXZlIGFkZGVkIHRoZSB0aW1lb3V0LiBQcm90ZWN0ZWQgYnkgdGhlIGNvbm5lY3Rpb24gbG9jay4KLSAgICovCi0gIHVuc2lnbmVkIGludCB0aW1lb3V0X2FkZGVkIDogMTsKKyAgdW5zaWduZWQgaW50IGNvbXBsZXRlZCA6IDE7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBUUlVFIGlmIGNvbXBsZXRlZCAqLworICB1bnNpZ25lZCBpbnQgdGltZW91dF9hZGRlZCA6IDE7ICAgICAgICAgICAgICAgICAvKio8IEhhdmUgYWRkZWQgdGhlIHRpbWVvdXQgKi8KIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDIsMzYgKzE5NCwxOCBAQAogfQogCiAvKioKLSAqIFNldHMgdGhlIHBlbmRpbmcgY2FsbCB0byBjb21wbGV0ZWQKLSAqCi0gKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgY29ubmVjdGlvbiBsb2NrIGhlbGQsIHRvIHByb3RlY3QKLSAqIHBlbmRpbmctPmNvbXBsZXRlZC4gSXQgbXVzdCBiZSBwYWlyZWQgd2l0aCBhIGNhbGwgdG8KLSAqIF9kYnVzX3BlbmRpbmdfY2FsbF9maW5pc2hfY29tcGxldGlvbigpIGFmdGVyIHRoZSBjb25uZWN0aW9uIGxvY2sgaGFzCi0gKiBiZWVuIHJlbGVhc2VkLgorICogQ2FsbHMgbm90aWZpZXIgZnVuY3Rpb24gZm9yIHRoZSBwZW5kaW5nIGNhbGwKKyAqIGFuZCBzZXRzIHRoZSBjYWxsIHRvIGNvbXBsZXRlZC4KICAqCiAgKiBAcGFyYW0gcGVuZGluZyB0aGUgcGVuZGluZyBjYWxsCisgKiAKICAqLwogdm9pZAotX2RidXNfcGVuZGluZ19jYWxsX3N0YXJ0X2NvbXBsZXRpb25fdW5sb2NrZWQgKERCdXNQZW5kaW5nQ2FsbCAqcGVuZGluZykKK19kYnVzX3BlbmRpbmdfY2FsbF9jb21wbGV0ZSAoREJ1c1BlbmRpbmdDYWxsICpwZW5kaW5nKQogewogICBfZGJ1c19hc3NlcnQgKCFwZW5kaW5nLT5jb21wbGV0ZWQpOwogICAKICAgcGVuZGluZy0+Y29tcGxldGVkID0gVFJVRTsKLX0KLQotLyoqCi0gKiBDYWxsIHRoZSBub3RpZmllciBmdW5jdGlvbiBmb3IgdGhlIHBlbmRpbmcgY2FsbC4KLSAqCi0gKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgY29ubmVjdGlvbiBsb2NrIGhhcyBiZWVuCi0gKiByZWxlYXNlZCwgYW5kIG11c3QgYmUgcGFpcmVkIHdpdGggYSBjYWxsIHRvCi0gKiBfZGJ1c19wZW5kaW5nX2NhbGxfc3RhcnRfY29tcGxldGlvbl91bmxvY2tlZCgpLgotICoKLSAqIEBwYXJhbSBwZW5kaW5nIHRoZSBwZW5kaW5nIGNhbGwKLSAqLwotdm9pZAotX2RidXNfcGVuZGluZ19jYWxsX2ZpbmlzaF9jb21wbGV0aW9uIChEQnVzUGVuZGluZ0NhbGwgKnBlbmRpbmcpCi17Ci0gIF9kYnVzX2Fzc2VydCAocGVuZGluZy0+Y29tcGxldGVkKTsKIAogICBpZiAocGVuZGluZy0+ZnVuY3Rpb24pCiAgICAgewpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC5oIGIvZGJ1cy9kYnVzLXBlbmRpbmctY2FsbC5oCmluZGV4IDU1OTMzOTcuLjhhMzdlYzAgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1wZW5kaW5nLWNhbGwuaAorKysgYi9kYnVzL2RidXMtcGVuZGluZy1jYWxsLmgKQEAgLTcyLDI1ICs3Miw2IEBACiB2b2lkKiAgICAgICBkYnVzX3BlbmRpbmdfY2FsbF9nZXRfZGF0YSAgICAgICAgICAgKERCdXNQZW5kaW5nQ2FsbCAgKnBlbmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfaW50MzJfdCAgICAgIHNsb3QpOwogCi0vKioKLSAqIENsZWFyIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlciB0aGF0IGNvbnRhaW5zIGEgI0RCdXNQZW5kaW5nQ2FsbC4KLSAqIElmIGl0IGRvZXMgbm90IGNvbnRhaW4gI05VTEwsIHRoZSBwZW5kaW5nIGNhbGwgdGhhdCB3YXMgcHJldmlvdXNseQotICogdGhlcmUgaXMgdW5yZWZlcmVuY2VkIHdpdGggZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYoKS4KLSAqCi0gKiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBkYnVzX2NsZWFyX2Nvbm5lY3Rpb24oKTogc2VlIHRoYXQgZnVuY3Rpb24KLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQHBhcmFtIHBvaW50ZXJfdG9fcGVuZGluZ19jYWxsIEEgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9yIHN0cnVjdCBtZW1iZXIuCi0gKiBwb2ludGVyX3RvX3BlbmRpbmdfY2FsbCBtdXN0IG5vdCBiZSAjTlVMTCwgYnV0ICpwb2ludGVyX3RvX3BlbmRpbmdfY2FsbAotICogbWF5IGJlICNOVUxMLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRidXNfY2xlYXJfcGVuZGluZ19jYWxsIChEQnVzUGVuZGluZ0NhbGwgKipwb2ludGVyX3RvX3BlbmRpbmdfY2FsbCkKLXsKLSAgX2RidXNfY2xlYXJfcG9pbnRlcl9pbXBsIChEQnVzUGVuZGluZ0NhbGwsIHBvaW50ZXJfdG9fcGVuZGluZ19jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfcGVuZGluZ19jYWxsX3VucmVmKTsKLX0KLQogLyoqIEB9ICovCiAKIERCVVNfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc2VydmVyLXByb3RlY3RlZC5oIGIvZGJ1cy9kYnVzLXNlcnZlci1wcm90ZWN0ZWQuaAppbmRleCA1NjY0YjJiLi5mNjEzYmYzIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc2VydmVyLXByb3RlY3RlZC5oCisrKyBiL2RidXMvZGJ1cy1zZXJ2ZXItcHJvdGVjdGVkLmgKQEAgLTk2LDcgKzk2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c1N0cmluZyAgICAgICAqYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAgICAgICAqZXJyb3IpOwogdm9pZCAgICAgICAgX2RidXNfc2VydmVyX2ZpbmFsaXplX2Jhc2UgIChEQnVzU2VydmVyICAgICAgICAgICAgICpzZXJ2ZXIpOwotdm9pZCAgICAgICAgX2RidXNfc2VydmVyX2Rpc2Nvbm5lY3RfdW5sb2NrZWQgKERCdXNTZXJ2ZXIgICAgICAgICpzZXJ2ZXIpOwogZGJ1c19ib29sX3QgX2RidXNfc2VydmVyX2FkZF93YXRjaCAgICAgIChEQnVzU2VydmVyICAgICAgICAgICAgICpzZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNXYXRjaCAgICAgICAgICAgICAgKndhdGNoKTsKIHZvaWQgICAgICAgIF9kYnVzX3NlcnZlcl9yZW1vdmVfd2F0Y2ggICAoREJ1c1NlcnZlciAgICAgICAgICAgICAqc2VydmVyLApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNlcnZlci1zb2NrZXQuYyBiL2RidXMvZGJ1cy1zZXJ2ZXItc29ja2V0LmMKaW5kZXggNmE5MzA5MS4uZDcxNmY1MCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXNlcnZlci1zb2NrZXQuYworKysgYi9kYnVzL2RidXMtc2VydmVyLXNvY2tldC5jCkBAIC0yNDMsMTEgKzI0Myw4IEBACiAgICAgICAgICAgc29ja2V0X3NlcnZlci0+d2F0Y2hbaV0gPSBOVUxMOwogICAgICAgICB9CiAKLSAgICAgIGlmIChfZGJ1c19zb2NrZXRfaXNfdmFsaWQgKHNvY2tldF9zZXJ2ZXItPmZkc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBfZGJ1c19jbG9zZV9zb2NrZXQgKHNvY2tldF9zZXJ2ZXItPmZkc1tpXSwgTlVMTCk7Ci0gICAgICAgICAgX2RidXNfc29ja2V0X2ludmFsaWRhdGUgKCZzb2NrZXRfc2VydmVyLT5mZHNbaV0pOwotICAgICAgICB9CisgICAgICBfZGJ1c19jbG9zZV9zb2NrZXQgKHNvY2tldF9zZXJ2ZXItPmZkc1tpXSwgTlVMTCk7CisgICAgICBfZGJ1c19zb2NrZXRfaW52YWxpZGF0ZSAoJnNvY2tldF9zZXJ2ZXItPmZkc1tpXSk7CiAgICAgfQogCiAgIGlmIChzb2NrZXRfc2VydmVyLT5zb2NrZXRfbmFtZSAhPSBOVUxMKQpAQCAtMzQxLDI0ICszMzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X3NlcnZlci0+d2F0Y2hbaV0pKQogICAgICAgICB7CiAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgZm9yIChqID0gMCA7IGogPCBpIDsgaisrKQorICAgICAgICAgICAgX2RidXNfc2VydmVyX3JlbW92ZV93YXRjaCAoc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X3NlcnZlci0+d2F0Y2hbal0pOwogCi0gICAgICAgICAgLyogVGhlIGNhbGxlciBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgY2xvc2luZyB0aGUgZmRzIHVudGlsCi0gICAgICAgICAgICogd2UgcmV0dXJuIHN1Y2Nlc3NmdWxseSwgc28gZG9uJ3QgbGV0IHNvY2tldF9kaXNjb25uZWN0KCkKLSAgICAgICAgICAgKiBjbG9zZSB0aGVtICovCi0gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5fZmRzOyBqKyspCi0gICAgICAgICAgICBfZGJ1c19zb2NrZXRfaW52YWxpZGF0ZSAoJnNvY2tldF9zZXJ2ZXItPmZkc1tqXSk7Ci0KLSAgICAgICAgICAvKiBzb2NrZXRfZGlzY29ubmVjdCgpIHdpbGwgdHJ5IHRvIHJlbW92ZSBhbGwgdGhlIHdhdGNoZXM7Ci0gICAgICAgICAgICogbWFrZSBzdXJlIGl0IGRvZXNuJ3Qgc2VlIHRoZSBvbmVzIHRoYXQgd2VyZW4ndCBldmVuIGFkZGVkCi0gICAgICAgICAgICogeWV0ICovCi0gICAgICAgICAgZm9yIChqID0gaTsgaiA8IG5fZmRzOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIF9kYnVzX3dhdGNoX2ludmFsaWRhdGUgKHNvY2tldF9zZXJ2ZXItPndhdGNoW2pdKTsKLSAgICAgICAgICAgICAgX2RidXNfd2F0Y2hfdW5yZWYgKHNvY2tldF9zZXJ2ZXItPndhdGNoW2pdKTsKLSAgICAgICAgICAgICAgc29ja2V0X3NlcnZlci0+d2F0Y2hbal0gPSBOVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgX2RidXNfc2VydmVyX2Rpc2Nvbm5lY3RfdW5sb2NrZWQgKHNlcnZlcik7CiAgICAgICAgICAgU0VSVkVSX1VOTE9DSyAoc2VydmVyKTsKICAgICAgICAgICBfZGJ1c19zZXJ2ZXJfZmluYWxpemVfYmFzZSAoJnNvY2tldF9zZXJ2ZXItPmJhc2UpOwogICAgICAgICAgIGdvdG8gZmFpbGVkXzI7CkBAIC0zNzUsNyArMzU4LDYgQEAKICAgICB7CiAgICAgICBpZiAoc29ja2V0X3NlcnZlci0+d2F0Y2hbaV0gIT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhdGNoX2ludmFsaWRhdGUgKHNvY2tldF9zZXJ2ZXItPndhdGNoW2ldKTsKICAgICAgICAgICBfZGJ1c193YXRjaF91bnJlZiAoc29ja2V0X3NlcnZlci0+d2F0Y2hbaV0pOwogICAgICAgICAgIHNvY2tldF9zZXJ2ZXItPndhdGNoW2ldID0gTlVMTDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNlcnZlci11bml4LmMgYi9kYnVzL2RidXMtc2VydmVyLXVuaXguYwppbmRleCBjN2FjZTJiLi45MjY2NGE4IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc2VydmVyLXVuaXguYworKysgYi9kYnVzL2RidXMtc2VydmVyLXVuaXguYwpAQCAtNjQsMTkgKzY0LDE4IEBACiAgIGlmIChzdHJjbXAgKG1ldGhvZCwgInVuaXgiKSA9PSAwKQogICAgIHsKICAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyeSwgInBhdGgiKTsKLSAgICAgIGNvbnN0IGNoYXIgKmRpciA9IGRidXNfYWRkcmVzc19lbnRyeV9nZXRfdmFsdWUgKGVudHJ5LCAiZGlyIik7CiAgICAgICBjb25zdCBjaGFyICp0bXBkaXIgPSBkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyeSwgInRtcGRpciIpOwogICAgICAgY29uc3QgY2hhciAqYWJzdHJhY3QgPSBkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyeSwgImFic3RyYWN0Iik7CiAgICAgICBjb25zdCBjaGFyICpydW50aW1lID0gZGJ1c19hZGRyZXNzX2VudHJ5X2dldF92YWx1ZSAoZW50cnksICJydW50aW1lIik7CiAgICAgICBpbnQgbXV0dWFsbHlfZXhjbHVzaXZlX21vZGVzID0gMDsKIAogICAgICAgbXV0dWFsbHlfZXhjbHVzaXZlX21vZGVzID0gKHBhdGggIT0gTlVMTCkgKyAodG1wZGlyICE9IE5VTEwpICsKLSAgICAgICAgKGFic3RyYWN0ICE9IE5VTEwpICsgKHJ1bnRpbWUgIT0gTlVMTCkgKyAoZGlyICE9IE5VTEwpOworICAgICAgICAoYWJzdHJhY3QgIT0gTlVMTCkgKyAocnVudGltZSAhPSBOVUxMKTsKIAogICAgICAgaWYgKG11dHVhbGx5X2V4Y2x1c2l2ZV9tb2RlcyA8IDEpCiAgICAgICAgIHsKICAgICAgICAgICBfZGJ1c19zZXRfYmFkX2FkZHJlc3MoZXJyb3IsICJ1bml4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGggb3IgdG1wZGlyIG9yIGFic3RyYWN0IG9yIHJ1bnRpbWUgb3IgZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGggb3IgdG1wZGlyIG9yIGFic3RyYWN0IG9yIHJ1bnRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICByZXR1cm4gREJVU19TRVJWRVJfTElTVEVOX0JBRF9BRERSRVNTOwogICAgICAgICB9CkBAIC04NCw3ICs4Myw3IEBACiAgICAgICBpZiAobXV0dWFsbHlfZXhjbHVzaXZlX21vZGVzID4gMSkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX3NldF9iYWRfYWRkcmVzcyhlcnJvciwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzcGVjaWZ5IHR3byBvZiBcInBhdGhcIiwgXCJ0bXBkaXJcIiwgXCJhYnN0cmFjdFwiLCBcInJ1bnRpbWVcIiBhbmQgXCJkaXJcIiBhdCB0aGUgc2FtZSB0aW1lIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc3BlY2lmeSB0d28gb2YgXCJwYXRoXCIsIFwidG1wZGlyXCIsIFwiYWJzdHJhY3RcIiBhbmQgXCJydW50aW1lXCIgYXQgdGhlIHNhbWUgdGltZSIpOwogICAgICAgICAgIHJldHVybiBEQlVTX1NFUlZFUl9MSVNURU5fQkFEX0FERFJFU1M7CiAgICAgICAgIH0KIApAQCAtMTM1LDIzICsxMzQsMTAgQEAKIAogICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZnVsbF9wYXRoKTsKICAgICAgICAgfQotICAgICAgZWxzZSBpZiAodG1wZGlyICE9IE5VTEwgfHwgZGlyICE9IE5VTEwpCisgICAgICBlbHNlIGlmICh0bXBkaXIgIT0gTlVMTCkKICAgICAgICAgewogICAgICAgICAgIERCdXNTdHJpbmcgZnVsbF9wYXRoOwogICAgICAgICAgIERCdXNTdHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgICAgZGJ1c19ib29sX3QgdXNlX2Fic3RyYWN0ID0gRkFMU0U7Ci0KLSAgICAgICAgICBpZiAodG1wZGlyICE9IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGRpciA9IHRtcGRpcjsKLQotI2lmZGVmIF9fbGludXhfXwotICAgICAgICAgICAgICAvKiBVc2UgYWJzdHJhY3Qgc29ja2V0cyBmb3IgdG1wZGlyIGlmIHN1cHBvcnRlZCwgc28gdGhhdCBpdAotICAgICAgICAgICAgICAgKiBuZXZlciBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBVc2UgZGlyIGluc3RlYWQgaWYgeW91IHdhbnQgYQotICAgICAgICAgICAgICAgKiBwYXRoLWJhc2VkIHNvY2tldC4gKi8KLSAgICAgICAgICAgICAgdXNlX2Fic3RyYWN0ID0gVFJVRTsKLSNlbmRpZgotICAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmZ1bGxfcGF0aCkpCiAgICAgICAgICAgICB7CkBAIC0xODEsNyArMTY3LDcgQEAKICAgICAgICAgICAgICAgcmV0dXJuIERCVVNfU0VSVkVSX0xJU1RFTl9ESURfTk9UX0NPTk5FQ1Q7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZmdWxsX3BhdGgsIGRpcikgfHwKKyAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZmdWxsX3BhdGgsIHRtcGRpcikgfHwKICAgICAgICAgICAgICAgIV9kYnVzX2NvbmNhdF9kaXJfYW5kX2ZpbGUgKCZmdWxsX3BhdGgsICZmaWxlbmFtZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZnVsbF9wYXRoKTsKQEAgLTE5MCw5ICsxNzYsMTUgQEAKICAgICAgICAgICAgICAgcmV0dXJuIERCVVNfU0VSVkVSX0xJU1RFTl9ESURfTk9UX0NPTk5FQ1Q7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAvKiBBbHdheXMgdXNlIGFic3RyYWN0IG5hbWVzcGFjZSBpZiBwb3NzaWJsZSB3aXRoIHRtcGRpciAqLworCiAgICAgICAgICAgKnNlcnZlcl9wID0KICAgICAgICAgICAgIF9kYnVzX3NlcnZlcl9uZXdfZm9yX2RvbWFpbl9zb2NrZXQgKF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmZ1bGxfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYWJzdHJhY3QsCisjaWZkZWYgSEFWRV9BQlNUUkFDVF9TT0NLRVRTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcik7CiAKICAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmZ1bGxfcGF0aCk7CkBAIC0yNDksNyArMjQxLDYgQEAKICAgICAgICAgZ290byBzeXN0ZW1kX2VycjsKIAogICAgICAgZGJ1c19mcmVlIChmZHMpOwotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZhZGRyZXNzKTsKIAogICAgICAgcmV0dXJuIERCVVNfU0VSVkVSX0xJU1RFTl9PSzsKIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNlcnZlci5jIGIvZGJ1cy9kYnVzLXNlcnZlci5jCmluZGV4IDdhMTI0M2IuLjlhZjkwNmYgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zZXJ2ZXIuYworKysgYi9kYnVzL2RidXMtc2VydmVyLmMKQEAgLTY4MCw3ICs2ODAsNiBAQAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmZpcnN0X2Nvbm5lY3RfZXJyb3IpOwogICAgICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CiAgICAgICByZXR1cm4gc2VydmVyOwogICAgIH0KQEAgLTcwNSw4ICs3MDQsOSBAQAogICBpZiAoX0RCVVNfVU5MSUtFTFkgKG9sZF9yZWZjb3VudCA8PSAwKSkKICAgICB7CiAgICAgICBfZGJ1c19hdG9taWNfZGVjICgmc2VydmVyLT5yZWZjb3VudCk7Ci0gICAgICBfZGJ1c193YXJuX3JldHVybl9pZl9mYWlsIChfREJVU19GVU5DVElPTl9OQU1FLCAib2xkX3JlZmNvdW50ID4gMCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKF9kYnVzX3JldHVybl9pZl9mYWlsX3dhcm5pbmdfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQlVTX0ZVTkNUSU9OX05BTUUsICJvbGRfcmVmY291bnQgPiAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2VuZGlmCkBAIC03NDYsOCArNzQ2LDkgQEAKICAgICAgICAqIEJ1ZzogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzMDMKICAgICAgICAqLwogICAgICAgX2RidXNfYXRvbWljX2luYyAoJnNlcnZlci0+cmVmY291bnQpOwotICAgICAgX2RidXNfd2Fybl9yZXR1cm5faWZfZmFpbCAoX0RCVVNfRlVOQ1RJT05fTkFNRSwgIm9sZF9yZWZjb3VudCA+IDAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkIChfZGJ1c19yZXR1cm5faWZfZmFpbF93YXJuaW5nX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJVU19GVU5DVElPTl9OQU1FLCAib2xkX3JlZmNvdW50ID4gMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTc2NSwyMCArNzY2LDYgQEAKICAgICB9CiB9CiAKLXZvaWQKLV9kYnVzX3NlcnZlcl9kaXNjb25uZWN0X3VubG9ja2VkIChEQnVzU2VydmVyICpzZXJ2ZXIpCi17Ci0gIF9kYnVzX2Fzc2VydCAoc2VydmVyLT52dGFibGUtPmRpc2Nvbm5lY3QgIT0gTlVMTCk7Ci0KLSAgaWYgKCFzZXJ2ZXItPmRpc2Nvbm5lY3RlZCkKLSAgICB7Ci0gICAgICAvKiB0aGlzIGhhcyB0byBiZSBmaXJzdCBzbyByZWN1cnNpdmUgY2FsbHMgdG8gZGlzY29ubmVjdCBkb24ndCBoYXBwZW4gKi8KLSAgICAgIHNlcnZlci0+ZGlzY29ubmVjdGVkID0gVFJVRTsKLQotICAgICAgKCogc2VydmVyLT52dGFibGUtPmRpc2Nvbm5lY3QpIChzZXJ2ZXIpOwotICAgIH0KLX0KLQogLyoqCiAgKiBSZWxlYXNlcyB0aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgc3RvcHMgbGlzdGVuaW5nIGZvcgogICogbmV3IGNsaWVudHMuIElmIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgb25seSB0aGUgZmlyc3QKQEAgLTc5NSw3ICs3ODIsMTUgQEAKICAgZGJ1c19zZXJ2ZXJfcmVmIChzZXJ2ZXIpOwogICBTRVJWRVJfTE9DSyAoc2VydmVyKTsKIAotICBfZGJ1c19zZXJ2ZXJfZGlzY29ubmVjdF91bmxvY2tlZCAoc2VydmVyKTsKKyAgX2RidXNfYXNzZXJ0IChzZXJ2ZXItPnZ0YWJsZS0+ZGlzY29ubmVjdCAhPSBOVUxMKTsKKworICBpZiAoIXNlcnZlci0+ZGlzY29ubmVjdGVkKQorICAgIHsKKyAgICAgIC8qIHRoaXMgaGFzIHRvIGJlIGZpcnN0IHNvIHJlY3Vyc2l2ZSBjYWxscyB0byBkaXNjb25uZWN0IGRvbid0IGhhcHBlbiAqLworICAgICAgc2VydmVyLT5kaXNjb25uZWN0ZWQgPSBUUlVFOworICAgICAgCisgICAgICAoKiBzZXJ2ZXItPnZ0YWJsZS0+ZGlzY29ubmVjdCkgKHNlcnZlcik7CisgICAgfQogCiAgIFNFUlZFUl9VTkxPQ0sgKHNlcnZlcik7CiAgIGRidXNfc2VydmVyX3VucmVmIChzZXJ2ZXIpOwpAQCAtOTY3LDcgKzk2Miw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJSZS1lbnRyYW50IGNhbGwgdG8gJXMiLCBfREJVU19GVU5DVElPTl9OQU1FKTsKKyAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiUmUtZW50cmFudCBjYWxsIHRvICVzXG4iLCBfREJVU19GVU5DVElPTl9OQU1FKTsKICAgICAgIHJlc3VsdCA9IEZBTFNFOwogICAgIH0KICAgc2VydmVyLT53YXRjaGVzID0gd2F0Y2hlczsKQEAgLTEwMjAsNyArMTAxNSw3IEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJSZS1lbnRyYW50IGNhbGwgdG8gJXMiLCBfREJVU19GVU5DVElPTl9OQU1FKTsKKyAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiUmUtZW50cmFudCBjYWxsIHRvICVzXG4iLCBfREJVU19GVU5DVElPTl9OQU1FKTsKICAgICAgIHJlc3VsdCA9IEZBTFNFOwogICAgIH0KICAgc2VydmVyLT50aW1lb3V0cyA9IHRpbWVvdXRzOwpAQCAtMTIxOCw3ICsxMjEzLDcgQEAKICAgICAgIHNlcnZlciA9IGRidXNfc2VydmVyX2xpc3RlbiAodmFsaWRfYWRkcmVzc2VzW2ldLCAmZXJyb3IpOwogICAgICAgaWYgKHNlcnZlciA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoInNlcnZlciBsaXN0ZW4gZXJyb3I6ICVzOiAlcyIsIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgIF9kYnVzX3dhcm4gKCJzZXJ2ZXIgbGlzdGVuIGVycm9yOiAlczogJXNcbiIsIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJGYWlsZWQgdG8gbGlzdGVuIGZvciB2YWxpZCBhZGRyZXNzLiIpOwogICAgICAgICB9CkBAIC0xMjMwLDcgKzEyMjUsNyBAQAogCiAgICAgICBpZiAoc3Ryc3RyIChhZGRyZXNzLCBpZCkgPT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJzZXJ2ZXIgaWQgJyVzJyBpcyBub3QgaW4gdGhlIHNlcnZlciBhZGRyZXNzICclcyciLAorICAgICAgICAgIF9kYnVzX3dhcm4gKCJzZXJ2ZXIgaWQgJyVzJyBpcyBub3QgaW4gdGhlIHNlcnZlciBhZGRyZXNzICclcydcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaWQsIGFkZHJlc3MpOwogICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImJhZCBzZXJ2ZXIgaWQgb3IgYWRkcmVzcyIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc2VydmVyLmggYi9kYnVzL2RidXMtc2VydmVyLmgKaW5kZXggN2Q4ZjA0ZS4uYmRiZWZhMCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXNlcnZlci5oCisrKyBiL2RidXMvZGJ1cy1zZXJ2ZXIuaApAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBEQlVTX1NFUlZFUl9ICiAKICNpbmNsdWRlIDxkYnVzL2RidXMtZXJyb3JzLmg+Ci0jaW5jbHVkZSA8ZGJ1cy9kYnVzLW1hY3Jvcy5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy1tZXNzYWdlLmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLWNvbm5lY3Rpb24uaD4KICNpbmNsdWRlIDxkYnVzL2RidXMtcHJvdG9jb2wuaD4KQEAgLTEwMCwyNCArOTksNiBAQAogdm9pZCogICAgICAgZGJ1c19zZXJ2ZXJfZ2V0X2RhdGEgICAgICAgICAgIChEQnVzU2VydmVyICAgICAgICpzZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgIHNsb3QpOwogCi0vKioKLSAqIENsZWFyIGEgdmFyaWFibGUgb3Igc3RydWN0IG1lbWJlciB0aGF0IGNvbnRhaW5zIGEgI0RCdXNTZXJ2ZXIuCi0gKiBJZiBpdCBkb2VzIG5vdCBjb250YWluICNOVUxMLCB0aGUgc2VydmVyIHRoYXQgd2FzIHByZXZpb3VzbHkKLSAqIHRoZXJlIGlzIHVucmVmZXJlbmNlZCB3aXRoIGRidXNfc2VydmVyX3VucmVmKCkuCi0gKgotICogVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gZGJ1c19jbGVhcl9jb25uZWN0aW9uKCk6IHNlZSB0aGF0IGZ1bmN0aW9uCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIEBwYXJhbSBwb2ludGVyX3RvX3NlcnZlciBBIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvciBzdHJ1Y3QgbWVtYmVyLgotICogcG9pbnRlcl90b19zZXJ2ZXIgbXVzdCBub3QgYmUgI05VTEwsIGJ1dCAqcG9pbnRlcl90b19zZXJ2ZXIKLSAqIG1heSBiZSAjTlVMTC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1kYnVzX2NsZWFyX3NlcnZlciAoREJ1c1NlcnZlciAqKnBvaW50ZXJfdG9fc2VydmVyKQotewotICBfZGJ1c19jbGVhcl9wb2ludGVyX2ltcGwgKERCdXNTZXJ2ZXIsIHBvaW50ZXJfdG9fc2VydmVyLCBkYnVzX3NlcnZlcl91bnJlZik7Ci19Ci0KIC8qKiBAfSAqLwogCiBEQlVTX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNoYS5jIGIvZGJ1cy9kYnVzLXNoYS5jCmluZGV4IDUyYzc0ZjUuLmZlYmZiYTIgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zaGEuYworKysgYi9kYnVzL2RidXMtc2hhLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCiAgIHNoYV9maW5pc2ggKGNvbnRleHQsIGRpZ2VzdCk7CiAKLSAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX2xlbiAocmVzdWx0cywgKGNvbnN0IGNoYXIgKikgZGlnZXN0LCAyMCkpCisgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9sZW4gKHJlc3VsdHMsIGRpZ2VzdCwgMjApKQogICAgIHJldHVybiBGQUxTRTsKIAogICAvKiBzb21lIGtpbmQgb2Ygc2VjdXJpdHkgcGFyYW5vaWEsIHRob3VnaCBpdCBzZWVtcyBwb2ludGxlc3MKQEAgLTUyNCw3ICs1MjQsNyBAQAogICBEQnVzU3RyaW5nIGV4cGVjdGVkX3N0cjsKICAgREJ1c1N0cmluZyByZXN1bHRzOwogCi0gIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0X2xlbiAoJmlucHV0X3N0ciwgKGNvbnN0IGNoYXIgKikgaW5wdXQsIGlucHV0X2xlbik7CisgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0X2xlbiAoJmlucHV0X3N0ciwgaW5wdXQsIGlucHV0X2xlbik7CiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZXhwZWN0ZWRfc3RyLCBleHBlY3RlZCk7CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnJlc3VsdHMpKQpAQCAtNTM1LDcgKzUzNSw3IEBACiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfZXF1YWwgKCZleHBlY3RlZF9zdHIsICZyZXN1bHRzKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgaGFzaCAlcyBnb3QgJXMgZm9yIFNIQS0xIHN1bSIsCisgICAgICBfZGJ1c193YXJuICgiRXhwZWN0ZWQgaGFzaCAlcyBnb3QgJXMgZm9yIFNIQS0xIHN1bVxuIiwKICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmcmVzdWx0cykpOwogICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZyZXN1bHRzKTsKQEAgLTU1MCw3ICs1NTAsNyBAQAogY2hlY2tfc2hhX3N0ciAoY29uc3QgY2hhciAqaW5wdXQsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBlY3RlZCkKIHsKLSAgcmV0dXJuIGNoZWNrX3NoYV9iaW5hcnkgKCh1bnNpZ25lZCBjaGFyICopIGlucHV0LCBzdHJsZW4gKGlucHV0KSwgZXhwZWN0ZWQpOworICByZXR1cm4gY2hlY2tfc2hhX2JpbmFyeSAoaW5wdXQsIHN0cmxlbiAoaW5wdXQpLCBleHBlY3RlZCk7CiB9CiAKIHN0YXRpYyBkYnVzX2Jvb2xfdApAQCAtNjkzLDkgKzY5Myw3IEBACiAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgd2hpbGUgKGkgPCBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAocmVzdWx0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gX2RidXNfc3RyaW5nX2dldF9ieXRlIChyZXN1bHQsIGkpOwotCi0gICAgICAgICAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgICAgICAgc3dpdGNoIChfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKHJlc3VsdCwgaSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX3NldF9ieXRlIChyZXN1bHQsIGksICdhJyk7CkBAIC03MjAsOSArNzE4LDYgQEAKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19kZWxldGUgKHJlc3VsdCwgaSwgMSk7CiAgICAgICAgICAgICAgICAgICAtLWk7IC8qIHRvIG9mZnNldCArK2kgYmVsb3cgKi8KICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICBpZiAoKGMgPCAnMCcgfHwgYyA+ICc5JykgJiYgKGMgPCAnYScgfHwgYyA+ICdmJykpCi0gICAgICAgICAgICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQgU0hBLTEgdGVzdCBzY3JpcHQiKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgKytpOwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNoZWxsLmMgYi9kYnVzL2RidXMtc2hlbGwuYwppbmRleCA0NGNiYmNmLi4yMzg0OTYxIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc2hlbGwuYworKysgYi9kYnVzL2RidXMtc2hlbGwuYwpAQCAtNDE5LDE1ICs0MTksMTUgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgJ1xuJzoKICAgICAgICAgICAgICAgaWYgKCFkZWxpbWl0X3Rva2VuICgmY3VycmVudF90b2tlbiwgJnJldHZhbCwgZXJyb3IpKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisJCWdvdG8gZXJyb3I7CiAKLSAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZjdXJyZW50X3Rva2VuKTsKKwkJX2RidXNfc3RyaW5nX2ZyZWUgKCZjdXJyZW50X3Rva2VuKTsKIAotICAgICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmY3VycmVudF90b2tlbikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgICAgICAgICAgICAgZ290byBpbml0X2Vycm9yOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJmN1cnJlbnRfdG9rZW4pKQorCQkgIHsKKwkJICAgIF9EQlVTX1NFVF9PT00gKGVycm9yKTsKKwkJICAgIGdvdG8gaW5pdF9lcnJvcjsKKwkJICB9CiAKICAgICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zaWduYXR1cmUuYyBiL2RidXMvZGJ1cy1zaWduYXR1cmUuYwppbmRleCBlZjllY2E5Li42ZjE1MjFiIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc2lnbmF0dXJlLmMKKysrIGIvZGJ1cy9kYnVzLXNpZ25hdHVyZS5jCkBAIC0yNDQsOCArMjQ0LDcgQEAKICAgICByZXR1cm4gVFJVRTsKICAgZWxzZQogICAgIHsKLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9JTlZBTElEX1NJR05BVFVSRSwgIiVzIiwKLSAgICAgICAgICBfZGJ1c192YWxpZGl0eV90b19lcnJvcl9tZXNzYWdlIChyZWFzb24pKTsKKyAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9JTlZBTElEX1NJR05BVFVSRSwgX2RidXNfdmFsaWRpdHlfdG9fZXJyb3JfbWVzc2FnZSAocmVhc29uKSk7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXNvY2tldC1zZXQtZXBvbGwuYyBiL2RidXMvZGJ1cy1zb2NrZXQtc2V0LWVwb2xsLmMKaW5kZXggNDY5MmNiZS4uYWVkYzI2ZCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXNvY2tldC1zZXQtZXBvbGwuYworKysgYi9kYnVzL2RidXMtc29ja2V0LXNldC1lcG9sbC5jCkBAIC0xNDQsNyArMTQ0LDYgQEAKICAgc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50OwogICBpbnQgZXJyOwogCi0gIF9EQlVTX1pFUk8gKGV2ZW50KTsKICAgZXZlbnQuZGF0YS5mZCA9IGZkOwogCiAgIGlmIChlbmFibGVkKQpAQCAtMTcyLDE1ICsxNzEsMTUgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRUJBREY6Ci0gICAgICAgIF9kYnVzX3dhcm4gKCJCYWQgZmQgJWQiLCBmZCk7CisgICAgICAgIF9kYnVzX3dhcm4gKCJCYWQgZmQgJWRcbiIsIGZkKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRUVYSVNUOgotICAgICAgICBfZGJ1c193YXJuICgiZmQgJWQgYWRkZWQgYW5kIHRoZW4gYWRkZWQgYWdhaW4iLCBmZCk7CisgICAgICAgIF9kYnVzX3dhcm4gKCJmZCAlZCBhZGRlZCBhbmQgdGhlbiBhZGRlZCBhZ2FpblxuIiwgZmQpOwogICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdDoKLSAgICAgICAgX2RidXNfd2FybiAoIk1pc2MgZXJyb3Igd2hlbiB0cnlpbmcgdG8gd2F0Y2ggZmQgJWQ6ICVzIiwgZmQsCisgICAgICAgIF9kYnVzX3dhcm4gKCJNaXNjIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHdhdGNoIGZkICVkOiAlc1xuIiwgZmQsCiAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTk3LDcgKzE5Niw2IEBACiAgIHN0cnVjdCBlcG9sbF9ldmVudCBldmVudDsKICAgaW50IGVycjsKIAotICBfREJVU19aRVJPIChldmVudCk7CiAgIGV2ZW50LmRhdGEuZmQgPSBmZDsKICAgZXZlbnQuZXZlbnRzID0gd2F0Y2hfZmxhZ3NfdG9fZXBvbGxfZXZlbnRzIChmbGFncyk7CiAKQEAgLTIxMSwxOSArMjA5LDE5IEBACiAgIHN3aXRjaCAoZXJyKQogICAgIHsKICAgICAgIGNhc2UgRUJBREY6Ci0gICAgICAgIF9kYnVzX3dhcm4gKCJCYWQgZmQgJWQiLCBmZCk7CisgICAgICAgIF9kYnVzX3dhcm4gKCJCYWQgZmQgJWRcbiIsIGZkKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgRU5PRU5UOgotICAgICAgICBfZGJ1c193YXJuICgiZmQgJWQgZW5hYmxlZCBiZWZvcmUgaXQgd2FzIGFkZGVkIiwgZmQpOworICAgICAgICBfZGJ1c193YXJuICgiZmQgJWQgZW5hYmxlZCBiZWZvcmUgaXQgd2FzIGFkZGVkXG4iLCBmZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEVOT01FTToKLSAgICAgICAgX2RidXNfd2FybiAoIkluc3VmZmljaWVudCBtZW1vcnkgdG8gY2hhbmdlIHdhdGNoIGZvciBmZCAlZCIsIGZkKTsKKyAgICAgICAgX2RidXNfd2FybiAoIkluc3VmZmljaWVudCBtZW1vcnkgdG8gY2hhbmdlIHdhdGNoIGZvciBmZCAlZFxuIiwgZmQpOwogICAgICAgICBicmVhazsKIAogICAgICAgZGVmYXVsdDoKLSAgICAgICAgX2RidXNfd2FybiAoIk1pc2MgZXJyb3Igd2hlbiB0cnlpbmcgdG8gd2F0Y2ggZmQgJWQ6ICVzIiwgZmQsCisgICAgICAgIF9kYnVzX3dhcm4gKCJNaXNjIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHdhdGNoIGZkICVkOiAlc1xuIiwgZmQsCiAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjUzLDcgKzI1MSw2IEBACiAgICAqIHdvcmsgb24gMi42LjMyKS4gQ29tcGlsZSB0aGlzIGZpbGUgd2l0aCAtRFRFU1RfQkVIQVZJT1VSX09GX0VQT0xMRVQgZm9yCiAgICAqIHRlc3QgY29kZS4KICAgICovCi0gIF9EQlVTX1pFUk8gKGV2ZW50KTsKICAgZXZlbnQuZGF0YS5mZCA9IGZkOwogICBldmVudC5ldmVudHMgPSBFUE9MTEVUOwogCkBAIC0yNjEsNyArMjU4LDcgQEAKICAgICByZXR1cm47CiAKICAgZXJyID0gZXJybm87Ci0gIF9kYnVzX3dhcm4gKCJFcnJvciB3aGVuIHRyeWluZyB0byB3YXRjaCBmZCAlZDogJXMiLCBmZCwKKyAgX2RidXNfd2FybiAoIkVycm9yIHdoZW4gdHJ5aW5nIHRvIHdhdGNoIGZkICVkOiAlc1xuIiwgZmQsCiAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnIpKTsKIH0KIApAQCAtMjczLDE0ICsyNzAsMTMgQEAKICAgaW50IGVycjsKICAgLyogS2VybmVscyA8IDIuNi45IHJlcXVpcmUgYSBub24tTlVMTCBzdHJ1Y3QgcG9pbnRlciwgZXZlbiB0aG91Z2ggaXRzCiAgICAqIGNvbnRlbnRzIGFyZSBpZ25vcmVkICovCi0gIHN0cnVjdCBlcG9sbF9ldmVudCBkdW1teTsKLSAgX0RCVVNfWkVSTyAoZHVtbXkpOworICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZHVtbXkgPSB7IDAgfTsKIAogICBpZiAoZXBvbGxfY3RsIChzZWxmLT5lcGZkLCBFUE9MTF9DVExfREVMLCBmZCwgJmR1bW15KSA9PSAwKQogICAgIHJldHVybjsKIAogICBlcnIgPSBlcnJubzsKLSAgX2RidXNfd2FybiAoIkVycm9yIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSBmZCAlZDogJXMiLCBmZCwgc3RyZXJyb3IgKGVycikpOworICBfZGJ1c193YXJuICgiRXJyb3Igd2hlbiB0cnlpbmcgdG8gcmVtb3ZlIGZkICVkOiAlc1xuIiwgZmQsIHN0cmVycm9yIChlcnIpKTsKIH0KIAogLyogT3B0aW1hbGx5LCB0aGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBpbiBEQnVzTG9vcDogd2UgdXNlIGl0IHRvIHRyYW5zbGF0ZQpAQCAtMzUwLDggKzM0Niw2IEBACiAgIGludCBmZCA9IDA7IC8qIHN0ZGluICovCiAgIGludCByZXQ7CiAKLSAgX0RCVVNfWkVSTyAoaW5wdXQpOwotCiAgIGlucHV0LmV2ZW50cyA9IEVQT0xMSFVQIHwgRVBPTExFVDsKICAgcmV0ID0gZXBvbGxfY3RsIChlcGZkLCBFUE9MTF9DVExfQURELCBmZCwgJmlucHV0KTsKICAgcHJpbnRmICgiY3RsIEFERDogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3Bhd24tdGVzdC5jIGIvZGJ1cy9kYnVzLXNwYXduLXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5YjZlYy4uMDAwMDAwMAotLS0gYS9kYnVzL2RidXMtc3Bhd24tdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IC0qLSAqLwotLyogZGJ1cy1zcGF3bi10ZXN0LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgIFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBDb2RlRmFjdG9yeSBBQgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5vdmVsbCwgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLSNpbmNsdWRlIDxjb25maWcuaD4KLQotCi0jaW5jbHVkZSAiZGJ1cy1zcGF3bi5oIgotI2luY2x1ZGUgImRidXMtc3lzZGVwcy5oIgotI2luY2x1ZGUgImRidXMtdGVzdC5oIgotCi1zdGF0aWMgY2hhciAqCi1nZXRfdGVzdF9leGVjIChjb25zdCBjaGFyICpleGUsCi0gICAgICAgICAgICAgICBEQnVzU3RyaW5nICpzY3JhdGNoX3NwYWNlKQotewotICBjb25zdCBjaGFyICpkYnVzX3Rlc3RfZXhlYzsKLQotICBkYnVzX3Rlc3RfZXhlYyA9IF9kYnVzX2dldGVudiAoIkRCVVNfVEVTVF9FWEVDIik7Ci0KLSAgaWYgKGRidXNfdGVzdF9leGVjID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoc2NyYXRjaF9zcGFjZSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc2NyYXRjaF9zcGFjZSwgIiVzLyVzJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX3Rlc3RfZXhlYywgZXhlLCBEQlVTX0VYRUVYVCkpCi0gICAgewotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKHNjcmF0Y2hfc3BhY2UpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gIHJldHVybiBfZGJ1c19zdHJpbmdfZ2V0X2RhdGEgKHNjcmF0Y2hfc3BhY2UpOwotfQotCi1zdGF0aWMgZGJ1c19ib29sX3QKLWNoZWNrX3NwYXduX25vbmV4aXN0ZW50ICh2b2lkICpkYXRhKQotewotICBzdGF0aWMgY29uc3QgY2hhciBhcmdfZG9lc19ub3RfZXhpc3RbXSA9ICIvdGhpcy9kb2VzL25vdC9leGlzdC8zMjU0MnNkZ2FmZ2FmZGciOwotCi0gIGNvbnN0IGNoYXIgKmFyZ3ZbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLSAgREJ1c0JhYnlzaXR0ZXIgKnNpdHRlciA9IE5VTEw7Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLQotICAvKioqIFRlc3QgbGF1bmNoaW5nIG5vbmV4aXN0ZW50IGJpbmFyeSAqLwotCi0gIGFyZ3ZbMF0gPSBhcmdfZG9lc19ub3RfZXhpc3Q7Ci0gIGlmIChfZGJ1c19zcGF3bl9hc3luY193aXRoX2JhYnlzaXR0ZXIgKCZzaXR0ZXIsICJzcGF3bl9ub25leGlzdGVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICogY29uc3QgKikgYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgREJVU19TUEFXTl9OT05FLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQotICAgIHsKLSAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKHNpdHRlcik7Ci0gICAgICBfZGJ1c19iYWJ5c2l0dGVyX3NldF9jaGlsZF9leGl0X2Vycm9yIChzaXR0ZXIsICZlcnJvcik7Ci0gICAgfQotCi0gIGlmIChzaXR0ZXIpCi0gICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKLQotICBpZiAoIWRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQotICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBlcnJvciBsYXVuY2hpbmcgbm9uZXhpc3RlbnQgZXhlY3V0YWJsZSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIShkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSB8fAotICAgICAgICBkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfU1BBV05fRVhFQ19GQUlMRUQpKSkKLSAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGxhdW5jaGluZyBub25leGlzdGVudCBleGVjdXRhYmxlOiAlczogJXMiLAotICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGRidXNfYm9vbF90Ci1jaGVja19zcGF3bl9zZWdmYXVsdCAodm9pZCAqZGF0YSkKLXsKLSAgY2hhciAqYXJndls0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICBEQnVzQmFieXNpdHRlciAqc2l0dGVyID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICBEQnVzU3RyaW5nIGFyZ3YwOwotCi0gIC8qKiogVGVzdCBsYXVuY2hpbmcgc2VnZmF1bHQgYmluYXJ5ICovCi0KLSAgYXJndlswXSA9IGdldF90ZXN0X2V4ZWMgKCJ0ZXN0LXNlZ2ZhdWx0IiwgJmFyZ3YwKTsKLQotICBpZiAoYXJndlswXSA9PSBOVUxMKQotICAgIHsKLSAgICAgIC8qIE9PTSB3YXMgc2ltdWxhdGVkIG9yIERCVVNfVEVTVF9FWEVDIHdhcyB1bnNldDsgZWl0aGVyIGlzIE9LICovCi0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX3NlZ2ZhdWx0IiwgYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgREJVU19TUEFXTl9OT05FLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQotICAgIHsKLSAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKHNpdHRlcik7Ci0gICAgICBfZGJ1c19iYWJ5c2l0dGVyX3NldF9jaGlsZF9leGl0X2Vycm9yIChzaXR0ZXIsICZlcnJvcik7Ci0gICAgfQotCi0gIF9kYnVzX3N0cmluZ19mcmVlICgmYXJndjApOwotCi0gIGlmIChzaXR0ZXIpCi0gICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKLQotICBpZiAoIWRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQotICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBlcnJvciBsYXVuY2hpbmcgc2VnZmF1bHRpbmcgYmluYXJ5Iik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGlmICghKGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpIHx8Ci0jaWZkZWYgREJVU19XSU4KLSAgICAgICAgZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX1NQQVdOX0NISUxEX0VYSVRFRCkpKQotI2Vsc2UKLSAgICAgICAgZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX1NQQVdOX0NISUxEX1NJR05BTEVEKSkpCi0jZW5kaWYKLSAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGxhdW5jaGluZyBzZWdmYXVsdGluZyBleGVjdXRhYmxlOiAlczogJXMiLAotICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGRidXNfYm9vbF90Ci1jaGVja19zcGF3bl9leGl0ICh2b2lkICpkYXRhKQotewotICBjaGFyICphcmd2WzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0gIERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIERCdXNTdHJpbmcgYXJndjA7Ci0KLSAgLyoqKiBUZXN0IGxhdW5jaGluZyBleGl0IGZhaWx1cmUgYmluYXJ5ICovCi0KLSAgYXJndlswXSA9IGdldF90ZXN0X2V4ZWMgKCJ0ZXN0LWV4aXQiLCAmYXJndjApOwotCi0gIGlmIChhcmd2WzBdID09IE5VTEwpCi0gICAgewotICAgICAgLyogT09NIHdhcyBzaW11bGF0ZWQgb3IgREJVU19URVNUX0VYRUMgd2FzIHVuc2V0OyBlaXRoZXIgaXMgT0sgKi8KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICBpZiAoX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICgmc2l0dGVyLCAic3Bhd25fZXhpdCIsIGFyZ3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIERCVVNfU1BBV05fTk9ORSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKSkKLSAgICB7Ci0gICAgICBfZGJ1c19iYWJ5c2l0dGVyX2Jsb2NrX2Zvcl9jaGlsZF9leGl0IChzaXR0ZXIpOwotICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOwotICAgIH0KLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmFyZ3YwKTsKLQotICBpZiAoc2l0dGVyKQotICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7Ci0KLSAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKLSAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgbGF1bmNoaW5nIGJpbmFyeSB0aGF0IGV4aXRlZCB3aXRoIGZhaWx1cmUgY29kZSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIShkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSB8fAotICAgICAgICBkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfU1BBV05fQ0hJTERfRVhJVEVEKSkpCi0gICAgewotICAgICAgX2RidXNfd2FybiAoIk5vdCBleHBlY3RpbmcgZXJyb3Igd2hlbiBsYXVuY2hpbmcgZXhpdGluZyBleGVjdXRhYmxlOiAlczogJXMiLAotICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGRidXNfYm9vbF90Ci1jaGVja19zcGF3bl9hbmRfa2lsbCAodm9pZCAqZGF0YSkKLXsKLSAgY2hhciAqYXJndls0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICBEQnVzQmFieXNpdHRlciAqc2l0dGVyID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICBEQnVzU3RyaW5nIGFyZ3YwOwotCi0gIC8qKiogVGVzdCBsYXVuY2hpbmcgc2xlZXBpbmcgYmluYXJ5IHRoZW4ga2lsbGluZyBpdCAqLwotCi0gIGFyZ3ZbMF0gPSBnZXRfdGVzdF9leGVjICgidGVzdC1zbGVlcC1mb3JldmVyIiwgJmFyZ3YwKTsKLQotICBpZiAoYXJndlswXSA9PSBOVUxMKQotICAgIHsKLSAgICAgIC8qIE9PTSB3YXMgc2ltdWxhdGVkIG9yIERCVVNfVEVTVF9FWEVDIHdhcyB1bnNldDsgZWl0aGVyIGlzIE9LICovCi0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX2FuZF9raWxsIiwgYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgREJVU19TUEFXTl9OT05FLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQotICAgIHsKLSAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfa2lsbF9jaGlsZCAoc2l0dGVyKTsKLQotICAgICAgX2RidXNfYmFieXNpdHRlcl9ibG9ja19mb3JfY2hpbGRfZXhpdCAoc2l0dGVyKTsKLQotICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOwotICAgIH0KLQotICBfZGJ1c19zdHJpbmdfZnJlZSAoJmFyZ3YwKTsKLQotICBpZiAoc2l0dGVyKQotICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7Ci0KLSAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKLSAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgYWZ0ZXIga2lsbGluZyBzcGF3bmVkIGJpbmFyeSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIShkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSB8fAotI2lmZGVmIERCVVNfV0lOCi0gICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9DSElMRF9FWElURUQpKSkKLSNlbHNlCi0gICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9DSElMRF9TSUdOQUxFRCkpKQotI2VuZGlmCi0gICAgewotICAgICAgX2RidXNfd2FybiAoIk5vdCBleHBlY3RpbmcgZXJyb3Igd2hlbiBraWxsaW5nIGV4ZWN1dGFibGU6ICVzOiAlcyIsCi0gICAgICAgICAgICAgICAgICBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKLSAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1kYnVzX2Jvb2xfdAotX2RidXNfc3Bhd25fdGVzdCAoY29uc3QgY2hhciAqdGVzdF9kYXRhX2RpcikKLXsKLSAgaWYgKCFfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoInNwYXduX25vbmV4aXN0ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3Bhd25fbm9uZXhpc3RlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgic3Bhd25fc2VnZmF1bHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zcGF3bl9zZWdmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKCJzcGF3bl9leGl0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3Bhd25fZXhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKCJzcGF3bl9hbmRfa2lsbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3NwYXduX2FuZF9raWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3Bhd24td2luLmMgYi9kYnVzL2RidXMtc3Bhd24td2luLmMKaW5kZXggY2M1YmZjMy4uZjc0MWY5MiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXNwYXduLXdpbi5jCisrKyBiL2RidXMvZGJ1cy1zcGF3bi13aW4uYwpAQCAtNjMsMTQgKzYzLDE5IEBACiAgICAgREJ1c0F0b21pYyByZWZjb3VudDsKIAogICAgIEhBTkRMRSBzdGFydF9zeW5jX2V2ZW50OworI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCisKKyAgICBIQU5ETEUgZW5kX3N5bmNfZXZlbnQ7CisjZW5kaWYKIAogICAgIGNoYXIgKmxvZ19uYW1lOworICAgIERCdXNTcGF3bkNoaWxkU2V0dXBGdW5jIGNoaWxkX3NldHVwOworICAgIHZvaWQgKnVzZXJfZGF0YTsKIAogICAgIGludCBhcmdjOwogICAgIGNoYXIgKiphcmd2OwogICAgIGNoYXIgKiplbnZwOwogCi0gICAgSEFORExFIHRocmVhZF9oYW5kbGU7CiAgICAgSEFORExFIGNoaWxkX2hhbmRsZTsKICAgICBEQnVzU29ja2V0IHNvY2tldF90b19iYWJ5c2l0dGVyOwkvKiBDb25uZWN0aW9uIHRvIHRoZSBiYWJ5c2l0dGVyIHRocmVhZCAqLwogICAgIERCdXNTb2NrZXQgc29ja2V0X3RvX21haW47CkBAIC0xMjEsNiArMTI2LDE1IEBACiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUworICBzaXR0ZXItPmVuZF9zeW5jX2V2ZW50ID0gQ3JlYXRlRXZlbnQgKE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7CisgIGlmIChzaXR0ZXItPmVuZF9zeW5jX2V2ZW50ID09IE5VTEwpCisgICAgeworICAgICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCiAgIHNpdHRlci0+Y2hpbGRfaGFuZGxlID0gTlVMTDsKIAogICBzaXR0ZXItPnNvY2tldF90b19iYWJ5c2l0dGVyID0gc2l0dGVyLT5zb2NrZXRfdG9fbWFpbiA9IF9kYnVzX3NvY2tldF9nZXRfaW52YWxpZCAoKTsKQEAgLTI1NywxMSArMjcxLDEzIEBACiAgICAgICAgICAgc2l0dGVyLT5zdGFydF9zeW5jX2V2ZW50ID0gTlVMTDsKICAgICAgICAgfQogCi0gICAgICBpZiAoc2l0dGVyLT50aHJlYWRfaGFuZGxlKQorI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCisgICAgICBpZiAoc2l0dGVyLT5lbmRfc3luY19ldmVudCAhPSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgQ2xvc2VIYW5kbGUgKHNpdHRlci0+dGhyZWFkX2hhbmRsZSk7Ci0gICAgICAgICAgc2l0dGVyLT50aHJlYWRfaGFuZGxlID0gTlVMTDsKKyAgICAgICAgICBDbG9zZUhhbmRsZSAoc2l0dGVyLT5lbmRfc3luY19ldmVudCk7CisgICAgICAgICAgc2l0dGVyLT5lbmRfc3luY19ldmVudCA9IE5VTEw7CiAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICBkYnVzX2ZyZWUgKHNpdHRlci0+bG9nX25hbWUpOwogCkBAIC00MTIsOCArNDI4LDggQEAKIAogLyogcHJvdGVjdF9hcmd2IGxpZnRlZCBmcm9tIEdMaWIsIHJlbGljZW5zZWQgYnkgYXV0aG9yLCBUb3IgTGlsbHF2aXN0ICovCiBzdGF0aWMgaW50Ci1wcm90ZWN0X2FyZ3YgKGNoYXIgICogY29uc3QgKmFyZ3YsCi0gICAgICAgICAgICAgIGNoYXIgICAgICAgICoqKm5ld19hcmd2KQorcHJvdGVjdF9hcmd2IChjaGFyICAqKmFyZ3YsCisgICAgICAgICAgICAgIGNoYXIgKioqbmV3X2FyZ3YpCiB7CiAgIGludCBpOwogICBpbnQgYXJnYyA9IDA7CkBAIC00NDAsNyArNDU2LDcgQEAKICAgICovCiAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCiAgICAgewotICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV07CisgICAgICBjaGFyICpwID0gYXJndltpXTsKICAgICAgIGNoYXIgKnE7CiAgICAgICBpbnQgbGVuID0gMDsKICAgICAgIGludCBuZWVkX2RibHF1b3RlcyA9IEZBTFNFOwpAQCAtNDUyLDcgKzQ2OCw3IEBACiAgICAgICAgICAgICBsZW4rKzsKICAgICAgICAgICBlbHNlIGlmICgqcCA9PSAnXFwnKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcCA9IHA7CisgICAgICAgICAgICAgIGNoYXIgKnBwID0gcDsKICAgICAgICAgICAgICAgd2hpbGUgKCpwcCAmJiAqcHAgPT0gJ1xcJykKICAgICAgICAgICAgICAgICBwcCsrOwogICAgICAgICAgICAgICBpZiAoKnBwID09ICciJykKQEAgLTQ3OSw3ICs0OTUsNyBAQAogICAgICAgICAgICAgKnErKyA9ICdcXCc7CiAgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ1xcJykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHAgPSBwOworICAgICAgICAgICAgICBjaGFyICpwcCA9IHA7CiAgICAgICAgICAgICAgIHdoaWxlICgqcHAgJiYgKnBwID09ICdcXCcpCiAgICAgICAgICAgICAgICAgcHArKzsKICAgICAgICAgICAgICAgaWYgKCpwcCA9PSAnIicpCkBAIC01OTIsNiArNjA4LDEyIEBACiAgIEhBTkRMRSBoYW5kbGU7CiAKICAgUElORygpOworICBpZiAoc2l0dGVyLT5jaGlsZF9zZXR1cCkKKyAgICB7CisgICAgICBQSU5HKCk7CisgICAgICAoKnNpdHRlci0+Y2hpbGRfc2V0dXApIChzaXR0ZXItPnVzZXJfZGF0YSk7CisgICAgfQorCiAgIF9kYnVzX3ZlcmJvc2UgKCJiYWJ5c2l0dGVyOiBzcGF3bmluZyAlc1xuIiwgc2l0dGVyLT5sb2dfbmFtZSk7CiAKICAgUElORygpOwpAQCAtNjMyLDYgKzY1NCwxMCBAQAogICAgICAgc2l0dGVyLT5jaGlsZF9oYW5kbGUgPSBOVUxMOwogICAgIH0KIAorI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCisgIFNldEV2ZW50IChzaXR0ZXItPmVuZF9zeW5jX2V2ZW50KTsKKyNlbmRpZgorCiAgIFBJTkcoKTsKICAgc2VuZCAoc2l0dGVyLT5zb2NrZXRfdG9fbWFpbi5zb2NrLCAiICIsIDEsIDApOwogCkBAIC02NDMsMTQgKzY2OSwxNCBAQAogZGJ1c19ib29sX3QKIF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoREJ1c0JhYnlzaXR0ZXIgICAgICAgICAgICoqc2l0dGVyX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgKmxvZ19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAqIGNvbnN0ICphcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgKiphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgKiplbnZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzU3Bhd25GbGFncyAgICAgICAgICAgICBmbGFncyBfREJVU19HTlVDX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduQ2hpbGRTZXR1cEZ1bmMgICAgY2hpbGRfc2V0dXAgX0RCVVNfR05VQ19VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YSBfREJVU19HTlVDX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduQ2hpbGRTZXR1cEZ1bmMgICAgY2hpbGRfc2V0dXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAgICAgICAgICAqZXJyb3IpCiB7CiAgIERCdXNCYWJ5c2l0dGVyICpzaXR0ZXI7CisgIEhBTkRMRSBzaXR0ZXJfdGhyZWFkOwogICBEV09SRCBzaXR0ZXJfdGhyZWFkX2lkOwogICAKICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7CkBAIC02NjcsNiArNjkzLDkgQEAKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKKyAgc2l0dGVyLT5jaGlsZF9zZXR1cCA9IGNoaWxkX3NldHVwOworICBzaXR0ZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwogICBzaXR0ZXItPmxvZ19uYW1lID0gX2RidXNfc3RyZHVwIChsb2dfbmFtZSk7CiAgIGlmIChzaXR0ZXItPmxvZ19uYW1lID09IE5VTEwgJiYgbG9nX25hbWUgIT0gTlVMTCkKICAgICB7CkBAIC03MjEsMTYgKzc1MCwxNyBAQAogICBzaXR0ZXItPmVudnAgPSBlbnZwOwogCiAgIFBJTkcoKTsKLSAgc2l0dGVyLT50aHJlYWRfaGFuZGxlID0gKEhBTkRMRSkgQ3JlYXRlVGhyZWFkIChOVUxMLCAwLCBiYWJ5c2l0dGVyLAorICBzaXR0ZXJfdGhyZWFkID0gKEhBTkRMRSkgQ3JlYXRlVGhyZWFkIChOVUxMLCAwLCBiYWJ5c2l0dGVyLAogICAgICAgICAgICAgICAgICAgX2RidXNfYmFieXNpdHRlcl9yZWYgKHNpdHRlciksIDAsICZzaXR0ZXJfdGhyZWFkX2lkKTsKIAotICBpZiAoc2l0dGVyLT50aHJlYWRfaGFuZGxlID09IE5VTEwpCisgIGlmIChzaXR0ZXJfdGhyZWFkID09IDApCiAgICAgewogICAgICAgUElORygpOwogICAgICAgZGJ1c19zZXRfZXJyb3JfY29uc3QgKGVycm9yLCBEQlVTX0VSUk9SX1NQQVdOX0ZPUktfRkFJTEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIG5ldyB0aHJlYWQiKTsKICAgICAgIGdvdG8gb3V0MDsKICAgICB9CisgIENsb3NlSGFuZGxlIChzaXR0ZXJfdGhyZWFkKTsKIAogICBQSU5HKCk7CiAgIFdhaXRGb3JTaW5nbGVPYmplY3QgKHNpdHRlci0+c3RhcnRfc3luY19ldmVudCwgSU5GSU5JVEUpOwpAQCAtNzYxLDEzICs3OTEsMjgzIEBACiAgIHNpdHRlci0+ZmluaXNoZWRfZGF0YSA9IHVzZXJfZGF0YTsKIH0KIAorI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCisKK3N0YXRpYyBjaGFyICoKK2dldF90ZXN0X2V4ZWMgKGNvbnN0IGNoYXIgKmV4ZSwKKyAgICAgICAgICAgICAgIERCdXNTdHJpbmcgKnNjcmF0Y2hfc3BhY2UpCit7CisgIGNvbnN0IGNoYXIgKmRidXNfdGVzdF9leGVjOworCisgIGRidXNfdGVzdF9leGVjID0gX2RidXNfZ2V0ZW52ICgiREJVU19URVNUX0VYRUMiKTsKKworICBpZiAoZGJ1c190ZXN0X2V4ZWMgPT0gTlVMTCkKKyAgICBkYnVzX3Rlc3RfZXhlYyA9IERCVVNfVEVTVF9FWEVDOworCisgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKHNjcmF0Y2hfc3BhY2UpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKHNjcmF0Y2hfc3BhY2UsICIlcy8lcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c190ZXN0X2V4ZWMsIGV4ZSwgREJVU19FWEVFWFQpKQorICAgIHsKKyAgICAgIF9kYnVzX3N0cmluZ19mcmVlIChzY3JhdGNoX3NwYWNlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gX2RidXNfc3RyaW5nX2dldF9kYXRhIChzY3JhdGNoX3NwYWNlKTsKK30KKwogI2RlZmluZSBMSVZFX0NISUxEUkVOKHNpdHRlcikgKChzaXR0ZXIpLT5jaGlsZF9oYW5kbGUgIT0gTlVMTCkKIAotdm9pZAorc3RhdGljIHZvaWQKIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIpCiB7Ci0gIC8qIFRoZSB0aHJlYWQgdGVybWluYXRlcyBhZnRlciB0aGUgY2hpbGQgZG9lcy4gV2Ugd2FudCB0byB3YWl0IGZvciB0aGUgdGhyZWFkLAotICAgKiBub3QganVzdCB0aGUgY2hpbGQsIHRvIGF2b2lkIGRhdGEgcmFjZXMgYW5kIGVuc3VyZSB0aGF0IGl0IGhhcyBmcmVlZCBhbGwKLSAgICogaXRzIG1lbW9yeS4gKi8KLSAgV2FpdEZvclNpbmdsZU9iamVjdCAoc2l0dGVyLT50aHJlYWRfaGFuZGxlLCBJTkZJTklURSk7CisgIGlmIChzaXR0ZXItPmNoaWxkX2hhbmRsZSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChzaXR0ZXItPmVuZF9zeW5jX2V2ZW50LCBJTkZJTklURSk7CiB9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdAorY2hlY2tfc3Bhd25fbm9uZXhpc3RlbnQgKHZvaWQgKmRhdGEpCit7CisgIGNoYXIgKmFyZ3ZbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgREJ1c0JhYnlzaXR0ZXIgKnNpdHRlcjsKKyAgREJ1c0Vycm9yIGVycm9yOworCisgIHNpdHRlciA9IE5VTEw7CisKKyAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgIC8qKiogVGVzdCBsYXVuY2hpbmcgbm9uZXhpc3RlbnQgYmluYXJ5ICovCisKKyAgYXJndlswXSA9ICIvdGhpcy9kb2VzL25vdC9leGlzdC8zMjU0MnNkZ2FmZ2FmZGciOworICBpZiAoX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICgmc2l0dGVyLCAic3Bhd25fbm9uZXhpc3RlbnQiLCBhcmd2LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKHNpdHRlcik7CisgICAgICBfZGJ1c19iYWJ5c2l0dGVyX3NldF9jaGlsZF9leGl0X2Vycm9yIChzaXR0ZXIsICZlcnJvcik7CisgICAgfQorCisgIGlmIChzaXR0ZXIpCisgICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKKworICBpZiAoIWRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBlcnJvciBsYXVuY2hpbmcgbm9uZXhpc3RlbnQgZXhlY3V0YWJsZVxuIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGlmICghKGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9FWEVDX0ZBSUxFRCkpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJOb3QgZXhwZWN0aW5nIGVycm9yIHdoZW4gbGF1bmNoaW5nIG5vbmV4aXN0ZW50IGV4ZWN1dGFibGU6ICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UpOworICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdAorY2hlY2tfc3Bhd25fc2VnZmF1bHQgKHZvaWQgKmRhdGEpCit7CisgIGNoYXIgKmFyZ3ZbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgREJ1c0JhYnlzaXR0ZXIgKnNpdHRlcjsKKyAgREJ1c0Vycm9yIGVycm9yOworICBEQnVzU3RyaW5nIGFyZ3YwOworCisgIHNpdHRlciA9IE5VTEw7CisKKyAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgIC8qKiogVGVzdCBsYXVuY2hpbmcgc2VnZmF1bHQgYmluYXJ5ICovCisKKyAgYXJndlswXSA9IGdldF90ZXN0X2V4ZWMgKCJ0ZXN0LXNlZ2ZhdWx0IiwgJmFyZ3YwKTsKKworICBpZiAoYXJndlswXSA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIE9PTSB3YXMgc2ltdWxhdGVkLCBuZXZlciBtaW5kICovCisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX3NlZ2ZhdWx0IiwgYXJndiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c19iYWJ5c2l0dGVyX2Jsb2NrX2Zvcl9jaGlsZF9leGl0IChzaXR0ZXIpOworICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOworICAgIH0KKworICBfZGJ1c19zdHJpbmdfZnJlZSAoJmFyZ3YwKTsKKworICBpZiAoc2l0dGVyKQorICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7CisKKyAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgbGF1bmNoaW5nIHNlZ2ZhdWx0aW5nIGJpbmFyeVxuIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGlmICghKGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9DSElMRF9FWElURUQpKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGxhdW5jaGluZyBzZWdmYXVsdGluZyBleGVjdXRhYmxlOiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZGJ1c19ib29sX3QKK2NoZWNrX3NwYXduX2V4aXQgKHZvaWQgKmRhdGEpCit7CisgIGNoYXIgKmFyZ3ZbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgREJ1c0JhYnlzaXR0ZXIgKnNpdHRlcjsKKyAgREJ1c0Vycm9yIGVycm9yOworICBEQnVzU3RyaW5nIGFyZ3YwOworCisgIHNpdHRlciA9IE5VTEw7CisKKyAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgIC8qKiogVGVzdCBsYXVuY2hpbmcgZXhpdCBmYWlsdXJlIGJpbmFyeSAqLworCisgIGFyZ3ZbMF0gPSBnZXRfdGVzdF9leGVjICgidGVzdC1leGl0IiwgJmFyZ3YwKTsKKworICBpZiAoYXJndlswXSA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIE9PTSB3YXMgc2ltdWxhdGVkLCBuZXZlciBtaW5kICovCisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX2V4aXQiLCBhcmd2LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKHNpdHRlcik7CisgICAgICBfZGJ1c19iYWJ5c2l0dGVyX3NldF9jaGlsZF9leGl0X2Vycm9yIChzaXR0ZXIsICZlcnJvcik7CisgICAgfQorCisgIF9kYnVzX3N0cmluZ19mcmVlICgmYXJndjApOworCisgIGlmIChzaXR0ZXIpCisgICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKKworICBpZiAoIWRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBlcnJvciBsYXVuY2hpbmcgYmluYXJ5IHRoYXQgZXhpdGVkIHdpdGggZmFpbHVyZSBjb2RlXG4iKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgaWYgKCEoZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX1NQQVdOX0NISUxEX0VYSVRFRCkpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJOb3QgZXhwZWN0aW5nIGVycm9yIHdoZW4gbGF1bmNoaW5nIGV4aXRpbmcgZXhlY3V0YWJsZTogJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7CisgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGRidXNfYm9vbF90CitjaGVja19zcGF3bl9hbmRfa2lsbCAodm9pZCAqZGF0YSkKK3sKKyAgY2hhciAqYXJndls0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICBEQnVzQmFieXNpdHRlciAqc2l0dGVyOworICBEQnVzRXJyb3IgZXJyb3I7CisgIERCdXNTdHJpbmcgYXJndjA7CisKKyAgc2l0dGVyID0gTlVMTDsKKworICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgLyoqKiBUZXN0IGxhdW5jaGluZyBzbGVlcGluZyBiaW5hcnkgdGhlbiBraWxsaW5nIGl0ICovCisKKyAgYXJndlswXSA9IGdldF90ZXN0X2V4ZWMgKCJ0ZXN0LXNsZWVwLWZvcmV2ZXIiLCAmYXJndjApOworCisgIGlmIChhcmd2WzBdID09IE5VTEwpCisgICAgeworICAgICAgLyogT09NIHdhcyBzaW11bGF0ZWQsIG5ldmVyIG1pbmQgKi8KKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICBpZiAoX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICgmc2l0dGVyLCAic3Bhd25fYW5kX2tpbGwiLCBhcmd2LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfa2lsbF9jaGlsZCAoc2l0dGVyKTsKKworICAgICAgX2RidXNfYmFieXNpdHRlcl9ibG9ja19mb3JfY2hpbGRfZXhpdCAoc2l0dGVyKTsKKworICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOworICAgIH0KKworICBfZGJ1c19zdHJpbmdfZnJlZSAoJmFyZ3YwKTsKKworICBpZiAoc2l0dGVyKQorICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7CisKKyAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgYWZ0ZXIga2lsbGluZyBzcGF3bmVkIGJpbmFyeVxuIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGlmICghKGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9DSElMRF9FWElURUQpKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGtpbGxpbmcgZXhlY3V0YWJsZTogJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7CisgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKworICByZXR1cm4gVFJVRTsKK30KKworZGJ1c19ib29sX3QKK19kYnVzX3NwYXduX3Rlc3QgKGNvbnN0IGNoYXIgKnRlc3RfZGF0YV9kaXIpCit7CisgIGlmICghX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKCJzcGF3bl9ub25leGlzdGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3NwYXduX25vbmV4aXN0ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogRG9uJ3QgcnVuIHRoZSBvYm5veGlvdXMgc2VnZmF1bHQgdGVzdCBieSBkZWZhdWx0LAorICAgKiBpdCdzIGEgcGFpbiB0byBoYXZlIHRvIGNsaWNrIGFsbCB0aG9zZSBlcnJvciBib3hlcy4KKyAgICovCisgIGlmIChnZXRlbnYgKCJET19TRUdGQVVMVF9URVNUIikpCisgICAgaWYgKCFfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoInNwYXduX3NlZ2ZhdWx0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zcGF3bl9zZWdmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgic3Bhd25fZXhpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3NwYXduX2V4aXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgic3Bhd25fYW5kX2tpbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zcGF3bl9hbmRfa2lsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3Bhd24uYyBiL2RidXMvZGJ1cy1zcGF3bi5jCmluZGV4IDhhYjUyOWEuLjQ1ZjNkODcgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zcGF3bi5jCisrKyBiL2RidXMvZGJ1cy1zcGF3bi5jCkBAIC00NSwxMiArNDUsNyBAQAogI2luY2x1ZGUgPHN5c3RlbWQvc2Qtam91cm5hbC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSMgaW5jbHVkZSA8Y3J0X2V4dGVybnMuaD4KLSMgZGVmaW5lIGVudmlyb24gKCpfTlNHZXRFbnZpcm9uICgpKQotI2VsaWYgIUhBVkVfREVDTF9FTlZJUk9OCiBleHRlcm4gY2hhciAqKmVudmlyb247Ci0jZW5kaWYKIAogLyoqCiAgKiBAYWRkdG9ncm91cCBEQnVzSW50ZXJuYWxzVXRpbHMKQEAgLTM3NCw5ICszNjksOSBAQAogICAgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUNISUxEKQotICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJCYWJ5c2l0dGVyIHByb2Nlc3Mgbm90IGF2YWlsYWJsZSB0byBiZSByZWFwZWQ7IHNob3VsZCBub3QgaGFwcGVuIik7CisgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkJhYnlzaXR0ZXIgcHJvY2VzcyBub3QgYXZhaWxhYmxlIHRvIGJlIHJlYXBlZDsgc2hvdWxkIG5vdCBoYXBwZW5cbiIpOwogICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgZXJyb3IgJWQgaW4gd2FpdHBpZCgpIGZvciBiYWJ5c2l0dGVyOiAlcyIsCisgICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIlVuZXhwZWN0ZWQgZXJyb3IgJWQgaW4gd2FpdHBpZCgpIGZvciBiYWJ5c2l0dGVyOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQpAQCAtNDIwLDcgKzQxNSw3IEBACiAgIHN3aXRjaCAocikKICAgICB7CiAgICAgY2FzZSBSRUFEX1NUQVRVU19FUlJPUjoKLSAgICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gcmVhZCBkYXRhIGZyb20gZmQgJWQ6ICVzIiwgZmQsIGVycm9yLm1lc3NhZ2UpOworICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byByZWFkIGRhdGEgZnJvbSBmZCAlZDogJXNcbiIsIGZkLCBlcnJvci5tZXNzYWdlKTsKICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKICAgICAgIHJldHVybiByOwogCkBAIC00MjksMTAgKzQyNCw2IEBACiAKICAgICBjYXNlIFJFQURfU1RBVFVTX09LOgogICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBSZWFkU3RhdHVzIik7Ci0gICAgICBicmVhazsKICAgICB9CiAgIAogICBpZiAoZ290ID09IDEpCkBAIC00NTAsMTYgKzQ0MSwxMyBAQAogICAgICAgICAgICAgc3dpdGNoIChyKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgUkVBRF9TVEFUVVNfRVJST1I6Ci0gICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byByZWFkIGFyZyBmcm9tIGZkICVkOiAlcyIsIGZkLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHJlYWQgYXJnIGZyb20gZmQgJWQ6ICVzXG4iLCBmZCwgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICAgICBjYXNlIFJFQURfU1RBVFVTX0VPRjoKICAgICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgICAgICAgY2FzZSBSRUFEX1NUQVRVU19PSzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIFJlYWRTdGF0dXMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZ290ID09IDEpCkBAIC01MTMsMTYgKzUwMSwxMyBAQAogICAgICAgICAgICAgc3dpdGNoIChyKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgUkVBRF9TVEFUVVNfRVJST1I6Ci0gICAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byByZWFkIFBJRCBmcm9tIGZkICVkOiAlcyIsIGZkLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHJlYWQgUElEIGZyb20gZmQgJWQ6ICVzXG4iLCBmZCwgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICAgICBjYXNlIFJFQURfU1RBVFVTX0VPRjoKICAgICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgICAgICAgY2FzZSBSRUFEX1NUQVRVU19PSzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIFJlYWRTdGF0dXMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXR0ZXItPmdyYW5kY2hpbGRfcGlkID0gcGlkOwpAQCAtNTMxLDcgKzUxNiw3IEBACiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIF9kYnVzX3dhcm4gKCJVbmtub3duIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBiYWJ5c2l0dGVyIHByb2Nlc3MiKTsKKyAgICAgICAgICBfZGJ1c193YXJuICgiVW5rbm93biBtZXNzYWdlIHJlY2VpdmVkIGZyb20gYmFieXNpdHRlciBwcm9jZXNzXG4iKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTk3NSw3ICs5NjAsNyBAQAogICAgICAgICBnb3RvIGFnYWluOwogICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHBpcGUhIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byB3cml0ZSBkYXRhIHRvIHBpcGUhXG4iKTsKICAgICAgICAgICBleGl0ICgxKTsgLyogZ2l2ZSB1cCwgd2Ugc3VjayAqLwogICAgICAgICB9CiAgICAgfQpAQCAtOTg2LDggKzk3MSw2IEBACiAgICAgZ290byBhZ2FpbjsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVfZXJyX2FuZF9leGl0IChpbnQgZmQsIGludCBtc2cpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB3cml0ZV9lcnJfYW5kX2V4aXQgKGludCBmZCwgaW50IG1zZykKIHsKQEAgLTEwMDgsOCArOTkxLDYgQEAKICAgZG9fd3JpdGUgKGZkLCAmcGlkLCBzaXplb2YgKHBpZCkpOwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZV9zdGF0dXNfYW5kX2V4aXQgKGludCBmZCwgaW50IHN0YXR1cykgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHdyaXRlX3N0YXR1c19hbmRfZXhpdCAoaW50IGZkLCBpbnQgc3RhdHVzKQogewpAQCAtMTAyMSwxNiArMTAwMiwxMCBAQAogICBleGl0ICgwKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fZXhlYyAoaW50ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9lcnJfcmVwb3J0X2ZkLAotICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAqIGNvbnN0ICphcmd2LAotICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAqIGNvbnN0ICplbnZwLAotICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduQ2hpbGRTZXR1cEZ1bmMgICBjaGlsZF9zZXR1cCwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAqdXNlcl9kYXRhKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAogZG9fZXhlYyAoaW50ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9lcnJfcmVwb3J0X2ZkLAotCSBjaGFyICAgICAgICAgICAgICogY29uc3QgKmFyZ3YsCi0JIGNoYXIgICAgICAgICAgICAgKiBjb25zdCAqZW52cCwKKwkgY2hhciAgICAgICAgICAgICAgICAgICAgKiphcmd2LAorCSBjaGFyICAgICAgICAgICAgICAgICAgICAqKmVudnAsCiAJIERCdXNTcGF3bkNoaWxkU2V0dXBGdW5jICAgY2hpbGRfc2V0dXAsCiAJIHZvaWQgICAgICAgICAgICAgICAgICAgICAqdXNlcl9kYXRhKQogewpAQCAtMTA1OCw3ICsxMDMzLDcgQEAKICAgICAgIHJldHZhbCA9IGZjbnRsIChpLCBGX0dFVEZEKTsKIAogICAgICAgaWYgKHJldHZhbCAhPSAtMSAmJiAhKHJldHZhbCAmIEZEX0NMT0VYRUMpKQotICAgICAgICBfZGJ1c193YXJuICgiRmQgJWQgZGlkIG5vdCBoYXZlIHRoZSBjbG9zZS1vbi1leGVjIGZsYWcgc2V0ISIsIGkpOworICAgICAgICBfZGJ1c193YXJuICgiRmQgJWQgZGlkIG5vdCBoYXZlIHRoZSBjbG9zZS1vbi1leGVjIGZsYWcgc2V0IVxuIiwgaSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTExMDIsNyArMTA3Nyw3IEBACiAgIGVsc2UgaWYgKHJldCA8IDApCiAgICAgewogICAgICAgLyogVGhpcyBpc24ndCBzdXBwb3NlZCB0byBoYXBwZW4uICovCi0gICAgICBfZGJ1c193YXJuICgidW5leHBlY3RlZCB3YWl0cGlkKCkgZmFpbHVyZSBpbiBjaGVja19iYWJ5c2l0X2V2ZW50cygpOiAlcyIsCisgICAgICBfZGJ1c193YXJuICgidW5leHBlY3RlZCB3YWl0cGlkKCkgZmFpbHVyZSBpbiBjaGVja19iYWJ5c2l0X2V2ZW50cygpOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmVycm9yIChlcnJubykpOwogICAgICAgZXhpdCAoMSk7CiAgICAgfQpAQCAtMTExNSw3ICsxMDkwLDcgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgid2FpdHBpZCgpIHJlYXBlZCBwaWQgJWQgdGhhdCB3ZSd2ZSBuZXZlciBoZWFyZCBvZiIsCisgICAgICBfZGJ1c193YXJuICgid2FpdHBpZCgpIHJlYXBlZCBwaWQgJWQgdGhhdCB3ZSd2ZSBuZXZlciBoZWFyZCBvZlxuIiwKICAgICAgICAgICAgICAgICAgIChpbnQpIHJldCk7CiAgICAgICBleGl0ICgxKTsKICAgICB9CkBAIC0xMTM4LDIyICsxMTEzLDEzIEBACiBzdGF0aWMgdm9pZAogYmFieXNpdF9zaWduYWxfaGFuZGxlciAoaW50IHNpZ25vKQogewotICAvKiBTaWduYWwgaGFuZGxlcnMgdGhhdCBtaWdodCBzZXQgZXJybm8gbXVzdCBzYXZlIGFuZCByZXN0b3JlIHRoZSBlcnJubwotICAgKiB0aGF0IHRoZSBpbnRlcnJ1cHRlZCBmdW5jdGlvbiBtaWdodCBoYXZlIGJlZW4gcmVseWluZyBvbi4gKi8KLSAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CiAgIGNoYXIgYiA9ICdcMCc7Ci0KICBhZ2FpbjoKICAgaWYgKHdyaXRlIChiYWJ5c2l0X3NpZ2NobGRfcGlwZSwgJmIsIDEpIDw9IDApIAogICAgIGlmIChlcnJubyA9PSBFSU5UUikKICAgICAgIGdvdG8gYWdhaW47Ci0KLSAgZXJybm8gPSBzYXZlZF9lcnJubzsKIH0KIAotc3RhdGljIHZvaWQgYmFieXNpdCAocGlkX3QgZ3JhbmRjaGlsZF9waWQsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgICBwYXJlbnRfcGlwZSkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIGJhYnlzaXQgKHBpZF90IGdyYW5kY2hpbGRfcGlkLAogICAgICAgICAgaW50ICAgcGFyZW50X3BpcGUpCkBAIC0xMTcyLDcgKzExMzgsNyBAQAogICAgKi8KICAgaWYgKHBpcGUgKHNpZ2NobGRfcGlwZSkgPCAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm4gKCJOb3QgZW5vdWdoIGZpbGUgZGVzY3JpcHRvcnMgdG8gY3JlYXRlIHBpcGUgaW4gYmFieXNpdHRlciBwcm9jZXNzIik7CisgICAgICBfZGJ1c193YXJuICgiTm90IGVub3VnaCBmaWxlIGRlc2NyaXB0b3JzIHRvIGNyZWF0ZSBwaXBlIGluIGJhYnlzaXR0ZXIgcHJvY2Vzc1xuIik7CiAgICAgICBleGl0ICgxKTsKICAgICB9CiAKQEAgLTExOTgsNyArMTE2NCw3IEBACiAgICAgICAKICAgICAgIGlmIChfZGJ1c19wb2xsIChwZmRzLCBfREJVU19OX0VMRU1FTlRTIChwZmRzKSwgLTEpIDwgMCAmJiBlcnJubyAhPSBFSU5UUikKICAgICAgICAgewotICAgICAgICAgIF9kYnVzX3dhcm4gKCJfZGJ1c19wb2xsKCkgZXJyb3I6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgX2RidXNfd2FybiAoIl9kYnVzX3BvbGwoKSBlcnJvcjogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOwogICAgICAgICAgIGV4aXQgKDEpOwogICAgICAgICB9CiAKQEAgLTEyMjIsMTQgKzExODgsOSBAQAogfQogCiAvKioKLSAqIFNwYXducyBhIG5ldyBwcm9jZXNzLgotICoKLSAqIE9uIFVuaXggcGxhdGZvcm1zLCB0aGUgY2hpbGRfc2V0dXAgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBnaXZlbgotICogdXNlcl9kYXRhIGFuZCBpcyBydW4gaW4gdGhlIGNoaWxkIGFmdGVyIGZvcmsoKSBidXQgYmVmb3JlIGNhbGxpbmcgZXhlYygpLgotICogVGhpcyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdWlkLCByZXNvdXJjZSBsaW1pdHMgYW5kIHNvIG9uLgotICogT24gV2luZG93cywgdGhpcyBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGZpdCB0aGUgbXVsdGktcHJvY2Vzc2luZyBtb2RlbAotICogKFdpbmRvd3MgZG9lcyB0aGUgZXF1aXZhbGVudCBvZiBmb3JrKCkgYW5kIGV4ZWMoKSBpbiBhIHNpbmdsZSBBUEkgY2FsbCksCi0gKiBhbmQgdGhlIGNoaWxkX3NldHVwIGZ1bmN0aW9uIGFuZCBpdHMgdXNlcl9kYXRhIGFyZSBpZ25vcmVkLgorICogU3Bhd25zIGEgbmV3IHByb2Nlc3MuIFRoZSBjaGlsZF9zZXR1cAorICogZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBnaXZlbiB1c2VyX2RhdGEgYW5kIGlzIHJ1biBpbiB0aGUgY2hpbGQKKyAqIGp1c3QgYmVmb3JlIGNhbGxpbmcgZXhlYygpLgogICoKICAqIEFsc28gY3JlYXRlcyBhICJiYWJ5c2l0dGVyIiB3aGljaCB0cmFja3MgdGhlIHN0YXR1cyBvZiB0aGUKICAqIGNoaWxkIHByb2Nlc3MsIGFkdmlzaW5nIHRoZSBwYXJlbnQgaWYgdGhlIGNoaWxkIGV4aXRzLgpAQCAtMTI0OCw5ICsxMjA5LDggQEAKIGRidXNfYm9vbF90CiBfZGJ1c19zcGF3bl9hc3luY193aXRoX2JhYnlzaXR0ZXIgKERCdXNCYWJ5c2l0dGVyICAgICAgICAgICoqc2l0dGVyX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAqbG9nX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgKiBjb25zdCAqYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKiphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqKmVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduRmxhZ3MgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduQ2hpbGRTZXR1cEZ1bmMgICBjaGlsZF9zZXR1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICp1c2VyX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgICAgICAgICAqZXJyb3IpCkBAIC0xMzUxLDE1ICsxMzExLDEyIEBACiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCiAjaWZkZWYgSEFWRV9TWVNURU1ECi0gIGlmIChmbGFncyAmIERCVVNfU1BBV05fUkVESVJFQ1RfT1VUUFVUKQotICAgIHsKLSAgICAgIC8qIFRoaXMgbWF5IGZhaWwsIGJ1dCBpdCdzIG5vdCBjcml0aWNhbC4KLSAgICAgICAqIEluIHBhcnRpY3VsYXIsIGlmIHdlIHdlcmUgY29tcGlsZWQgd2l0aCBqb3VybmFsZCBzdXBwb3J0IGJ1dCBhcmUgbm93Ci0gICAgICAgKiBydW5uaW5nIG9uIGEgbm9uLXN5c3RlbWQgc3lzdGVtLCB0aGlzIGlzIGdvaW5nIHRvIGZhaWwsIHNvIHdlCi0gICAgICAgKiBoYXZlIHRvIGNvcGUgZ3JhY2VmdWxseS4gKi8KLSAgICAgIGZkX291dCA9IHNkX2pvdXJuYWxfc3RyZWFtX2ZkIChzaXR0ZXItPmxvZ19uYW1lLCBMT0dfSU5GTywgRkFMU0UpOwotICAgICAgZmRfZXJyID0gc2Rfam91cm5hbF9zdHJlYW1fZmQgKHNpdHRlci0+bG9nX25hbWUsIExPR19XQVJOSU5HLCBGQUxTRSk7Ci0gICAgfQorICAvKiBUaGlzIG1heSBmYWlsLCBidXQgaXQncyBub3QgY3JpdGljYWwuCisgICAqIEluIHBhcnRpY3VsYXIsIGlmIHdlIHdlcmUgY29tcGlsZWQgd2l0aCBqb3VybmFsZCBzdXBwb3J0IGJ1dCBhcmUgbm93CisgICAqIHJ1bm5pbmcgb24gYSBub24tc3lzdGVtZCBzeXN0ZW0sIHRoaXMgaXMgZ29pbmcgdG8gZmFpbCwgc28gd2UKKyAgICogaGF2ZSB0byBjb3BlIGdyYWNlZnVsbHkuICovCisgIGZkX291dCA9IHNkX2pvdXJuYWxfc3RyZWFtX2ZkIChzaXR0ZXItPmxvZ19uYW1lLCBMT0dfSU5GTywgRkFMU0UpOworICBmZF9lcnIgPSBzZF9qb3VybmFsX3N0cmVhbV9mZCAoc2l0dGVyLT5sb2dfbmFtZSwgTE9HX1dBUk5JTkcsIEZBTFNFKTsKICNlbmRpZgogCiAgIHBpZCA9IGZvcmsgKCk7CkBAIC0xNDEzLDcgKzEzNzAsNyBAQAogICAgICAgICAgIGlmIChmZCA+PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAod3JpdGUgKGZkLCAiMCIsIHNpemVvZiAoY2hhcikpIDwgMCkKLSAgICAgICAgICAgICAgICBfZGJ1c193YXJuICgid3JpdGluZyBvb21fc2NvcmVfYWRqIGVycm9yOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICAgICAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJ3cml0aW5nIG9vbV9zY29yZV9hZGogZXJyb3I6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKICAgICAgICAgICAgICAgX2RidXNfY2xvc2UgKGZkLCBOVUxMKTsKICAgICAgICAgICAgIH0KICNlbmRpZgpAQCAtMTUwOCw5ICsxNDY1LDI1OSBAQAogCiAvKiogQH0gKi8KIAotdm9pZAorI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCisKK3N0YXRpYyBjaGFyICoKK2dldF90ZXN0X2V4ZWMgKGNvbnN0IGNoYXIgKmV4ZSwKKyAgICAgICAgICAgICAgIERCdXNTdHJpbmcgKnNjcmF0Y2hfc3BhY2UpCit7CisgIGNvbnN0IGNoYXIgKmRidXNfdGVzdF9leGVjOworCisgIGRidXNfdGVzdF9leGVjID0gX2RidXNfZ2V0ZW52ICgiREJVU19URVNUX0VYRUMiKTsKKworICBpZiAoZGJ1c190ZXN0X2V4ZWMgPT0gTlVMTCkKKyAgICBkYnVzX3Rlc3RfZXhlYyA9IERCVVNfVEVTVF9FWEVDOworCisgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKHNjcmF0Y2hfc3BhY2UpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKHNjcmF0Y2hfc3BhY2UsICIlcy8lcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c190ZXN0X2V4ZWMsIGV4ZSwgREJVU19FWEVFWFQpKQorICAgIHsKKyAgICAgIF9kYnVzX3N0cmluZ19mcmVlIChzY3JhdGNoX3NwYWNlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gX2RidXNfc3RyaW5nX2dldF9kYXRhIChzY3JhdGNoX3NwYWNlKTsKK30KKworc3RhdGljIHZvaWQKIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIpCiB7CiAgIHdoaWxlIChMSVZFX0NISUxEUkVOIChzaXR0ZXIpKQogICAgIGJhYnlzaXR0ZXJfaXRlcmF0aW9uIChzaXR0ZXIsIFRSVUUpOwogfQorCitzdGF0aWMgZGJ1c19ib29sX3QKK2NoZWNrX3NwYXduX25vbmV4aXN0ZW50ICh2b2lkICpkYXRhKQoreworICBjaGFyICphcmd2WzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgIERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIgPSBOVUxMOworICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7CisKKyAgLyoqKiBUZXN0IGxhdW5jaGluZyBub25leGlzdGVudCBiaW5hcnkgKi8KKyAgCisgIGFyZ3ZbMF0gPSAiL3RoaXMvZG9lcy9ub3QvZXhpc3QvMzI1NDJzZGdhZmdhZmRnIjsKKyAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX25vbmV4aXN0ZW50IiwgYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c19iYWJ5c2l0dGVyX2Jsb2NrX2Zvcl9jaGlsZF9leGl0IChzaXR0ZXIpOworICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOworICAgIH0KKworICBpZiAoc2l0dGVyKQorICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7CisKKyAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgbGF1bmNoaW5nIG5vbmV4aXN0ZW50IGV4ZWN1dGFibGVcbiIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICBpZiAoIShkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfU1BBV05fRVhFQ19GQUlMRUQpKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGxhdW5jaGluZyBub25leGlzdGVudCBleGVjdXRhYmxlOiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdAorY2hlY2tfc3Bhd25fc2VnZmF1bHQgKHZvaWQgKmRhdGEpCit7CisgIGNoYXIgKmFyZ3ZbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgREJ1c0JhYnlzaXR0ZXIgKnNpdHRlciA9IE5VTEw7CisgIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKKyAgREJ1c1N0cmluZyBhcmd2MDsKKworICAvKioqIFRlc3QgbGF1bmNoaW5nIHNlZ2ZhdWx0IGJpbmFyeSAqLworCisgIGFyZ3ZbMF0gPSBnZXRfdGVzdF9leGVjICgidGVzdC1zZWdmYXVsdCIsICZhcmd2MCk7CisKKyAgaWYgKGFyZ3ZbMF0gPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBPT00gd2FzIHNpbXVsYXRlZCwgbmV2ZXIgbWluZCAqLworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgIGlmIChfZGJ1c19zcGF3bl9hc3luY193aXRoX2JhYnlzaXR0ZXIgKCZzaXR0ZXIsICJzcGF3bl9zZWdmYXVsdCIsIGFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcikpCisgICAgeworICAgICAgX2RidXNfYmFieXNpdHRlcl9ibG9ja19mb3JfY2hpbGRfZXhpdCAoc2l0dGVyKTsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfc2V0X2NoaWxkX2V4aXRfZXJyb3IgKHNpdHRlciwgJmVycm9yKTsKKyAgICB9CisKKyAgX2RidXNfc3RyaW5nX2ZyZWUgKCZhcmd2MCk7CisKKyAgaWYgKHNpdHRlcikKKyAgICBfZGJ1c19iYWJ5c2l0dGVyX3VucmVmIChzaXR0ZXIpOworCisgIGlmICghZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgeworICAgICAgX2RidXNfd2FybiAoIkRpZCBub3QgZ2V0IGFuIGVycm9yIGxhdW5jaGluZyBzZWdmYXVsdGluZyBiaW5hcnlcbiIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICBpZiAoIShkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2hhc19uYW1lICgmZXJyb3IsIERCVVNfRVJST1JfU1BBV05fQ0hJTERfU0lHTkFMRUQpKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiTm90IGV4cGVjdGluZyBlcnJvciB3aGVuIGxhdW5jaGluZyBzZWdmYXVsdGluZyBleGVjdXRhYmxlOiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdAorY2hlY2tfc3Bhd25fZXhpdCAodm9pZCAqZGF0YSkKK3sKKyAgY2hhciAqYXJndls0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICBEQnVzQmFieXNpdHRlciAqc2l0dGVyID0gTlVMTDsKKyAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOworICBEQnVzU3RyaW5nIGFyZ3YwOworCisgIC8qKiogVGVzdCBsYXVuY2hpbmcgZXhpdCBmYWlsdXJlIGJpbmFyeSAqLworCisgIGFyZ3ZbMF0gPSBnZXRfdGVzdF9leGVjICgidGVzdC1leGl0IiwgJmFyZ3YwKTsKKworICBpZiAoYXJndlswXSA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIE9PTSB3YXMgc2ltdWxhdGVkLCBuZXZlciBtaW5kICovCisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKF9kYnVzX3NwYXduX2FzeW5jX3dpdGhfYmFieXNpdHRlciAoJnNpdHRlciwgInNwYXduX2V4aXQiLCBhcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKHNpdHRlcik7CisgICAgICBfZGJ1c19iYWJ5c2l0dGVyX3NldF9jaGlsZF9leGl0X2Vycm9yIChzaXR0ZXIsICZlcnJvcik7CisgICAgfQorCisgIF9kYnVzX3N0cmluZ19mcmVlICgmYXJndjApOworCisgIGlmIChzaXR0ZXIpCisgICAgX2RidXNfYmFieXNpdHRlcl91bnJlZiAoc2l0dGVyKTsKKworICBpZiAoIWRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJEaWQgbm90IGdldCBhbiBlcnJvciBsYXVuY2hpbmcgYmluYXJ5IHRoYXQgZXhpdGVkIHdpdGggZmFpbHVyZSBjb2RlXG4iKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgaWYgKCEoZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9oYXNfbmFtZSAoJmVycm9yLCBEQlVTX0VSUk9SX1NQQVdOX0NISUxEX0VYSVRFRCkpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJOb3QgZXhwZWN0aW5nIGVycm9yIHdoZW4gbGF1bmNoaW5nIGV4aXRpbmcgZXhlY3V0YWJsZTogJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7CisgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZGJ1c19ib29sX3QKK2NoZWNrX3NwYXduX2FuZF9raWxsICh2b2lkICpkYXRhKQoreworICBjaGFyICphcmd2WzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgIERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIgPSBOVUxMOworICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7CisgIERCdXNTdHJpbmcgYXJndjA7CisKKyAgLyoqKiBUZXN0IGxhdW5jaGluZyBzbGVlcGluZyBiaW5hcnkgdGhlbiBraWxsaW5nIGl0ICovCisKKyAgYXJndlswXSA9IGdldF90ZXN0X2V4ZWMgKCJ0ZXN0LXNsZWVwLWZvcmV2ZXIiLCAmYXJndjApOworCisgIGlmIChhcmd2WzBdID09IE5VTEwpCisgICAgeworICAgICAgLyogT09NIHdhcyBzaW11bGF0ZWQsIG5ldmVyIG1pbmQgKi8KKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICBpZiAoX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICgmc2l0dGVyLCAic3Bhd25fYW5kX2tpbGwiLCBhcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpKQorICAgIHsKKyAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfa2lsbF9jaGlsZCAoc2l0dGVyKTsKKyAgICAgIAorICAgICAgX2RidXNfYmFieXNpdHRlcl9ibG9ja19mb3JfY2hpbGRfZXhpdCAoc2l0dGVyKTsKKyAgICAgIAorICAgICAgX2RidXNfYmFieXNpdHRlcl9zZXRfY2hpbGRfZXhpdF9lcnJvciAoc2l0dGVyLCAmZXJyb3IpOworICAgIH0KKworICBfZGJ1c19zdHJpbmdfZnJlZSAoJmFyZ3YwKTsKKworICBpZiAoc2l0dGVyKQorICAgIF9kYnVzX2JhYnlzaXR0ZXJfdW5yZWYgKHNpdHRlcik7CisKKyAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICB7CisgICAgICBfZGJ1c193YXJuICgiRGlkIG5vdCBnZXQgYW4gZXJyb3IgYWZ0ZXIga2lsbGluZyBzcGF3bmVkIGJpbmFyeVxuIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIGlmICghKGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlkpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaGFzX25hbWUgKCZlcnJvciwgREJVU19FUlJPUl9TUEFXTl9DSElMRF9TSUdOQUxFRCkpKQorICAgIHsKKyAgICAgIF9kYnVzX3dhcm4gKCJOb3QgZXhwZWN0aW5nIGVycm9yIHdoZW4ga2lsbGluZyBleGVjdXRhYmxlOiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAKKyAgcmV0dXJuIFRSVUU7Cit9CisKK2RidXNfYm9vbF90CitfZGJ1c19zcGF3bl90ZXN0IChjb25zdCBjaGFyICp0ZXN0X2RhdGFfZGlyKQoreworICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgic3Bhd25fbm9uZXhpc3RlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zcGF3bl9ub25leGlzdGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmICghX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKCJzcGF3bl9zZWdmYXVsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3NwYXduX3NlZ2ZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoInNwYXduX2V4aXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zcGF3bl9leGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFfZGJ1c190ZXN0X29vbV9oYW5kbGluZyAoInNwYXduX2FuZF9raWxsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3Bhd25fYW5kX2tpbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKyAgCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3Bhd24uaCBiL2RidXMvZGJ1cy1zcGF3bi5oCmluZGV4IGIzNDMyNGQuLmU2YmFhZTkgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zcGF3bi5oCisrKyBiL2RidXMvZGJ1cy1zcGF3bi5oCkBAIC0zOCwxNiArMzgsMTAgQEAKIHR5cGVkZWYgdm9pZCAoKiBEQnVzQmFieXNpdHRlckZpbmlzaGVkRnVuYykgKERCdXNCYWJ5c2l0dGVyICpzaXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAqdXNlcl9kYXRhKTsKIAotdHlwZWRlZiBlbnVtIHsKLSAgREJVU19TUEFXTl9SRURJUkVDVF9PVVRQVVQgPSAoMSA8PCAwKSwKLSAgREJVU19TUEFXTl9OT05FID0gMAotfSBEQnVzU3Bhd25GbGFnczsKLQogZGJ1c19ib29sX3QgX2RidXNfc3Bhd25fYXN5bmNfd2l0aF9iYWJ5c2l0dGVyICAgICAoREJ1c0JhYnlzaXR0ZXIgICAgICAgICAgICoqc2l0dGVyX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICpsb2dfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICogY29uc3QgKmFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgKiphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICoqZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NwYXduRmxhZ3MgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzU3Bhd25DaGlsZFNldHVwRnVuYyAgICBjaGlsZF9zZXR1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgICAgICAgICAgKmVycm9yKTsKQEAgLTY4LDcgKzYyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNXYXRjaFRvZ2dsZWRGdW5jdGlvbiAgIHRvZ2dsZWRfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0ZyZWVGdW5jdGlvbiAgICAgICAgICAgZnJlZV9kYXRhX2Z1bmN0aW9uKTsKLXZvaWQgICAgICAgIF9kYnVzX2JhYnlzaXR0ZXJfYmxvY2tfZm9yX2NoaWxkX2V4aXQgKERCdXNCYWJ5c2l0dGVyICAgICAgICAgICAgKnNpdHRlcik7CiAKIERCVVNfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zdHJpbmctdXRpbC5jIGIvZGJ1cy9kYnVzLXN0cmluZy11dGlsLmMKaW5kZXggODViYzU3MC4uM2JhYmMwNSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXN0cmluZy11dGlsLmMKKysrIGIvZGJ1cy9kYnVzLXN0cmluZy11dGlsLmMKQEAgLTEyMCw4ICsxMjAsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIHN0YXRpYyB2b2lkCi10ZXN0X2hleF9yb3VuZHRyaXAgKGNvbnN0IGNoYXIgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIGxlbikKK3Rlc3RfaGV4X3JvdW5kdHJpcCAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgbGVuKQogewogICBEQnVzU3RyaW5nIG9yaWc7CiAgIERCdXNTdHJpbmcgZW5jb2RlZDsKQEAgLTE3MCw4ICsxNzAsOCBAQAogICBfZGJ1c19zdHJpbmdfZnJlZSAoJmRlY29kZWQpOyAgCiB9CiAKLXR5cGVkZWYgdm9pZCAoKiBUZXN0Um91bmR0cmlwRnVuYykgKGNvbnN0IGNoYXIgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBsZW4pOwordHlwZWRlZiB2b2lkICgqIFRlc3RSb3VuZHRyaXBGdW5jKSAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgIGxlbik7CiBzdGF0aWMgdm9pZAogdGVzdF9yb3VuZHRyaXBzIChUZXN0Um91bmR0cmlwRnVuYyBmdW5jKQogewpAQCAtMjAwLDEzICsyMDAsMTMgQEAKICAgICBpID0gMDsKICAgICB3aGlsZSAoaSA8IF9EQlVTX05fRUxFTUVOVFMgKGJ1ZikpCiAgICAgICB7Ci0gICAgICAgIGJ1ZltpXSA9IChpICYgMHhmZik7CisgICAgICAgIGJ1ZltpXSA9IGk7CiAgICAgICAgICsraTsKICAgICAgIH0KICAgICBpID0gMDsKICAgICB3aGlsZSAoaSA8IF9EQlVTX05fRUxFTUVOVFMgKGJ1ZikpCiAgICAgICB7Ci0gICAgICAgICgqIGZ1bmMpICgoY29uc3QgY2hhciAqKSBidWYsIGkpOworICAgICAgICAoKiBmdW5jKSAoYnVmLCBpKTsKICAgICAgICAgKytpOwogICAgICAgfQogICB9CkBAIC0zMTIsMTIgKzMxMiwxMiBAQAogICB3aGlsZSAoaSA8IDEwKQogICAgIHsKICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJnN0ciwgImEiKSkKLSAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiZmFpbGVkIHRvIGFwcGVuZCBzdHJpbmcgdG8gc3RyaW5nIik7CisgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImZhaWxlZCB0byBhcHBlbmQgc3RyaW5nIHRvIHN0cmluZ1xuIik7CiAKICAgICAgIF9kYnVzX2Fzc2VydCAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZzdHIpID09IGkgKiAyICsgMSk7CiAKICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZF9ieXRlICgmc3RyLCAnYicpKQotICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJmYWlsZWQgdG8gYXBwZW5kIGJ5dGUgdG8gc3RyaW5nIik7CisgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImZhaWxlZCB0byBhcHBlbmQgYnl0ZSB0byBzdHJpbmdcbiIpOwogCiAgICAgICBfZGJ1c19hc3NlcnQgKF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmc3RyKSA9PSBpICogMiArIDIpOwogICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zdHJpbmcuaCBiL2RidXMvZGJ1cy1zdHJpbmcuaAppbmRleCAxYzAxNzcwLi5hZGY3MDliIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc3RyaW5nLmgKKysrIGIvZGJ1cy9kYnVzLXN0cmluZy5oCkBAIC0yMDMsNyArMjAzLDcgQEAKIERCVVNfUFJJVkFURV9FWFBPUlQKIGRidXNfYm9vbF90ICAgX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGZfdmFsaXN0ICAoREJ1c1N0cmluZyAgICAgICAgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIGFyZ3MpIF9EQlVTX0dOVUNfUFJJTlRGICgyLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIGFyZ3MpOwogZGJ1c19ib29sX3QgICBfZGJ1c19zdHJpbmdfaW5zZXJ0XzJfYWxpZ25lZCAgICAgIChEQnVzU3RyaW5nICAgICAgICAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgaW5zZXJ0X2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG9jdGV0c1syXSk7CkBAIC0zNjEsMjkgKzM2MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICBsZW4pOwogdm9pZCAgICAgICAgICBfZGJ1c19zdHJpbmdfemVybyAgICAgICAgICAgICAgICAgIChEQnVzU3RyaW5nICAgICAgICAqc3RyKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLV9kYnVzX3N0cmluZ19nZXRfdWRhdGEgKERCdXNTdHJpbmcgKnN0cikKLXsKLSAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIF9kYnVzX3N0cmluZ19nZXRfZGF0YSAoc3RyKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLV9kYnVzX3N0cmluZ19nZXRfdWRhdGFfbGVuIChEQnVzU3RyaW5nICpzdHIsIGludCBzdGFydCwgaW50IGxlbikKLXsKLSAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIF9kYnVzX3N0cmluZ19nZXRfZGF0YV9sZW4gKHN0ciwgc3RhcnQsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgdW5zaWduZWQgY2hhciAqCi1fZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhIChjb25zdCBEQnVzU3RyaW5nICpzdHIpCi17Ci0gIHJldHVybiAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHN0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgdW5zaWduZWQgY2hhciAqCi1fZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X3VkYXRhX2xlbiAoY29uc3QgREJ1c1N0cmluZyAqc3RyLCBpbnQgc3RhcnQsIGludCBsZW4pCi17Ci0gIHJldHVybiAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGFfbGVuIChzdHIsIHN0YXJ0LCBsZW4pOwotfQogCiAvKioKICAqIFdlIGFsbG9jYXRlIDEgYnl0ZSBmb3IgbnVsIHRlcm1pbmF0aW9uLCBwbHVzIDcgYnl0ZXMgZm9yIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3lzZGVwcy1wdGhyZWFkLmMgYi9kYnVzL2RidXMtc3lzZGVwcy1wdGhyZWFkLmMKaW5kZXggZTFjMTRmOS4uMTMwMGVjMyAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXN5c2RlcHMtcHRocmVhZC5jCisrKyBiL2RidXMvZGJ1cy1zeXNkZXBzLXB0aHJlYWQuYwpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmZGVmIEhBVkVfRVJSTk9fSApAQCAtNzMsNyArNzIsNyBAQAogI2RlZmluZSBQVEhSRUFEX0NIRUNLKGZ1bmNfbmFtZSwgcmVzdWx0X29yX2NhbGwpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGludCB0bXAgPSAocmVzdWx0X29yX2NhbGwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICh0bXAgIT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJwdGhyZWFkIGZ1bmN0aW9uICVzIGZhaWxlZCB3aXRoICVkICVzIGluICVzIiwgICAgICAgICAgXAorICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJwdGhyZWFkIGZ1bmN0aW9uICVzIGZhaWxlZCB3aXRoICVkICVzIGluICVzXG4iLCAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgdG1wLCBzdHJlcnJvcih0bXApLCBfREJVU19GVU5DVElPTl9OQU1FKTsgICAgXAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKQEAgLTMwMSwyMCArMzAwLDMgQEAKIHsKICAgcHRocmVhZF9tdXRleF91bmxvY2sgKCZpbml0X211dGV4KTsKIH0KLQotI2lmZGVmIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERQotLyoKLSAqIElmIHdlIGNhbiBpZGVudGlmeSB0aGUgY3VycmVudCBwcm9jZXNzIGFuZC9vciB0aHJlYWQsIHByaW50IHRoZW0gdG8gc3RkZXJyIGZvbGxvd2VkIGJ5IGEgY29sb24uCi0gKi8KLXZvaWQKLV9kYnVzX3ByaW50X3RocmVhZCAodm9pZCkKLXsKLSNpZmRlZiBfX2xpbnV4X18KLSAgLyogd2Uga25vdyBhIHB0aHJlYWRfdCBpcyBudW1lcmljIG9uIExpbnV4ICovCi0gIGZwcmludGYgKHN0ZGVyciwgIiVsdTogMHglbHg6ICIsIF9kYnVzX3BpZF9mb3JfbG9nICgpLCAodW5zaWduZWQgbG9uZykgcHRocmVhZF9zZWxmICgpKTsKLSNlbHNlCi0gIC8qIGluIHByaW5jaXBsZSBwdGhyZWFkX3QgaXNuJ3QgcmVxdWlyZWQgdG8gYmUgcHJpbnRhYmxlICovCi0gIGZwcmludGYgKHN0ZGVyciwgIiVsdTogIiwgX2RidXNfcGlkX2Zvcl9sb2cgKCkpOwotI2VuZGlmCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zeXNkZXBzLXRocmVhZC13aW4uYyBiL2RidXMvZGJ1cy1zeXNkZXBzLXRocmVhZC13aW4uYwppbmRleCBiNWMwOThjLi4wODg3YTU0IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc3lzZGVwcy10aHJlYWQtd2luLmMKKysrIGIvZGJ1cy9kYnVzLXN5c2RlcHMtdGhyZWFkLXdpbi5jCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSAiZGJ1cy10aHJlYWRzLmgiCiAjaW5jbHVkZSAiZGJ1cy1saXN0LmgiCiAKLSNpbmNsdWRlIDxzdGRpby5oPgotCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBzdGF0aWMgZGJ1c19ib29sX3QgZ2xvYmFsX2luaXRfZG9uZSA9IEZBTFNFOwpAQCAtMzAyLDExICszMDAsMyBAQAogICBfZGJ1c19hc3NlcnQgKGdsb2JhbF9pbml0X2RvbmUpOwogICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmluaXRfbG9jayk7CiB9Ci0KLSNpZmRlZiBEQlVTX0VOQUJMRV9WRVJCT1NFX01PREUKLXZvaWQKLV9kYnVzX3ByaW50X3RocmVhZCAodm9pZCkKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJWx1OiAweCUwNGx4OiAiLCBfZGJ1c19waWRfZm9yX2xvZyAoKSwgR2V0Q3VycmVudFRocmVhZElkICgpKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXN5c2RlcHMtdW5peC5jIGIvZGJ1cy9kYnVzLXN5c2RlcHMtdW5peC5jCmluZGV4IGU1MTFhZmMuLjZiYmE1NTcgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zeXNkZXBzLXVuaXguYworKysgYi9kYnVzL2RidXMtc3lzZGVwcy11bml4LmMKQEAgLTYyLDkgKzYyLDYgQEAKICNpZmRlZiBIQVZFX0VSUk5PX0gKICNpbmNsdWRlIDxlcnJuby5oPgogI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNMT0dfSAotI2luY2x1ZGUgPHN5c2xvZy5oPgotI2VuZGlmCiAjaWZkZWYgSEFWRV9XUklURVYKICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjZW5kaWYKQEAgLTM1OSw3ICszNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyAgICAgICAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICpmZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICpuX2ZkcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAqbl9mZHMpIHsKICNpZm5kZWYgSEFWRV9VTklYX0ZEX1BBU1NJTkcKICAgaW50IHI7CiAKQEAgLTM3Niw3ICszNzMsNyBAQAogICBzdHJ1Y3QgaW92ZWMgaW92OwogCiAgIF9kYnVzX2Fzc2VydCAoY291bnQgPj0gMCk7Ci0gIF9kYnVzX2Fzc2VydCAoKm5fZmRzIDw9IERCVVNfTUFYSU1VTV9NRVNTQUdFX1VOSVhfRkRTKTsKKyAgX2RidXNfYXNzZXJ0ICgqbl9mZHMgPj0gMCk7CiAKICAgc3RhcnQgPSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoYnVmZmVyKTsKIApAQCAtNDQxLDMxICs0MzgsMTMgQEAKICAgICAgICAgICAgIHNpemVfdCBpOwogICAgICAgICAgICAgaW50ICpwYXlsb2FkID0gKGludCAqKSBDTVNHX0RBVEEgKGNtKTsKICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkX2xlbl9ieXRlcyA9IChjbS0+Y21zZ19sZW4gLSBDTVNHX0xFTiAoMCkpOwotICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRfbGVuX2ZkczsKKyAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkX2xlbl9mZHMgPSBwYXlsb2FkX2xlbl9ieXRlcyAvIHNpemVvZiAoaW50KTsKICAgICAgICAgICAgIHNpemVfdCBmZHNfdG9fdXNlOwogCi0gICAgICAgICAgICAvKiBFdmVyeSB1bnNpZ25lZCBpbnQgZml0cyBpbiBhIHNpemVfdCB3aXRob3V0IHRydW5jYXRpb24sIHNvCisgICAgICAgICAgICAvKiBFdmVyeSBub24tbmVnYXRpdmUgaW50IGZpdHMgaW4gYSBzaXplX3Qgd2l0aG91dCB0cnVuY2F0aW9uLAorICAgICAgICAgICAgICogYW5kIHdlIGFscmVhZHkga25vdyB0aGF0ICpuX2ZkcyBpcyBub24tbmVnYXRpdmUsIHNvCiAgICAgICAgICAgICAgKiBjYXN0aW5nIChzaXplX3QpICpuX2ZkcyBpcyBPSyAqLwotICAgICAgICAgICAgX0RCVVNfU1RBVElDX0FTU0VSVCAoc2l6ZW9mIChzaXplX3QpID49IHNpemVvZiAodW5zaWduZWQgaW50KSk7Ci0KLSAgICAgICAgICAgIGlmICgobS5tc2dfZmxhZ3MgJiBNU0dfQ1RSVU5DKSAmJiBDTVNHX05YVEhEUigmbSwgY20pID09IE5VTEwgJiYKLSAgICAgICAgICAgICAgKGNoYXIgKikgcGF5bG9hZCArIHBheWxvYWRfbGVuX2J5dGVzID4KLSAgICAgICAgICAgICAgKGNoYXIgKikgbS5tc2dfY29udHJvbCArIG0ubXNnX2NvbnRyb2xsZW4pCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBsYXN0IGNtc2cgaW4gYSB0cnVuY2F0ZWQgbWVzc2FnZSBhbmQgdXNpbmcKLSAgICAgICAgICAgICAgICAgKiBjbXNnX2xlbiB3b3VsZCBhcHBhcmVudGx5IG92ZXJydW4gdGhlIGFsbG9jYXRlZCBidWZmZXIuCi0gICAgICAgICAgICAgICAgICogU29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaWxsdW1vcyBhbmQgU29sYXJpcyBhcmUga25vd24pIGRvCi0gICAgICAgICAgICAgICAgICogbm90IGFkanVzdCBjbXNnX2xlbiBpbiB0aGUgbGFzdCBjbXNnIHdoZW4gdHJ1bmNhdGlvbiBvY2N1cnMuCi0gICAgICAgICAgICAgICAgICogQWRqdXN0IHRoZSBwYXlsb2FkIGxlbmd0aCBoZXJlLiBUaGUgY2FsY3VsYXRpb24gZm9yCi0gICAgICAgICAgICAgICAgICogcGF5bG9hZF9sZW5fZmRzIGJlbG93IHdpbGwgZGlzY2FyZCBhbnkgdHJhaWxpbmcgYnl0ZXMgdGhhdAotICAgICAgICAgICAgICAgICAqIGJlbG9uZyB0byBhbiBpbmNvbXBsZXRlIGZpbGUgZGVzY3JpcHRvciAtIHRoZSBrZXJuZWwgd2lsbAotICAgICAgICAgICAgICAgICAqIGhhdmUgYWxyZWFkeSBjbG9zZWQgdGhhdCAoYXQgbGVhc3QgZm9yIGlsbHVtb3MgYW5kIFNvbGFyaXMpCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuX2J5dGVzID0gbS5tc2dfY29udHJvbGxlbiAtCi0gICAgICAgICAgICAgICAgICAgKChjaGFyICopIHBheWxvYWQgLSAoY2hhciAqKSBtLm1zZ19jb250cm9sKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXlsb2FkX2xlbl9mZHMgPSBwYXlsb2FkX2xlbl9ieXRlcyAvIHNpemVvZiAoaW50KTsKKyAgICAgICAgICAgIF9EQlVTX1NUQVRJQ19BU1NFUlQgKHNpemVvZiAoc2l6ZV90KSA+PSBzaXplb2YgKGludCkpOwogCiAgICAgICAgICAgICBpZiAoX0RCVVNfTElLRUxZIChwYXlsb2FkX2xlbl9mZHMgPD0gKHNpemVfdCkgKm5fZmRzKSkKICAgICAgICAgICAgICAgewpAQCAtNDkxLDEwICs0NzAsOSBAQAogCiAgICAgICAgICAgICBtZW1jcHkgKGZkcywgcGF5bG9hZCwgZmRzX3RvX3VzZSAqIHNpemVvZiAoaW50KSk7CiAgICAgICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAvKiBUaGlzIG5hcnJvd2luZyBjYXN0IGZyb20gc2l6ZV90IHRvIHVuc2lnbmVkIGludCBjYW5ub3QKLSAgICAgICAgICAgICAqIG92ZXJmbG93IGJlY2F1c2Ugd2UgaGF2ZSBjaG9zZW4gZmRzX3RvX3VzZQorICAgICAgICAgICAgLyogVGhpcyBjYW5ub3Qgb3ZlcmZsb3cgYmVjYXVzZSB3ZSBoYXZlIGNob3NlbiBmZHNfdG9fdXNlCiAgICAgICAgICAgICAgKiB0byBiZSA8PSAqbl9mZHMgKi8KLSAgICAgICAgICAgICpuX2ZkcyA9ICh1bnNpZ25lZCBpbnQpIGZkc190b191c2U7CisgICAgICAgICAgICAqbl9mZHMgPSAoaW50KSBmZHNfdG9fdXNlOwogCiAgICAgICAgICAgICAvKiBMaW51eCBkb2Vzbid0IHRlbGwgdXMgd2hldGhlciBNU0dfQ01TR19DTE9FWEVDIGFjdHVhbGx5CiAgICAgICAgICAgICAgICB3b3JrZWQsIGhlbmNlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGlzIGxpc3QgYW5kIHNldApAQCAtNTEwLDcgKzQ4OCw3IEBACiAKICAgICAgIGlmIChtLm1zZ19mbGFncyAmIE1TR19DVFJVTkMpCiAgICAgICAgIHsKLSAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgICBpbnQgaTsKIAogICAgICAgICAgIC8qIEhtbSwgYXBwYXJlbnRseSB0aGUgY29udHJvbCBkYXRhIHdhcyB0cnVuY2F0ZWQuIFRoZSBiYWQKICAgICAgICAgICAgICB0aGluZyBpcyB0aGF0IHdlIG1pZ2h0IGhhdmUgY29tcGxldGVseSBsb3N0IGEgY291cGxlIG9mIGZkcwpAQCAtOTQwLDcgKzkxOCw2IEBACiAgIGludCBmZDsKICAgc2l6ZV90IHBhdGhfbGVuOwogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLSAgX0RCVVNfU1RBVElDX0FTU0VSVCAoc2l6ZW9mIChhZGRyLnN1bl9wYXRoKSA+IF9EQlVTX01BWF9TVU5fUEFUSF9MRU5HVEgpOwogCiAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCkBAIC05NjEsNyArOTM4LDcgQEAKIAogICBpZiAoYWJzdHJhY3QpCiAgICAgewotI2lmZGVmIF9fbGludXhfXworI2lmZGVmIEhBVkVfQUJTVFJBQ1RfU09DS0VUUwogICAgICAgYWRkci5zdW5fcGF0aFswXSA9ICdcMCc7IC8qIHRoaXMgaXMgd2hhdCBzYXlzICJ1c2UgYWJzdHJhY3QiICovCiAgICAgICBwYXRoX2xlbisrOyAvKiBBY2NvdW50IGZvciB0aGUgZXh0cmEgbnVsIGJ5dGUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIHN1bl9wYXRoICovCiAKQEAgLTk3MywxNCArOTUwLDE0IEBACiAgICAgICAgICAgcmV0dXJuIC0xOwogCX0KIAotICAgICAgc3RybmNweSAoJmFkZHIuc3VuX3BhdGhbMV0sIHBhdGgsIHNpemVvZiAoYWRkci5zdW5fcGF0aCkgLSAyKTsKKyAgICAgIHN0cm5jcHkgKCZhZGRyLnN1bl9wYXRoWzFdLCBwYXRoLCBwYXRoX2xlbik7CiAgICAgICAvKiBfZGJ1c192ZXJib3NlX2J5dGVzIChhZGRyLnN1bl9wYXRoLCBzaXplb2YgKGFkZHIuc3VuX3BhdGgpKTsgKi8KLSNlbHNlIC8qICFfX2xpbnV4X18gKi8KKyNlbHNlIC8qIEhBVkVfQUJTVFJBQ1RfU09DS0VUUyAqLwogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsCiAgICAgICAgICAgICAgICAgICAgICAgIk9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBhYnN0cmFjdCBzb2NrZXQgbmFtZXNwYWNlXG4iKTsKICAgICAgIF9kYnVzX2Nsb3NlIChmZCwgTlVMTCk7CiAgICAgICByZXR1cm4gLTE7Ci0jZW5kaWYgLyogIV9fbGludXhfXyAqLworI2VuZGlmIC8qICEgSEFWRV9BQlNUUkFDVF9TT0NLRVRTICovCiAgICAgfQogICBlbHNlCiAgICAgewpAQCAtOTkyLDcgKzk2OSw3IEBACiAgICAgICAgICAgcmV0dXJuIC0xOwogCX0KIAotICAgICAgc3RybmNweSAoYWRkci5zdW5fcGF0aCwgcGF0aCwgc2l6ZW9mIChhZGRyLnN1bl9wYXRoKSAtIDEpOworICAgICAgc3RybmNweSAoYWRkci5zdW5fcGF0aCwgcGF0aCwgcGF0aF9sZW4pOwogICAgIH0KIAogICBpZiAoY29ubmVjdCAoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmYWRkciwgX0RCVVNfU1RSVUNUX09GRlNFVCAoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyBwYXRoX2xlbikgPCAwKQpAQCAtMTA5Nyw3ICsxMDc0LDcgQEAKIAogICAgICAgX2RidXNfY2xvc2VfYWxsICgpOwogCi0gICAgICBleGVjdnAgKHBhdGgsIChjaGFyICogY29uc3QgKikgYXJndik7CisgICAgICBleGVjdnAgKHBhdGgsIGFyZ3YpOwogCiAgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gZXhlY3V0ZSBwcm9jZXNzICVzOiAlc1xuIiwgcGF0aCwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAKQEAgLTExNDMsNyArMTEyMCw2IEBACiAgIGludCBsaXN0ZW5fZmQ7CiAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOwogICBzaXplX3QgcGF0aF9sZW47Ci0gIF9EQlVTX1NUQVRJQ19BU1NFUlQgKHNpemVvZiAoYWRkci5zdW5fcGF0aCkgPiBfREJVU19NQVhfU1VOX1BBVEhfTEVOR1RIKTsKIAogICBfREJVU19BU1NFUlRfRVJST1JfSVNfQ0xFQVIgKGVycm9yKTsKIApAQCAtMTE2Myw3ICsxMTM5LDcgQEAKIAogICBpZiAoYWJzdHJhY3QpCiAgICAgewotI2lmZGVmIF9fbGludXhfXworI2lmZGVmIEhBVkVfQUJTVFJBQ1RfU09DS0VUUwogICAgICAgLyogcmVtZW1iZXIgdGhhdCBhYnN0cmFjdCBuYW1lcyBhcmVuJ3QgbnVsLXRlcm1pbmF0ZWQgc28gd2UgcmVseQogICAgICAgICogb24gc3VuX3BhdGggYmVpbmcgZmlsbGVkIGluIHdpdGggemVyb2VzIGFib3ZlLgogICAgICAgICovCkBAIC0xMTc4LDE0ICsxMTU0LDE0IEBACiAgICAgICAgICAgcmV0dXJuIC0xOwogCX0KIAotICAgICAgc3RybmNweSAoJmFkZHIuc3VuX3BhdGhbMV0sIHBhdGgsIHNpemVvZiAoYWRkci5zdW5fcGF0aCkgLSAyKTsKKyAgICAgIHN0cm5jcHkgKCZhZGRyLnN1bl9wYXRoWzFdLCBwYXRoLCBwYXRoX2xlbik7CiAgICAgICAvKiBfZGJ1c192ZXJib3NlX2J5dGVzIChhZGRyLnN1bl9wYXRoLCBzaXplb2YgKGFkZHIuc3VuX3BhdGgpKTsgKi8KLSNlbHNlIC8qICFfX2xpbnV4X18gKi8KKyNlbHNlIC8qIEhBVkVfQUJTVFJBQ1RfU09DS0VUUyAqLwogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsCiAgICAgICAgICAgICAgICAgICAgICAgIk9wZXJhdGluZyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBhYnN0cmFjdCBzb2NrZXQgbmFtZXNwYWNlXG4iKTsKICAgICAgIF9kYnVzX2Nsb3NlIChsaXN0ZW5fZmQsIE5VTEwpOwogICAgICAgcmV0dXJuIC0xOwotI2VuZGlmIC8qICFfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiAhIEhBVkVfQUJTVFJBQ1RfU09DS0VUUyAqLwogICAgIH0KICAgZWxzZQogICAgIHsKQEAgLTEyMTUsNyArMTE5MSw3IEBACiAgICAgICAgICAgcmV0dXJuIC0xOwogCX0KIAotICAgICAgc3RybmNweSAoYWRkci5zdW5fcGF0aCwgcGF0aCwgc2l6ZW9mIChhZGRyLnN1bl9wYXRoKSAtIDEpOworICAgICAgc3RybmNweSAoYWRkci5zdW5fcGF0aCwgcGF0aCwgcGF0aF9sZW4pOwogICAgIH0KIAogICBpZiAoYmluZCAobGlzdGVuX2ZkLCAoc3RydWN0IHNvY2thZGRyKikgJmFkZHIsIF9EQlVTX1NUUlVDVF9PRkZTRVQgKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpICsgcGF0aF9sZW4pIDwgMCkKQEAgLTEyMjcsNyArMTIwMyw3IEBACiAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gIGlmIChsaXN0ZW4gKGxpc3Rlbl9mZCwgU09NQVhDT05OIC8qIGJhY2tsb2cgKi8pIDwgMCkKKyAgaWYgKGxpc3RlbiAobGlzdGVuX2ZkLCAzMCAvKiBiYWNrbG9nICovKSA8IDApCiAgICAgewogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBfZGJ1c19lcnJvcl9mcm9tX2Vycm5vIChlcnJubyksCiAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsaXN0ZW4gb24gc29ja2V0IFwiJXNcIjogJXMiLApAQCAtMTI0Nyw3ICsxMjIzLDggQEAKICAgICogYW5kIGNvbnRpbnVlLCBtYXliZSBpdCB3aWxsIGJlIGdvb2QgZW5vdWdoLgogICAgKi8KICAgaWYgKCFhYnN0cmFjdCAmJiBjaG1vZCAocGF0aCwgMDc3NykgPCAwKQotICAgIF9kYnVzX3dhcm4gKCJDb3VsZCBub3Qgc2V0IG1vZGUgMDc3NyBvbiBzb2NrZXQgJXMiLCBwYXRoKTsKKyAgICBfZGJ1c193YXJuICgiQ291bGQgbm90IHNldCBtb2RlIDA3Nzcgb24gc29ja2V0ICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgpOwogCiAgIHJldHVybiBsaXN0ZW5fZmQ7CiB9CkBAIC0xMzQ5LDU2ICsxMzI2LDYgQEAKICNlbmRpZgogfQogCi0vKiBDb252ZXJ0IGFuIGVycm9yIGNvZGUgZnJvbSBnZXRhZGRyaW5mbygpIG9yIGdldG5hbWVpbmZvKCkgaW50bwotICogYSBELUJ1cyBlcnJvciBuYW1lLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgotX2RidXNfZXJyb3JfZnJvbV9nYWkgKGludCBnYWlfcmVzLAotICAgICAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubykKLXsKLSAgc3dpdGNoIChnYWlfcmVzKQotICAgIHsKLSNpZmRlZiBFQUlfRkFNSUxZCi0gICAgICBjYXNlIEVBSV9GQU1JTFk6Ci0gICAgICAgIC8qIGFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkIChhdCBhbGwpICovCi0gICAgICAgIHJldHVybiBEQlVTX0VSUk9SX05PVF9TVVBQT1JURUQ7Ci0jZW5kaWYKLQotI2lmZGVmIEVBSV9TT0NLVFlQRQotICAgICAgY2FzZSBFQUlfU09DS1RZUEU6Ci0gICAgICAgIC8qIGFpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQgKGF0IGFsbCkgKi8KLSAgICAgICAgcmV0dXJuIERCVVNfRVJST1JfTk9UX1NVUFBPUlRFRDsKLSNlbmRpZgotCi0jaWZkZWYgRUFJX01FTU9SWQotICAgICAgY2FzZSBFQUlfTUVNT1JZOgotICAgICAgICAvKiBPdXQgb2YgbWVtb3J5ICovCi0gICAgICAgIHJldHVybiBEQlVTX0VSUk9SX05PX01FTU9SWTsKLSNlbmRpZgotCi0jaWZkZWYgRUFJX1NZU1RFTQotICAgICAgY2FzZSBFQUlfU1lTVEVNOgotICAgICAgICAvKiBVbnNwZWNpZmllZCBzeXN0ZW0gZXJyb3IsIGRldGFpbHMgaW4gZXJybm8gKi8KLSAgICAgICAgcmV0dXJuIF9kYnVzX2Vycm9yX2Zyb21fZXJybm8gKHNhdmVkX2Vycm5vKTsKLSNlbmRpZgotCi0gICAgICBjYXNlIDA6Ci0gICAgICAgIC8qIEl0IHN1Y2NlZWRlZCwgYnV0IHdlIGRpZG4ndCBnZXQgYW55IGFkZHJlc3Nlcz8gKi8KLSAgICAgICAgcmV0dXJuIERCVVNfRVJST1JfRkFJTEVEOwotCi0gICAgICAvKiBFQUlfQUdBSU46IFRyYW5zaWVudCBmYWlsdXJlICovCi0gICAgICAvKiBFQUlfQkFERkxBR1M6IGludmFsaWQgYWlfZmxhZ3MgKHByb2dyYW1taW5nIGVycm9yKSAqLwotICAgICAgLyogRUFJX0ZBSUw6IE5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlICovCi0gICAgICAvKiBFQUlfTk9EQVRBOiBob3N0IGV4aXN0cyBidXQgaGFzIG5vIGFkZHJlc3NlcyAqLwotICAgICAgLyogRUFJX05PTkFNRTogaG9zdCBkb2VzIG5vdCBleGlzdCAqLwotICAgICAgLyogRUFJX09WRVJGTE9XOiBhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3cgKi8KLSAgICAgIC8qIEVBSV9TRVJWSUNFOiBzZXJ2aWNlIG5vdCBhdmFpbGFibGUgZm9yIHNwZWNpZmllZCBzb2NrZXQKLSAgICAgICAqIHR5cGUgKHdlIHNob3VsZCBuZXZlciBzZWUgdGhpcyBiZWNhdXNlIHdlIHVzZSBudW1lcmljCi0gICAgICAgKiBwb3J0cykgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBEQlVTX0VSUk9SX0ZBSUxFRDsKLSAgICB9Ci19Ci0KIC8qKgogICogQ3JlYXRlcyBhIHNvY2tldCBhbmQgY29ubmVjdHMgdG8gYSBzb2NrZXQgYXQgdGhlIGdpdmVuIGhvc3QKICAqIGFuZCBwb3J0LiBUaGUgY29ubmVjdGlvbiBmZCBpcyByZXR1cm5lZCwgYW5kIGlzIHNldCB1cCBhcwpAQCAtMTQ1OCw3ICsxMzg1LDcgQEAKICAgaWYgKChyZXMgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSkpICE9IDApCiAgICAgewogICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX2Vycm9yX2Zyb21fZ2FpIChyZXMsIGVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICBfZGJ1c19lcnJvcl9mcm9tX2Vycm5vIChlcnJubyksCiAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb29rdXAgaG9zdC9wb3J0OiBcIiVzOiVzXCI6ICVzICglZCkiLAogICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGdhaV9zdHJlcnJvcihyZXMpLCByZXMpOwogICAgICAgcmV0dXJuIF9kYnVzX3NvY2tldF9nZXRfaW52YWxpZCAoKTsKQEAgLTE1ODAsNyArMTUwNyw3IEBACiAgIGlmICgocmVzID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpKSAhPSAwIHx8ICFhaSkKICAgICB7CiAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgX2RidXNfZXJyb3JfZnJvbV9nYWkgKHJlcywgZXJybm8pLAorICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX2Vycm9yX2Zyb21fZXJybm8gKGVycm5vKSwKICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGxvb2t1cCBob3N0L3BvcnQ6IFwiJXM6JXNcIjogJXMgKCVkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA/IGhvc3QgOiAiKiIsIHBvcnQsIGdhaV9zdHJlcnJvcihyZXMpLCByZXMpOwogICAgICAgZ290byBmYWlsZWQ7CkBAIC0xNjU1LDkgKzE1ODIsMTEgQEAKICAgICAgIG5ld2xpc3Rlbl9mZCA9IGRidXNfcmVhbGxvYyhsaXN0ZW5fZmQsIHNpemVvZihEQnVzU29ja2V0KSoobmxpc3Rlbl9mZCsxKSk7CiAgICAgICBpZiAoIW5ld2xpc3Rlbl9mZCkKICAgICAgICAgeworICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CiAgICAgICAgICAgX2RidXNfY2xvc2UgKGZkLCBOVUxMKTsKLSAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIGZpbGUgaGFuZGxlIGFycmF5Iik7CisgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBfZGJ1c19lcnJvcl9mcm9tX2Vycm5vIChzYXZlZF9lcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgZmlsZSBoYW5kbGUgYXJyYXk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKHNhdmVkX2Vycm5vKSk7CiAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgIGxpc3Rlbl9mZCA9IG5ld2xpc3Rlbl9mZDsKQEAgLTE2ODAsMjYgKzE2MDksMTYgQEAKICAgICAgICAgICAgICAgYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmYWRkciwgJmFkZHJsZW4pOwogCi0gICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSAgICAgICAgICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgX2RidXNfZXJyb3JfZnJvbV9lcnJubyAoc2F2ZWRfZXJybm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmV0cmlldmUgc29ja2V0IG5hbWUgZm9yIFwiJXM6JXNcIjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QgPyBob3N0IDogIioiLCBwb3J0LCBfZGJ1c19zdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAoKHJlcyA9IGdldG5hbWVpbmZvICgoc3RydWN0IHNvY2thZGRyKikmYWRkciwgYWRkcmxlbiwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSB8fAorICAgICAgICAgICAgICAgICAgKHJlcyA9IGdldG5hbWVpbmZvICgoc3RydWN0IHNvY2thZGRyKikmYWRkciwgYWRkcmxlbiwgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydGJ1Ziwgc2l6ZW9mKHBvcnRidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWKSkgIT0gMCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBfZGJ1c19lcnJvcl9mcm9tX2dhaSAocmVzLCBzYXZlZF9lcnJubyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZXNvbHZlIHBvcnQgXCIlczolc1wiOiAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgX2RidXNfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzb2x2ZSBwb3J0IFwiJXM6JXNcIjogJXMgKCVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA/IGhvc3QgOiAiKiIsIHBvcnQsIGdhaV9zdHJlcnJvcihyZXMpLCByZXMpOwogICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZChyZXRwb3J0LCBwb3J0YnVmKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLCBOVUxMKTsKQEAgLTIwNjksNyArMTk4OCw3IEBACiAjZWxzZQogICAgIHN0cnVjdCB1Y3JlZCBjcjsKICNlbmRpZgotICAgIHNvY2tsZW5fdCBjcl9sZW4gPSBzaXplb2YgKGNyKTsKKyAgICBpbnQgY3JfbGVuID0gc2l6ZW9mIChjcik7CiAKICAgICBpZiAoZ2V0c29ja29wdCAoY2xpZW50X2ZkLmZkLCBTT0xfU09DS0VULCBTT19QRUVSQ1JFRCwgJmNyLCAmY3JfbGVuKSAhPSAwKQogICAgICAgewpAQCAtMjE0MSwxMyArMjA2MCwxMyBAQAogICAgIHVjcmVkX3QgKiB1Y3JlZCA9IE5VTEw7CiAgICAgaWYgKGdldHBlZXJ1Y3JlZCAoY2xpZW50X2ZkLmZkLCAmdWNyZWQpID09IDApCiAgICAgICB7Ci0jaWZkZWYgSEFWRV9BRFQKLSAgICAgICAgYWR0X3Nlc3Npb25fZGF0YV90ICphZHRoID0gTlVMTDsKLSNlbmRpZgogICAgICAgICBwaWRfcmVhZCA9IHVjcmVkX2dldHBpZCAodWNyZWQpOwogICAgICAgICB1aWRfcmVhZCA9IHVjcmVkX2dldGV1aWQgKHVjcmVkKTsKICNpZmRlZiBIQVZFX0FEVAogICAgICAgICAvKiBnZW5lcmF0ZSBhdWRpdCBzZXNzaW9uIGRhdGEgYmFzZWQgb24gc29ja2V0IHVjcmVkICovCisgICAgICAgIGFkdF9zZXNzaW9uX2RhdGFfdCAqYWR0aCA9IE5VTEw7CisgICAgICAgIGFkdF9leHBvcnRfZGF0YV90ICpkYXRhID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgICAgICBpZiAoYWR0X3N0YXJ0X3Nlc3Npb24gKCZhZHRoLCBOVUxMLCAwKSB8fCAoYWR0aCA9PSBOVUxMKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiRmFpbGVkIHRvIGFkdF9zdGFydF9zZXNzaW9uKCk6ICVzXG4iLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKQEAgLTIxNjAsOCArMjA3OSw3IEBACiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkdF9leHBvcnRfZGF0YV90ICpkYXRhID0gTlVMTDsKLSAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGFkdF9leHBvcnRfc2Vzc2lvbl9kYXRhIChhZHRoLCAmZGF0YSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGFkdF9leHBvcnRfc2Vzc2lvbl9kYXRhIChhZHRoLCAmZGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgX2RidXNfdmVyYm9zZSAoIkZhaWxlZCB0byBhZHRfZXhwb3J0X3Nlc3Npb25fZGF0YSgpOiAlc1xuIiwgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CkBAIC0zMDQzLDcgKzI5NjEsNyBAQAogICogQHJldHVybnMgI1RSVUUgb24gc3VjY2VzcwogICovCiBkYnVzX2Jvb2xfdAotX2RidXNfZW5zdXJlX2RpcmVjdG9yeSAoY29uc3QgREJ1c1N0cmluZyAqZmlsZW5hbWUsCitfZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChjb25zdCBEQnVzU3RyaW5nICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgKmVycm9yKQogewogICBjb25zdCBjaGFyICpmaWxlbmFtZV9jOwpAQCAtMzA2NywzNSArMjk4NSw2IEBACiB9CiAKIC8qKgotICogQ3JlYXRlcyBhIGRpcmVjdG9yeS4gVW5saWtlIF9kYnVzX2Vuc3VyZV9kaXJlY3RvcnkoKSwgdGhpcyBvbmx5IHN1Y2NlZWRzCi0gKiBpZiB0aGUgZGlyZWN0b3J5IGlzIGdlbnVpbmVseSBuZXdseS1jcmVhdGVkLgotICoKLSAqIEBwYXJhbSBmaWxlbmFtZSBkaXJlY3RvcnkgZmlsZW5hbWUKLSAqIEBwYXJhbSBlcnJvciBpbml0aWFsaXplZCBlcnJvciBvYmplY3QKLSAqIEByZXR1cm5zICNUUlVFIG9uIHN1Y2Nlc3MKLSAqLwotZGJ1c19ib29sX3QKLV9kYnVzX2NyZWF0ZV9kaXJlY3RvcnkgKGNvbnN0IERCdXNTdHJpbmcgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAqZXJyb3IpCi17Ci0gIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2M7Ci0KLSAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX0NMRUFSIChlcnJvcik7Ci0KLSAgZmlsZW5hbWVfYyA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoZmlsZW5hbWUpOwotCi0gIGlmIChta2RpciAoZmlsZW5hbWVfYywgMDcwMCkgPCAwKQotICAgIHsKLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZV9jLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCiAgKiBBcHBlbmRzIHRoZSBnaXZlbiBmaWxlbmFtZSB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgogICoKICAqIEB0b2RvIGl0IG1pZ2h0IGJlIGN1dGUgdG8gY29sbGFwc2UgbXVsdGlwbGUgJy8nIHN1Y2ggYXMgImZvby8vIgpAQCAtMzUxNiw3ICszNDA1LDcgQEAKIAogICByZXR1cm4gVFJVRTsKICNlbHNlCi0gIF9kYnVzX3dhcm4gKCJfZGJ1c19zb2NrZXRwYWlyKCkgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgT1MiKTsKKyAgX2RidXNfd2FybiAoIl9kYnVzX3NvY2tldHBhaXIoKSBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBPU1xuIik7CiAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCiAgICAgICAgICAgICAgICAgICAiX2RidXNfc29ja2V0cGFpcigpIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIE9TIik7CiAgIHJldHVybiBGQUxTRTsKQEAgLTM2NjIsNyArMzU1MSw3IEBACiBzdGF0aWMgZGJ1c19ib29sX3QKIF9yZWFkX3N1YnByb2Nlc3NfbGluZV9hcmd2IChjb25zdCBjaGFyICpwcm9ncGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2Jvb2xfdCBwYXRoX2ZhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICogY29uc3QgKmFyZ3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgKmVycm9yKQogewpAQCAtMzcyNCwzNSArMzYxMywyMSBAQAogICBpZiAocGlkID09IDApCiAgICAgewogICAgICAgLyogY2hpbGQgcHJvY2VzcyAqLwotICAgICAgY29uc3QgY2hhciAqZXJyb3Jfc3RyOworICAgICAgaW50IGZkOwogCi0gICAgICBpZiAoIV9kYnVzX2Vuc3VyZV9zdGFuZGFyZF9mZHMgKERCVVNfRk9SQ0VfU1RESU5fTlVMTCwgJmVycm9yX3N0cikpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgIGZkID0gb3BlbiAoIi9kZXYvbnVsbCIsIE9fUkRXUik7CisgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgIC8qIGh1aD8hIGNhbid0IG9wZW4gL2Rldi9udWxsPyAqLworICAgICAgICBfZXhpdCAoMSk7CiAKLSAgICAgICAgICAvKiBUcnkgdG8gd3JpdGUgZGV0YWlscyBpbnRvIHRoZSBwaXBlLCBidXQgZG9uJ3QgYm90aGVyCi0gICAgICAgICAgICogdHJ5aW5nIHRvbyBoYXJkIChubyByZXRyeSBsb29wKS4gKi8KLQotICAgICAgICAgIGlmICh3cml0ZSAoZXJyb3JzX3BpcGVbV1JJVEVfRU5EXSwgZXJyb3Jfc3RyLCBzdHJsZW4gKGVycm9yX3N0cikpIDwgMCB8fAotICAgICAgICAgICAgICB3cml0ZSAoZXJyb3JzX3BpcGVbV1JJVEVfRU5EXSwgIjogIiwgMikgPCAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvKiBpZ25vcmUsIG5vdCBtdWNoIHdlIGNhbiBkbyAqLwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgZXJyb3Jfc3RyID0gX2RidXNfc3RyZXJyb3IgKHNhdmVkX2Vycm5vKTsKLQotICAgICAgICAgIGlmICh3cml0ZSAoZXJyb3JzX3BpcGVbV1JJVEVfRU5EXSwgZXJyb3Jfc3RyLCBzdHJsZW4gKGVycm9yX3N0cikpIDwgMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgLyogaWdub3JlLCBub3QgbXVjaCB3ZSBjYW4gZG8gKi8KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIF9leGl0ICgxKTsKLSAgICAgICAgfQorICAgICAgX2RidXNfdmVyYm9zZSAoIi9kZXYvbnVsbCBmZCAlZCBvcGVuZWRcbiIsIGZkKTsKIAogICAgICAgLyogc2V0LXVwIHN0ZFhYWCAqLwogICAgICAgY2xvc2UgKHJlc3VsdF9waXBlW1JFQURfRU5EXSk7CiAgICAgICBjbG9zZSAoZXJyb3JzX3BpcGVbUkVBRF9FTkRdKTsKIAorICAgICAgaWYgKGR1cDIgKGZkLCAwKSA9PSAtMSkgLyogc2V0dXAgc3RkaW4gKi8KKyAgICAgICAgX2V4aXQgKDEpOwogICAgICAgaWYgKGR1cDIgKHJlc3VsdF9waXBlW1dSSVRFX0VORF0sIDEpID09IC0xKSAvKiBzZXR1cCBzdGRvdXQgKi8KICAgICAgICAgX2V4aXQgKDEpOwogICAgICAgaWYgKGR1cDIgKGVycm9yc19waXBlW1dSSVRFX0VORF0sIDIpID09IC0xKSAvKiBzZXR1cCBzdGRlcnIgKi8KQEAgLTM3NjUsNyArMzY0MCw3IEBACiAgICAgICAvKiBJZiBpdCBsb29rcyBmdWxseS1xdWFsaWZpZWQsIHRyeSBleGVjdiBmaXJzdCAqLwogICAgICAgaWYgKHByb2dwYXRoWzBdID09ICcvJykKICAgICAgICAgewotICAgICAgICAgIGV4ZWN2IChwcm9ncGF0aCwgKGNoYXIgKiBjb25zdCAqKSBhcmd2KTsKKyAgICAgICAgICBleGVjdiAocHJvZ3BhdGgsIGFyZ3YpOwogICAgICAgICAgIC8qIE9rLCB0aGF0IGZhaWxlZC4gIE5vdyBpZiBwYXRoX2ZhbGxiYWNrIGlzIGdpdmVuLCBsZXQncwogICAgICAgICAgICAqIHRyeSB1bnF1YWxpZmllZC4gIFRoaXMgaXMgbW9zdGx5IGEgaGFjayB0byB3b3JrCiAgICAgICAgICAgICogYXJvdW5kIHN5c3RlbXMgd2hpY2ggc2hpcCBkYnVzLWxhdW5jaCBpbiAvdXNyL2JpbgpAQCAtMzc3NCwxMCArMzY0OSwxMCBAQAogICAgICAgICAgICAqLwogICAgICAgICAgIGlmIChwYXRoX2ZhbGxiYWNrKQogICAgICAgICAgICAgLyogV2UgbXVzdCBoYXZlIGEgc2xhc2gsIGJlY2F1c2Ugd2UgY2hlY2tlZCBhYm92ZSAqLwotICAgICAgICAgICAgZXhlY3ZwIChzdHJyY2hyIChwcm9ncGF0aCwgJy8nKSsxLCAoY2hhciAqIGNvbnN0ICopIGFyZ3YpOworICAgICAgICAgICAgZXhlY3ZwIChzdHJyY2hyIChwcm9ncGF0aCwgJy8nKSsxLCBhcmd2KTsKICAgICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBleGVjdnAgKHByb2dwYXRoLCAoY2hhciAqIGNvbnN0ICopIGFyZ3YpOworICAgICAgICBleGVjdnAgKHByb2dwYXRoLCBhcmd2KTsKIAogICAgICAgLyogc3RpbGwgbm90aGluZywgd2UgZmFpbGVkICovCiAgICAgICBfZXhpdCAoMSk7CkBAIC0zODc1LDE3ICszNzUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcikKIHsKICNpZmRlZiBEQlVTX0VOQUJMRV9YMTFfQVVUT0xBVU5DSAotICBzdGF0aWMgY29uc3QgY2hhciBhcmdfZGJ1c19sYXVuY2hbXSA9ICJkYnVzLWxhdW5jaCI7Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGFyZ19hdXRvbGF1bmNoW10gPSAiLS1hdXRvbGF1bmNoIjsKLSAgc3RhdGljIGNvbnN0IGNoYXIgYXJnX2JpbmFyeV9zeW50YXhbXSA9ICItLWJpbmFyeS1zeW50YXgiOwotICBzdGF0aWMgY29uc3QgY2hhciBhcmdfY2xvc2Vfc3RkZXJyW10gPSAiLS1jbG9zZS1zdGRlcnIiOwotCiAgIC8qIFBlcmZvcm0gWDExLWJhc2VkIGF1dG9sYXVuY2guIChXZSBhbHNvIHN1cHBvcnQgbGF1bmNoZC1iYXNlZCBhdXRvbGF1bmNoLAogICAgKiBidXQgdGhhdCdzIGRvbmUgZWxzZXdoZXJlLCBhbmQgaWYgaXQgd29ya2VkLCB0aGlzIGZ1bmN0aW9uIHdvdWxkbid0CiAgICAqIGJlIGNhbGxlZC4pICovCiAgIGNvbnN0IGNoYXIgKmRpc3BsYXk7Ci0gIGNvbnN0IGNoYXIgKnByb2dwYXRoOwotICBjb25zdCBjaGFyICphcmd2WzZdOworICBjaGFyICpwcm9ncGF0aDsKKyAgY2hhciAqYXJndls2XTsKICAgaW50IGk7CiAgIERCdXNTdHJpbmcgdXVpZDsKICAgZGJ1c19ib29sX3QgcmV0dmFsOwpAQCAtMzkyOSw5ICszNzk5LDkgQEAKICAgICB9CiAKICNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwotICBwcm9ncGF0aCA9IF9kYnVzX2dldGVudiAoIkRCVVNfVEVTVF9EQlVTX0xBVU5DSCIpOwotCi0gIGlmIChwcm9ncGF0aCA9PSBOVUxMKQorICBpZiAoX2RidXNfZ2V0ZW52ICgiREJVU19VU0VfVEVTVF9CSU5BUlkiKSAhPSBOVUxMKQorICAgIHByb2dwYXRoID0gVEVTVF9CVVNfTEFVTkNIX0JJTkFSWTsKKyAgZWxzZQogI2VuZGlmCiAgICAgcHJvZ3BhdGggPSBEQlVTX0JJTkRJUiAiL2RidXMtbGF1bmNoIjsKICAgLyoKQEAgLTM5NDAsMTUgKzM4MTAsMTUgQEAKICAgICogc2VlIGZkLm8jNjk3MTYKICAgICovCiAgIGkgPSAwOwotICBhcmd2W2ldID0gYXJnX2RidXNfbGF1bmNoOworICBhcmd2W2ldID0gImRidXMtbGF1bmNoIjsKICAgKytpOwotICBhcmd2W2ldID0gYXJnX2F1dG9sYXVuY2g7CisgIGFyZ3ZbaV0gPSAiLS1hdXRvbGF1bmNoIjsKICAgKytpOwogICBhcmd2W2ldID0gX2RidXNfc3RyaW5nX2dldF9kYXRhICgmdXVpZCk7CiAgICsraTsKLSAgYXJndltpXSA9IGFyZ19iaW5hcnlfc3ludGF4OworICBhcmd2W2ldID0gIi0tYmluYXJ5LXN5bnRheCI7CiAgICsraTsKLSAgYXJndltpXSA9IGFyZ19jbG9zZV9zdGRlcnI7CisgIGFyZ3ZbaV0gPSAiLS1jbG9zZS1zdGRlcnIiOwogICArK2k7CiAgIGFyZ3ZbaV0gPSBOVUxMOwogICArK2k7CkBAIC0zOTkzLDUxICszODYzLDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgY3JlYXRlX2lmX25vdF9mb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcikKIHsKLSAgREJ1c0Vycm9yIG91cl9lcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgREJ1c0Vycm9yIGV0Y19lcnJvciA9IERCVVNfRVJST1JfSU5JVDsKICAgREJ1c1N0cmluZyBmaWxlbmFtZTsKICAgZGJ1c19ib29sX3QgYjsKIAogICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJmZpbGVuYW1lLCBEQlVTX01BQ0hJTkVfVVVJRF9GSUxFKTsKIAotICBiID0gX2RidXNfcmVhZF91dWlkX2ZpbGUgKCZmaWxlbmFtZSwgbWFjaGluZV9pZCwgRkFMU0UsICZvdXJfZXJyb3IpOworICBiID0gX2RidXNfcmVhZF91dWlkX2ZpbGUgKCZmaWxlbmFtZSwgbWFjaGluZV9pZCwgRkFMU0UsIGVycm9yKTsKICAgaWYgKGIpCiAgICAgcmV0dXJuIFRSVUU7CiAKKyAgZGJ1c19lcnJvcl9mcmVlIChlcnJvcik7CisKICAgLyogRmFsbGJhY2sgdG8gdGhlIHN5c3RlbSBtYWNoaW5lIElEICovCiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZmlsZW5hbWUsICIvZXRjL21hY2hpbmUtaWQiKTsKLSAgYiA9IF9kYnVzX3JlYWRfdXVpZF9maWxlICgmZmlsZW5hbWUsIG1hY2hpbmVfaWQsIEZBTFNFLCAmZXRjX2Vycm9yKTsKKyAgYiA9IF9kYnVzX3JlYWRfdXVpZF9maWxlICgmZmlsZW5hbWUsIG1hY2hpbmVfaWQsIEZBTFNFLCBlcnJvcik7CiAKICAgaWYgKGIpCiAgICAgewotICAgICAgaWYgKGNyZWF0ZV9pZl9ub3RfZm91bmQpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiB0cnkgdG8gY29weSBpdCB0byB0aGUgREJVU19NQUNISU5FX1VVSURfRklMRSwgYnV0IGRvIG5vdAotICAgICAgICAgICAqIGNvbXBsYWluIGlmIHRoYXQgaXNuJ3QgcG9zc2libGUgZm9yIHdoYXRldmVyIHJlYXNvbiAqLwotICAgICAgICAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZmlsZW5hbWUsIERCVVNfTUFDSElORV9VVUlEX0ZJTEUpOwotICAgICAgICAgIF9kYnVzX3dyaXRlX3V1aWRfZmlsZSAoJmZpbGVuYW1lLCBtYWNoaW5lX2lkLCBOVUxMKTsKLSAgICAgICAgfQorICAgICAgLyogdHJ5IHRvIGNvcHkgaXQgdG8gdGhlIERCVVNfTUFDSElORV9VVUlEX0ZJTEUsIGJ1dCBkbyBub3QKKyAgICAgICAqIGNvbXBsYWluIGlmIHRoYXQgaXNuJ3QgcG9zc2libGUgZm9yIHdoYXRldmVyIHJlYXNvbiAqLworICAgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZmaWxlbmFtZSwgREJVU19NQUNISU5FX1VVSURfRklMRSk7CisgICAgICBfZGJ1c193cml0ZV91dWlkX2ZpbGUgKCZmaWxlbmFtZSwgbWFjaGluZV9pZCwgTlVMTCk7CiAKLSAgICAgIGRidXNfZXJyb3JfZnJlZSAoJm91cl9lcnJvcik7CiAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAKICAgaWYgKCFjcmVhdGVfaWZfbm90X2ZvdW5kKQotICAgIHsKLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgZXRjX2Vycm9yLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIkQtQnVzIGxpYnJhcnkgYXBwZWFycyB0byBiZSBpbmNvcnJlY3RseSBzZXQgdXA6ICIKLSAgICAgICAgICAgICAgICAgICAgICAic2VlIHRoZSBtYW51YWwgcGFnZSBmb3IgZGJ1cy11dWlkZ2VuIHRvIGNvcnJlY3QgIgotICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGlzc3VlLiAoJXM7ICVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgb3VyX2Vycm9yLm1lc3NhZ2UsIGV0Y19lcnJvci5tZXNzYWdlKTsKLSAgICAgIGRidXNfZXJyb3JfZnJlZSAoJm91cl9lcnJvcik7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZldGNfZXJyb3IpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBkYnVzX2Vycm9yX2ZyZWUgKCZvdXJfZXJyb3IpOwotICBkYnVzX2Vycm9yX2ZyZWUgKCZldGNfZXJyb3IpOworICAgIHJldHVybiBGQUxTRTsKIAogICAvKiBpZiBub25lIGZvdW5kLCB0cnkgdG8gbWFrZSBhIG5ldyBvbmUgKi8KKyAgZGJ1c19lcnJvcl9mcmVlIChlcnJvcik7CiAgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0ICgmZmlsZW5hbWUsIERCVVNfTUFDSElORV9VVUlEX0ZJTEUpOwogCiAgIGlmICghX2RidXNfZ2VuZXJhdGVfdXVpZCAobWFjaGluZV9pZCwgZXJyb3IpKQpAQCAtNDM0MSw4ICs0MTk2LDcgQEAKICAgICAgICAgc3RhdGljIGRidXNfYm9vbF90IGFscmVhZHlfd2FybmVkID0gRkFMU0U7CiAgICAgICAgIGlmICghYWxyZWFkeV93YXJuZWQpCiAgICAgICAgICAgewotICAgICAgICAgICAgX2RidXNfd2FybiAoIlVzaW5nICVzIGZvciB0ZXN0aW5nLCBzZXQgREJVU19URVNUX0hPTUVESVIgdG8gYXZvaWQiLAotICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJmhvbWVkaXIpKTsKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJVc2luZyB5b3VyIHJlYWwgaG9tZSBkaXJlY3RvcnkgZm9yIHRlc3RpbmcsIHNldCBEQlVTX1RFU1RfSE9NRURJUiB0byBhdm9pZFxuIik7CiAgICAgICAgICAgICBhbHJlYWR5X3dhcm5lZCA9IFRSVUU7CiAgICAgICAgICAgfQogICAgICAgfQpAQCAtNDM5MSwxNSArNDI0NSw3IEBACiBkYnVzX2Jvb2xfdAogX2RidXNfZ2V0X2lzX2Vycm5vX2VhZ2Fpbl9vcl9ld291bGRibG9jayAoaW50IGUpCiB7Ci0gIC8qIEF2b2lkIHRoZSAtV2xvZ2ljYWwtb3AgR0NDIHdhcm5pbmcsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiBFQUdBSU4gYW5kCi0gICAqIEVXT1VMREJMT0NLIGFyZSBudW1lcmljYWxseSBlcXVhbCwgd2hpY2ggaXMgcGVybWl0dGVkIGFzIGRlc2NyaWJlZCBieQotICAgKiBlcnJubygzKS4KLSAgICovCi0jaWYgRUFHQUlOID09IEVXT1VMREJMT0NLCi0gIHJldHVybiBlID09IEVBR0FJTjsKLSNlbHNlCiAgIHJldHVybiBlID09IEVBR0FJTiB8fCBlID09IEVXT1VMREJMT0NLOwotI2VuZGlmCiB9CiAKIC8qKgpAQCAtNDQ4MiwxMyArNDMyOCwxMyBAQAogICAgIHsKICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKLSAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICpkZTsKLSAgICAgICAgICBpbnQgZmQ7CisgICAgICAgICAgc3RydWN0IGRpcmVudCBidWYsICpkZTsKKyAgICAgICAgICBpbnQgaywgZmQ7CiAgICAgICAgICAgbG9uZyBsOwogICAgICAgICAgIGNoYXIgKmUgPSBOVUxMOwogCi0gICAgICAgICAgZGUgPSByZWFkZGlyIChkKTsKLSAgICAgICAgICBpZiAoIWRlKQorICAgICAgICAgIGsgPSByZWFkZGlyX3IgKGQsICZidWYsICZkZSk7CisgICAgICAgICAgaWYgKGsgIT0gMCB8fCAhZGUpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykKQEAgLTQ2MDIsNyArNDQ0OCw3IEBACiAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGlwdjY7CiAgIH0gc29ja2V0OwogICBjaGFyIGhvc3RpcFtJTkVUNl9BRERSU1RSTEVOXTsKLSAgc29ja2xlbl90IHNpemUgPSBzaXplb2YgKHNvY2tldCk7CisgIGludCBzaXplID0gc2l6ZW9mIChzb2NrZXQpOwogICBEQnVzU3RyaW5nIHBhdGhfc3RyOwogCiAgIGlmIChnZXRzb2NrbmFtZSAoZmQuZmQsICZzb2NrZXQuc2EsICZzaXplKSkKQEAgLTQ2NjgsOTQgKzQ1MTQsNCBAQAogICBlcnJubyA9IHNhdmVkX2Vycm5vOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqc3lzbG9nX3RhZyA9ICJkYnVzIjsKLSNpZmRlZiBIQVZFX1NZU0xPR19ICi1zdGF0aWMgREJ1c0xvZ0ZsYWdzIGxvZ19mbGFncyA9IERCVVNfTE9HX0ZMQUdTX1NUREVSUjsKLSNlbmRpZgotCi0vKioKLSAqIEluaXRpYWxpemUgdGhlIHN5c3RlbSBsb2cuCi0gKgotICogVGhlICJ0YWciIGlzIG5vdCBjb3BpZWQsIGFuZCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZgotICogdGhlIHByb2Nlc3Mgb3IgdW50aWwgX2RidXNfaW5pdF9zeXN0ZW1fbG9nKCkgaXMgY2FsbGVkIGFnYWluLiBJbiBwcmFjdGljZQotICogaXQgd2lsbCBub3JtYWxseSBiZSBhIGNvbnN0YW50LgotICoKLSAqIE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGEgc3lzdGVtIGxvZywgdGhlCi0gKiAjREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRyBmbGFnIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCB0bwotICogI0RCVVNfTE9HX0ZMQUdTX1NUREVSUi4KLSAqCi0gKiBAcGFyYW0gdGFnIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIChzeXNsb2cgdGFnKQotICogQHBhcmFtIG1vZGUgd2hldGhlciB0byBsb2cgdG8gc3RkZXJyLCB0aGUgc3lzdGVtIGxvZyBvciBib3RoCi0gKi8KLXZvaWQKLV9kYnVzX2luaXRfc3lzdGVtX2xvZyAoY29uc3QgY2hhciAgICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgIERCdXNMb2dGbGFncyAgZmxhZ3MpCi17Ci0gIC8qIFdlIG5ldmVyIHdhbnQgdG8gdHVybiBvZmYgbG9nZ2luZyBjb21wbGV0ZWx5ICovCi0gIF9kYnVzX2Fzc2VydCAoCi0gICAgICAoZmxhZ3MgJiAoREJVU19MT0dfRkxBR1NfU1RERVJSIHwgREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRykpICE9IDApOwotCi0gIHN5c2xvZ190YWcgPSB0YWc7Ci0KLSNpZmRlZiBIQVZFX1NZU0xPR19ICi0gIGxvZ19mbGFncyA9IGZsYWdzOwotCi0gIGlmIChsb2dfZmxhZ3MgJiBEQlVTX0xPR19GTEFHU19TWVNURU1fTE9HKQotICAgIG9wZW5sb2cgKHRhZywgTE9HX1BJRCwgTE9HX0RBRU1PTik7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbG9nIGZpbGUgKGUuZy4gc3lzbG9nIG9uIFVuaXgpIGFuZC9vciBzdGRlcnIuCi0gKgotICogQHBhcmFtIHNldmVyaXR5IGEgc2V2ZXJpdHkgdmFsdWUKLSAqIEBwYXJhbSBtc2cgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZwotICogQHBhcmFtIGFyZ3MgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZwotICovCi12b2lkCi1fZGJ1c19sb2d2IChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgIHNldmVyaXR5LAotICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICptc2csCi0gICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICAgIGFyZ3MpCi17Ci0gIHZhX2xpc3QgdG1wOwotI2lmZGVmIEhBVkVfU1lTTE9HX0gKLSAgaWYgKGxvZ19mbGFncyAmIERCVVNfTE9HX0ZMQUdTX1NZU1RFTV9MT0cpCi0gICAgewotICAgICAgaW50IGZsYWdzOwotICAgICAgc3dpdGNoIChzZXZlcml0eSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgREJVU19TWVNURU1fTE9HX0lORk86Ci0gICAgICAgICAgICBmbGFncyA9ICBMT0dfREFFTU9OIHwgTE9HX0lORk87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HOgotICAgICAgICAgICAgZmxhZ3MgPSAgTE9HX0RBRU1PTiB8IExPR19XQVJOSU5HOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEQlVTX1NZU1RFTV9MT0dfU0VDVVJJVFk6Ci0gICAgICAgICAgICBmbGFncyA9IExPR19BVVRIIHwgTE9HX05PVElDRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREJVU19TWVNURU1fTE9HX0VSUk9SOgotICAgICAgICAgICAgZmxhZ3MgPSBMT0dfREFFTU9OfExPR19DUklUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQgbG9nIHNldmVyaXR5Iik7Ci0gICAgICAgIH0KLQotICAgICAgREJVU19WQV9DT1BZICh0bXAsIGFyZ3MpOwotICAgICAgdnN5c2xvZyAoZmxhZ3MsIG1zZywgdG1wKTsKLSAgICAgIHZhX2VuZCAodG1wKTsKLSAgICB9Ci0KLSAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBzeXNsb2cuaCwgd2UgYWx3YXlzIGJlaGF2ZSBhcyB0aG91Z2ggc3RkZXJyIHdhcyBpbgotICAgKiB0aGUgZmxhZ3MgKi8KLSAgaWYgKGxvZ19mbGFncyAmIERCVVNfTE9HX0ZMQUdTX1NUREVSUikKLSNlbmRpZgotICAgIHsKLSAgICAgIERCVVNfVkFfQ09QWSAodG1wLCBhcmdzKTsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzWyIgREJVU19QSURfRk9STUFUICJdOiAiLCBzeXNsb2dfdGFnLCBfZGJ1c19nZXRwaWQgKCkpOwotICAgICAgdmZwcmludGYgKHN0ZGVyciwgbXNnLCB0bXApOwotICAgICAgZnB1dGMgKCdcbicsIHN0ZGVycik7Ci0gICAgICB2YV9lbmQgKHRtcCk7Ci0gICAgfQotfQotCiAvKiB0ZXN0cyBpbiBkYnVzLXN5c2RlcHMtdXRpbC5jICovCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3lzZGVwcy11bml4LmggYi9kYnVzL2RidXMtc3lzZGVwcy11bml4LmgKaW5kZXggODMwZDVjZC4uMjc5Y2FlMiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXN5c2RlcHMtdW5peC5oCisrKyBiL2RidXMvZGJ1cy1zeXNkZXBzLXVuaXguaApAQCAtMTA1LDcgKzEwNSw2IEBACiAgKi8KIHN0cnVjdCBEQnVzVXNlckluZm8KIHsKLSAgc2l6ZV90ICAgICAgcmVmY291bnQ7ICAgICAgIC8qKjwgUmVmZXJlbmNlIGNvdW50ICovCiAgIGRidXNfdWlkX3QgIHVpZDsgICAgICAgICAgICAvKio8IFVJRCAqLwogICBkYnVzX2dpZF90ICBwcmltYXJ5X2dpZDsgICAgLyoqPCBHSUQgKi8KICAgZGJ1c19naWRfdCAqZ3JvdXBfaWRzOyAgICAgIC8qKjwgR3JvdXBzIElEcywgKmluY2x1ZGluZyogYWJvdmUgcHJpbWFyeSBncm91cCAqLwpAQCAtMTE5LDcgKzExOCw2IEBACiAgKi8KIHN0cnVjdCBEQnVzR3JvdXBJbmZvCiB7Ci0gIHNpemVfdCAgICAgIHJlZmNvdW50OyAgICAgICAvKio8IFJlZmVyZW5jZSBjb3VudCAqLwogICBkYnVzX2dpZF90ICBnaWQ7ICAgICAgICAgICAgLyoqPCBHSUQgKi8KICAgY2hhciAgICAgICAqZ3JvdXBuYW1lOyAgICAgIC8qKjwgR3JvdXAgbmFtZSAqLwogfTsKQEAgLTE2NywxMiArMTY1LDYgQEAKIGRidXNfYm9vbF90IF9kYnVzX2Vuc3VyZV9zdGFuZGFyZF9mZHMgKERCdXNFbnN1cmVTdGFuZGFyZEZkc0ZsYWdzICAgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAqKmVycm9yX3N0cl9wKTsKIAotLyoqIEEgVU5JWCBzaWduYWwgaGFuZGxlciAqLwotdHlwZWRlZiB2b2lkICgqIERCdXNTaWduYWxIYW5kbGVyKSAoaW50IHNpZyk7Ci0KLXZvaWQgX2RidXNfc2V0X3NpZ25hbF9oYW5kbGVyIChpbnQgICAgICAgICAgICAgICBzaWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NpZ25hbEhhbmRsZXIgaGFuZGxlcik7Ci0KIC8qKiBAfSAqLwogCiBEQlVTX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXN5c2RlcHMtdXRpbC11bml4LmMgYi9kYnVzL2RidXMtc3lzZGVwcy11dGlsLXVuaXguYwppbmRleCAyNmZjYjViLi45YjcyNGNjIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc3lzZGVwcy11dGlsLXVuaXguYworKysgYi9kYnVzL2RidXMtc3lzZGVwcy11dGlsLXVuaXguYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImRidXMtc3lzZGVwcy5oIgogI2luY2x1ZGUgImRidXMtc3lzZGVwcy11bml4LmgiCiAjaW5jbHVkZSAiZGJ1cy1pbnRlcm5hbHMuaCIKLSNpbmNsdWRlICJkYnVzLWxpc3QuaCIKICNpbmNsdWRlICJkYnVzLXBpcGUuaCIKICNpbmNsdWRlICJkYnVzLXByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGJ1cy1zdHJpbmcuaCIKQEAgLTUxLDYgKzUwLDEwIEBACiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3lzL3VuLmg+CiAKKyNpZmRlZiBIQVZFX1NZU0xPR19ICisjaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfU1lTX1NZU0xJTUlUU19ICiAjaW5jbHVkZSA8c3lzL3N5c2xpbWl0cy5oPgogI2VuZGlmCkBAIC04Niw3ICs4OSw3IEBACiB7CiAgIGNvbnN0IGNoYXIgKnM7CiAgIHBpZF90IGNoaWxkX3BpZDsKLSAgREJ1c0Vuc3VyZVN0YW5kYXJkRmRzRmxhZ3MgZmxhZ3M7CisgIGludCBkZXZfbnVsbF9mZDsKIAogICBfZGJ1c192ZXJib3NlICgiQmVjb21pbmcgYSBkYWVtb24uLi5cbiIpOwogCkBAIC0xMTEsMTggKzExNCwyMyBAQAogICAgIGNhc2UgMDoKICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJpbiBjaGlsZCwgY2xvc2luZyBzdGQgZmlsZSBkZXNjcmlwdG9yc1xuIik7CiAKLSAgICAgIGZsYWdzID0gREJVU19GT1JDRV9TVERJTl9OVUxMIHwgREJVU19GT1JDRV9TVERPVVRfTlVMTDsKLSAgICAgIHMgPSBfZGJ1c19nZXRlbnYgKCJEQlVTX0RFQlVHX09VVFBVVCIpOwotCi0gICAgICBpZiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpCi0gICAgICAgIGZsYWdzIHw9IERCVVNfRk9SQ0VfU1RERVJSX05VTEw7Ci0gICAgICBlbHNlCi0gICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJrZWVwaW5nIHN0ZGVyciBvcGVuIGR1ZSB0byBEQlVTX0RFQlVHX09VVFBVVFxuIik7Ci0KLSAgICAgIGlmICghX2RidXNfZW5zdXJlX3N0YW5kYXJkX2ZkcyAoZmxhZ3MsICZzKSkKKyAgICAgIC8qIHNpbGVudGx5IGlnbm9yZSBmYWlsdXJlcyBoZXJlLCBpZiBzb21lb25lCisgICAgICAgKiBkb2Vzbid0IGhhdmUgL2Rldi9udWxsIHdlIG1heSBhcyB3ZWxsIHRyeQorICAgICAgICogdG8gY29udGludWUgYW55aG93CisgICAgICAgKi8KKyAgICAgIAorICAgICAgZGV2X251bGxfZmQgPSBvcGVuICgiL2Rldi9udWxsIiwgT19SRFdSKTsKKyAgICAgIGlmIChkZXZfbnVsbF9mZCA+PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfd2FybiAoIiVzOiAlcyIsIHMsIF9kYnVzX3N0cmVycm9yIChlcnJubykpOwotICAgICAgICAgIF9leGl0ICgxKTsKKyAgICAgICAgICBkdXAyIChkZXZfbnVsbF9mZCwgMCk7CisgICAgICAgICAgZHVwMiAoZGV2X251bGxfZmQsIDEpOworICAgICAgICAgIAorICAgICAgICAgIHMgPSBfZGJ1c19nZXRlbnYgKCJEQlVTX0RFQlVHX09VVFBVVCIpOworICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gJ1wwJykKKyAgICAgICAgICAgIGR1cDIgKGRldl9udWxsX2ZkLCAyKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfZGJ1c192ZXJib3NlICgia2VlcGluZyBzdGRlcnIgb3BlbiBkdWUgdG8gREJVU19ERUJVR19PVVRQVVRcbiIpOworICAgICAgICAgIGNsb3NlIChkZXZfbnVsbF9mZCk7CiAgICAgICAgIH0KIAogICAgICAgaWYgKCFrZWVwX3VtYXNrKQpAQCAtMzQ2LDcgKzM1NCw3IEBACiAgICAqIGlzIGdvaW5nIHRvIHdvcmsgdGhlbiBzZXRncm91cHMoKSBzaG91bGQgYWxzbyB3b3JrLgogICAgKi8KICAgaWYgKHNldGdyb3VwcyAoMCwgTlVMTCkgPCAwKQotICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gZHJvcCBzdXBwbGVtZW50YXJ5IGdyb3VwczogJXMiLAorICAgIF9kYnVzX3dhcm4gKCJGYWlsZWQgdG8gZHJvcCBzdXBwbGVtZW50YXJ5IGdyb3VwczogJXNcbiIsCiAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CiAKICAgLyogU2V0IEdJRCBmaXJzdCwgb3IgdGhlIHNldHVpZCBtYXkgcmVtb3ZlIG91ciBwZXJtaXNzaW9uCkBAIC00MDYsMTUgKzQxNCwyMyBAQAogICByZXR1cm4gc2VsZjsKIH0KIAotLyogRW5vdWdoIGZkcyB0aGF0IHdlIHNob3VsZG4ndCBydW4gb3V0LCBldmVuIGlmIHNldmVyYWwgdWlkcyB3b3JrCi0gKiB0b2dldGhlciB0byBjYXJyeSBvdXQgYSBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2suIFRoaXMgaGFwcGVucyB0byBiZQotICogdGhlIHNhbWUgbnVtYmVyIHRoYXQgc3lzdGVtZCA8IDIzNCB3b3VsZCBub3JtYWxseSB1c2UuICovCi0jZGVmaW5lIEVOT1VHSF9GRFMgNjU1MzYKLQogZGJ1c19ib29sX3QKLV9kYnVzX3JsaW1pdF9yYWlzZV9mZF9saW1pdCAoREJ1c0Vycm9yICplcnJvcikKK19kYnVzX3JsaW1pdF9yYWlzZV9mZF9saW1pdF9pZl9wcml2aWxlZ2VkICh1bnNpZ25lZCBpbnQgIGRlc2lyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICplcnJvcikKIHsKLSAgc3RydWN0IHJsaW1pdCBvbGQsIGxpbTsKKyAgc3RydWN0IHJsaW1pdCBsaW07CisKKyAgLyogTm8gcG9pbnQgdG8gZG9pbmcgdGhpcyBwcmFjdGljYWxseSBzcGVha2luZworICAgKiBpZiB3ZSdyZSBub3QgdWlkIDAuICBXZSBleHBlY3QgdGhlIHN5c3RlbQorICAgKiBidXMgdG8gdXNlIHRoaXMgYmVmb3JlIHdlIGNoYW5nZSBVSUQsIGFuZAorICAgKiB0aGUgc2Vzc2lvbiBidXMgdGFrZXMgdGhlIExpbnV4IGRlZmF1bHQsCisgICAqIGN1cnJlbnRseSAxMDI0IGZvciBjdXIgYW5kIDQwOTYgZm9yIG1heC4KKyAgICovCisgIGlmIChnZXR1aWQgKCkgIT0gMCkKKyAgICB7CisgICAgICAvKiBub3QgYW4gZXJyb3IsIHdlJ3JlIHByb2JhYmx5IHRoZSBzZXNzaW9uIGJ1cyAqLworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQogCiAgIGlmIChnZXRybGltaXQgKFJMSU1JVF9OT0ZJTEUsICZsaW0pIDwgMCkKICAgICB7CkBAIC00MjMsNDMgKzQzOSwyMiBAQAogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICBvbGQgPSBsaW07Ci0KLSAgaWYgKGdldHVpZCAoKSA9PSAwKQorICBpZiAobGltLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkgfHwgbGltLnJsaW1fY3VyID49IGRlc2lyZWQpCiAgICAgewotICAgICAgLyogV2UgYXJlIHByaXZpbGVnZWQsIHNvIHJhaXNlIHRoZSBzb2Z0IGxpbWl0IHRvIGF0IGxlYXN0Ci0gICAgICAgKiBFTk9VR0hfRkRTLCBhbmQgdGhlIGhhcmQgbGltaXQgdG8gYXQgbGVhc3QgdGhlIGRlc2lyZWQgc29mdAotICAgICAgICogbGltaXQuIFRoaXMgYXNzdW1lcyB3ZSBjYW4gZXhlcmNpc2UgQ0FQX1NZU19SRVNPVVJDRSBvbiBMaW51eCwKLSAgICAgICAqIG9yIG90aGVyIE9TcycgZXF1aXZhbGVudHMuICovCi0gICAgICBpZiAobGltLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkgJiYKLSAgICAgICAgICBsaW0ucmxpbV9jdXIgPCBFTk9VR0hfRkRTKQotICAgICAgICBsaW0ucmxpbV9jdXIgPSBFTk9VR0hfRkRTOwotCi0gICAgICBpZiAobGltLnJsaW1fbWF4ICE9IFJMSU1fSU5GSU5JVFkgJiYKLSAgICAgICAgICBsaW0ucmxpbV9tYXggPCBsaW0ucmxpbV9jdXIpCi0gICAgICAgIGxpbS5ybGltX21heCA9IGxpbS5ybGltX2N1cjsKKyAgICAgIC8qIG5vdCBhbiBlcnJvciwgZXZlcnl0aGluZyBpcyBmaW5lICovCisgICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAKLSAgLyogUmFpc2UgdGhlIHNvZnQgbGltaXQgdG8gbWF0Y2ggdGhlIGhhcmQgbGltaXQsIHdoaWNoIHdlIGNhbiBkbyBldmVuCi0gICAqIGlmIHdlIGFyZSB1bnByaXZpbGVnZWQuIEluIHBhcnRpY3VsYXIsIHN5c3RlbWQgPj0gMjQwIHdpbGwgbm9ybWFsbHkKLSAgICogc2V0IHJsaW1fY3VyIHRvIDEwMjQgYW5kIHJsaW1fbWF4IHRvIDUxMioxMDI0LCByZWNlbnQgRGViaWFuCi0gICAqIHZlcnNpb25zIGVuZCB1cCBzZXR0aW5nIHJsaW1fY3VyIHRvIDEwMjQgYW5kIHJsaW1fbWF4IHRvIDEwMjQqMTAyNCwKLSAgICogYW5kIG9sZGVyIGFuZCBub24tc3lzdGVtZCBMaW51eCBzeXN0ZW1zIHdvdWxkIHR5cGljYWxseSBzZXQgcmxpbV9jdXIKLSAgICogdG8gMTAyNCBhbmQgcmxpbV9tYXggdG8gNDA5Ni4gKi8KLSAgaWYgKGxpbS5ybGltX21heCA9PSBSTElNX0lORklOSVRZIHx8IGxpbS5ybGltX2N1ciA8IGxpbS5ybGltX21heCkKLSAgICBsaW0ucmxpbV9jdXIgPSBsaW0ucmxpbV9tYXg7Ci0KLSAgLyogRWFybHktcmV0dXJuIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCi0gIGlmIChsaW0ucmxpbV9tYXggPT0gb2xkLnJsaW1fbWF4ICYmCi0gICAgICBsaW0ucmxpbV9jdXIgPT0gb2xkLnJsaW1fY3VyKQotICAgIHJldHVybiBUUlVFOworICAvKiBJZ25vcmUgIm1heGltdW0gbGltaXQiLCBhc3N1bWUgd2UgaGF2ZSB0aGUgInN1cGVydXNlciIKKyAgICogcHJpdmlsZWdlcy4gIE9uIExpbnV4IHRoaXMgaXMgQ0FQX1NZU19SRVNPVVJDRS4KKyAgICovCisgIGxpbS5ybGltX2N1ciA9IGxpbS5ybGltX21heCA9IGRlc2lyZWQ7CiAKICAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX05PRklMRSwgJmxpbSkgPCAwKQogICAgIHsKICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgX2RidXNfZXJyb3JfZnJvbV9lcnJubyAoZXJybm8pLAotICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IGZkIGxpbWl0IHRvICVsdTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBsaW0ucmxpbV9jdXIsCi0gICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgZmQgbGltaXQgdG8gJXU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkLCBfZGJ1c19zdHJlcnJvciAoZXJybm8pKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTQ5OCw3ICs0OTMsOCBAQAogfQogCiBkYnVzX2Jvb2xfdAotX2RidXNfcmxpbWl0X3JhaXNlX2ZkX2xpbWl0IChEQnVzRXJyb3IgKmVycm9yKQorX2RidXNfcmxpbWl0X3JhaXNlX2ZkX2xpbWl0X2lmX3ByaXZpbGVnZWQgKHVuc2lnbmVkIGludCAgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgKmVycm9yKQogewogICBmZF9saW1pdF9ub3Rfc3VwcG9ydGVkIChlcnJvcik7CiAgIHJldHVybiBGQUxTRTsKQEAgLTUyMCw2ICs1MTYsOTUgQEAKICAgZGJ1c19mcmVlIChsaW0pOwogfQogCit2b2lkCitfZGJ1c19pbml0X3N5c3RlbV9sb2cgKGRidXNfYm9vbF90IGlzX2RhZW1vbikKK3sKKyNpZmRlZiBIQVZFX1NZU0xPR19ICisgIGludCBsb2dvcHRzID0gTE9HX1BJRDsKKworI2lmIEhBVkVfREVDTF9MT0dfUEVSUk9SCisjaWZkZWYgSEFWRV9TWVNURU1ECisgIGlmICghaXNfZGFlbW9uIHx8IHNkX2Jvb3RlZCAoKSA8PSAwKQorI2VuZGlmCisgICAgbG9nb3B0cyB8PSBMT0dfUEVSUk9SOworI2VuZGlmCisKKyAgb3BlbmxvZyAoImRidXMiLCBsb2dvcHRzLCBMT0dfREFFTU9OKTsKKyNlbmRpZgorfQorCisvKioKKyAqIExvZyBhIG1lc3NhZ2UgdG8gdGhlIHN5c3RlbSBsb2cgZmlsZSAoZS5nLiBzeXNsb2cgb24gVW5peCkuCisgKgorICogQHBhcmFtIHNldmVyaXR5IGEgc2V2ZXJpdHkgdmFsdWUKKyAqIEBwYXJhbSBtc2cgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZworICovCit2b2lkCitfZGJ1c19zeXN0ZW1fbG9nIChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIG1zZyk7CisKKyAgX2RidXNfc3lzdGVtX2xvZ3YgKHNldmVyaXR5LCBtc2csIGFyZ3MpOworCisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qKgorICogTG9nIGEgbWVzc2FnZSB0byB0aGUgc3lzdGVtIGxvZyBmaWxlIChlLmcuIHN5c2xvZyBvbiBVbml4KS4KKyAqCisgKiBAcGFyYW0gc2V2ZXJpdHkgYSBzZXZlcml0eSB2YWx1ZQorICogQHBhcmFtIG1zZyBhIHByaW50Zi1zdHlsZSBmb3JtYXQgc3RyaW5nCisgKiBAcGFyYW0gYXJncyBhcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCisgKgorICogSWYgdGhlIEZBVEFMIHNldmVyaXR5IGlzIGdpdmVuLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdGVybWluYXRlIHRoZSBwcm9ncmFtCisgKiB3aXRoIGFuIGVycm9yIGNvZGUuCisgKi8KK3ZvaWQKK19kYnVzX3N5c3RlbV9sb2d2IChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNoYXIgKm1zZywgdmFfbGlzdCBhcmdzKQoreworICB2YV9saXN0IHRtcDsKKyNpZmRlZiBIQVZFX1NZU0xPR19ICisgIGludCBmbGFnczsKKyAgc3dpdGNoIChzZXZlcml0eSkKKyAgICB7CisgICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19JTkZPOgorICAgICAgICBmbGFncyA9ICBMT0dfREFFTU9OIHwgTE9HX05PVElDRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HOgorICAgICAgICBmbGFncyA9ICBMT0dfREFFTU9OIHwgTE9HX1dBUk5JTkc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEQlVTX1NZU1RFTV9MT0dfU0VDVVJJVFk6CisgICAgICAgIGZsYWdzID0gTE9HX0FVVEggfCBMT0dfTk9USUNFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgREJVU19TWVNURU1fTE9HX0ZBVEFMOgorICAgICAgICBmbGFncyA9IExPR19EQUVNT058TE9HX0NSSVQ7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICBEQlVTX1ZBX0NPUFkgKHRtcCwgYXJncyk7CisgIHZzeXNsb2cgKGZsYWdzLCBtc2csIHRtcCk7CisgIHZhX2VuZCAodG1wKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9TWVNMT0dfSCkgfHwgIUhBVkVfREVDTF9MT0dfUEVSUk9SCisgICAgeworICAgICAgLyogdnN5c2xvZygpIHdvbid0IHdyaXRlIHRvIHN0ZGVyciwgc28gd2UnZCBiZXR0ZXIgZG8gaXQgKi8KKyAgICAgIERCVVNfVkFfQ09QWSAodG1wLCBhcmdzKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImRidXNbIiBEQlVTX1BJRF9GT1JNQVQgIl06ICIsIF9kYnVzX2dldHBpZCAoKSk7CisgICAgICB2ZnByaW50ZiAoc3RkZXJyLCBtc2csIHRtcCk7CisgICAgICBmcHV0YyAoJ1xuJywgc3RkZXJyKTsKKyAgICAgIHZhX2VuZCAodG1wKTsKKyAgICB9CisjZW5kaWYKKworICBpZiAoc2V2ZXJpdHkgPT0gREJVU19TWVNURU1fTE9HX0ZBVEFMKQorICAgIGV4aXQgKDEpOworfQorCiAvKiogSW5zdGFsbHMgYSBVTklYIHNpZ25hbCBoYW5kbGVyCiAgKgogICogQHBhcmFtIHNpZyB0aGUgc2lnbmFsIHRvIGhhbmRsZQpAQCAtNTYwLDcgKzY0NSw3IEBACiBfZGJ1c191c2VyX2F0X2NvbnNvbGUgKGNvbnN0IGNoYXIgKnVzZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcikKIHsKLSNpZmRlZiBEQlVTX0NPTlNPTEVfQVVUSF9ESVIKKwogICBEQnVzU3RyaW5nIHUsIGY7CiAgIGRidXNfYm9vbF90IHJlc3VsdDsKIApAQCAtNTkxLDkgKzY3Niw2IEBACiAgIF9kYnVzX3N0cmluZ19mcmVlICgmZik7CiAKICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gIHJldHVybiBGQUxTRTsKLSNlbmRpZgogfQogCiAKQEAgLTEwOTUsNyArMTE3Nyw3IEBACiAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgaW50IGksIGxlbjsgCiAgIAotICBidWYgPSBfZGJ1c19zdHJpbmdfZ2V0X3VkYXRhIChzdHIpOworICBidWYgPSBfZGJ1c19zdHJpbmdfZ2V0X2RhdGEgKHN0cik7CiAgIGxlbiA9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpOwogICAKICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQpAQCAtMTE5MCwxNzcgKzEyNzIsMjMgQEAKICAgcmV0dXJuIEZBTFNFOwogfQogCi0vKioKLSAqIFJlcGxhY2UgdGhlIERCVVNfUFJFRklYIGluIHRoZSBnaXZlbiBwYXRoLCBpbi1wbGFjZSwgYnkgdGhlCi0gKiBjdXJyZW50IEQtQnVzIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuIE9uIFVuaXggdGhpcyBmdW5jdGlvbgotICogZG9lcyBub3RoaW5nLCBzdWNjZXNzZnVsbHkuCisvKgorICogcmVwbGFjZXMgdGhlIHRlcm0gREJVU19QUkVGSVggaW4gY29uZmlndXJlX3RpbWVfcGF0aCBieSB0aGUKKyAqIGN1cnJlbnQgZGJ1cyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiBPbiB1bml4IHRoaXMgZnVuY3Rpb24gaXMgYSBub29wCiAgKgotICogQHBhcmFtIHBhdGggcGF0aCB0byBlZGl0Ci0gKiBAcmV0dXJuICNGQUxTRSBvbiBPT00KKyAqIEBwYXJhbSBjb25maWd1cmVfdGltZV9wYXRoCisgKiBAcmV0dXJuIHJlYWwgcGF0aAogICovCi1kYnVzX2Jvb2xfdAotX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoREJ1c1N0cmluZyAqcGF0aCkKK2NvbnN0IGNoYXIgKgorX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoY29uc3QgY2hhciAqY29uZmlndXJlX3RpbWVfcGF0aCkKIHsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBkYnVzX2Jvb2xfdAotZW5zdXJlX293bmVkX2RpcmVjdG9yeSAoY29uc3QgY2hhciAqbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEQnVzU3RyaW5nICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2Jvb2xfdCBjcmVhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgKmVycm9yKQotewotICBjb25zdCBjaGFyICpkaXIgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHN0cmluZyk7Ci0gIHN0cnVjdCBzdGF0IGJ1ZjsKLQotICBpZiAoY3JlYXRlICYmICFfZGJ1c19lbnN1cmVfZGlyZWN0b3J5IChzdHJpbmcsIGVycm9yKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyoKLSAgICogVGhlIHN0YXQoKS1iYXNlZCBjaGVja3MgaW4gdGhpcyBmdW5jdGlvbiBhcmUgdG8gcHJvdGVjdCBhZ2FpbnN0Ci0gICAqIG1pc3Rha2VzLCBub3QgbWFsaWNlLiBXZSBhcmUgd29ya2luZyBpbiBhIGRpcmVjdG9yeSB0aGF0IGlzIG1lYW50Ci0gICAqIHRvIGJlIHRydXN0ZWQ7IGJ1dCBpZiBhIHVzZXIgaGFzIHVzZWQgYHN1YCBvciBzaW1pbGFyIHRvIGVzY2FsYXRlCi0gICAqIHRoZWlyIHByaXZpbGVnZXMgd2l0aG91dCBjb3JyZWN0bHkgY2xlYXJpbmcgdGhlIGVudmlyb25tZW50LCB0aGUKLSAgICogWERHX1JVTlRJTUVfRElSIGluIHRoZSBlbnZpcm9ubWVudCBtaWdodCBzdGlsbCBiZSB0aGUgdXNlcidzCi0gICAqIGFuZCBub3Qgcm9vdCdzLiBXZSBkb24ndCB3YW50IHRvIHdyaXRlIHJvb3Qtb3duZWQgZmlsZXMgaW50byB0aGF0Ci0gICAqIGRpcmVjdG9yeSwgc28ganVzdCB3YXJuIGFuZCBkb24ndCBwcm92aWRlIHN1cHBvcnQgZm9yIHRyYW5zaWVudAotICAgKiBzZXJ2aWNlcyBpbiB0aGF0IGNhc2UuCi0gICAqCi0gICAqIEluIHBhcnRpY3VsYXIsIHdlIHVzZSBzdGF0KCkgYW5kIG5vdCBsc3RhdCgpIHNvIHRoYXQgaWYgd2UgbGF0ZXIKLSAgICogZGVjaWRlIHRvIHVzZSBhIGRpZmZlcmVudCBkaXJlY3RvcnkgbmFtZSBmb3IgdHJhbnNpZW50IHNlcnZpY2VzLAotICAgKiB3ZSBjYW4gZHJvcCBpbiBhIGNvbXBhdGliaWxpdHkgc3ltbGluayB3aXRob3V0IGJyZWFraW5nIG9sZGVyCi0gICAqIGxpYmRidXMuCi0gICAqLwotCi0gIGlmIChzdGF0IChkaXIsICZidWYpICE9IDApCi0gICAgewotICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0KLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgX2RidXNfZXJyb3JfZnJvbV9lcnJubyAoc2F2ZWRfZXJybm8pLAotICAgICAgICAgICAgICAgICAgICAgICIlcyBcIiVzXCIgbm90IGF2YWlsYWJsZTogJXMiLCBsYWJlbCwgZGlyLAotICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmVycm9yIChzYXZlZF9lcnJubykpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIVNfSVNESVIgKGJ1Zi5zdF9tb2RlKSkKLSAgICB7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELCAiJXMgXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9yeSIsCi0gICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIGRpcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGlmIChidWYuc3RfdWlkICE9IGdldGV1aWQgKCkpCi0gICAgewotICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgXCIlc1wiIGlzIG93bmVkIGJ5IHVpZCAlbGQsIG5vdCBvdXIgdWlkICVsZCIsCi0gICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIGRpciwgKGxvbmcpIGJ1Zi5zdF91aWQsIChsb25nKSBnZXRldWlkICgpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgLyogVGhpcyBpcyBqdXN0IGJlY2F1c2Ugd2UgaGF2ZSB0aGUgc3RhdCgpIHJlc3VsdHMgYWxyZWFkeSwgc28gd2UgbWlnaHQKLSAgICogYXMgd2VsbCBjaGVjayBvcHBvcnR1bmlzdGljYWxseS4gKi8KLSAgaWYgKChTX0lXT1RIIHwgU19JV0dSUCkgJiBidWYuc3RfbW9kZSkKLSAgICB7Ci0gICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICIlcyBcIiVzXCIgY2FuIGJlIHdyaXR0ZW4gYnkgb3RoZXJzIChtb2RlIDAlbykiLAotICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLCBkaXIsIGJ1Zi5zdF9tb2RlKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgcmV0dXJuIFRSVUU7CisgIHJldHVybiBjb25maWd1cmVfdGltZV9wYXRoOwogfQogCiAjZGVmaW5lIERCVVNfVU5JWF9TVEFOREFSRF9TRVNTSU9OX1NFUlZJQ0VESVIgIi9kYnVzLTEvc2VydmljZXMiCiAjZGVmaW5lIERCVVNfVU5JWF9TVEFOREFSRF9TWVNURU1fU0VSVklDRURJUiAiL2RidXMtMS9zeXN0ZW0tc2VydmljZXMiCiAKIC8qKgotICogUmV0dXJucyB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgZm9yIGEgc2Vzc2lvbiBidXMgdG8gbG9vayBmb3IKLSAqIHRyYW5zaWVudCBzZXJ2aWNlIGFjdGl2YXRpb24gZmlsZXMuCi0gKgotICogQHBhcmFtIGRpcnMgdGhlIGRpcmVjdG9yeSBsaXN0IHdlIGFyZSByZXR1cm5pbmcKLSAqIEByZXR1cm5zICNGQUxTRSBvbiBlcnJvcgotICovCi1kYnVzX2Jvb2xfdAotX2RidXNfc2V0X3VwX3RyYW5zaWVudF9zZXNzaW9uX3NlcnZpY2VkaXJzIChEQnVzTGlzdCAgKipkaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcikKLXsKLSAgY29uc3QgY2hhciAqeGRnX3J1bnRpbWVfZGlyOwotICBEQnVzU3RyaW5nIHNlcnZpY2VzOwotICBEQnVzU3RyaW5nIGRidXMxOwotICBEQnVzU3RyaW5nIHhyZDsKLSAgZGJ1c19ib29sX3QgcmV0ID0gRkFMU0U7Ci0gIGNoYXIgKmRhdGEgPSBOVUxMOwotCi0gIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZkYnVzMSkpCi0gICAgewotICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmc2VydmljZXMpKQotICAgIHsKLSAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmZGJ1czEpOwotICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmeHJkKSkKLSAgICB7Ci0gICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJmRidXMxKTsKLSAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmc2VydmljZXMpOwotICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICB4ZGdfcnVudGltZV9kaXIgPSBfZGJ1c19nZXRlbnYgKCJYREdfUlVOVElNRV9ESVIiKTsKLQotICAvKiBOb3QgYW4gZXJyb3IsIHdlIGp1c3QgY2FuJ3QgaGF2ZSB0cmFuc2llbnQgc2Vzc2lvbiBzZXJ2aWNlcyAqLwotICBpZiAoeGRnX3J1bnRpbWVfZGlyID09IE5VTEwpCi0gICAgewotICAgICAgX2RidXNfdmVyYm9zZSAoIlhER19SVU5USU1FX0RJUiBpcyB1bnNldDogdHJhbnNpZW50IHNlc3Npb24gc2VydmljZXMgIgotICAgICAgICAgICAgICAgICAgICAgIm5vdCBhdmFpbGFibGUgaGVyZVxuIik7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJnhyZCwgeGRnX3J1bnRpbWVfZGlyKSB8fAotICAgICAgIV9kYnVzX3N0cmluZ19hcHBlbmRfcHJpbnRmICgmZGJ1czEsICIlcy9kYnVzLTEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZGdfcnVudGltZV9kaXIpIHx8Ci0gICAgICAhX2RidXNfc3RyaW5nX2FwcGVuZF9wcmludGYgKCZzZXJ2aWNlcywgIiVzL2RidXMtMS9zZXJ2aWNlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkZ19ydW50aW1lX2RpcikpCi0gICAgewotICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gIGlmICghZW5zdXJlX293bmVkX2RpcmVjdG9yeSAoIlhER19SVU5USU1FX0RJUiIsICZ4cmQsIEZBTFNFLCBlcnJvcikgfHwKLSAgICAgICFlbnN1cmVfb3duZWRfZGlyZWN0b3J5ICgiWERHX1JVTlRJTUVfRElSIHN1YmRpcmVjdG9yeSIsICZkYnVzMSwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikgfHwKLSAgICAgICFlbnN1cmVfb3duZWRfZGlyZWN0b3J5ICgiWERHX1JVTlRJTUVfRElSIHN1YmRpcmVjdG9yeSIsICZzZXJ2aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCBlcnJvcikpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFfZGJ1c19zdHJpbmdfc3RlYWxfZGF0YSAoJnNlcnZpY2VzLCAmZGF0YSkgfHwKLSAgICAgICFfZGJ1c19saXN0X2FwcGVuZCAoZGlycywgZGF0YSkpCi0gICAgewotICAgICAgX0RCVVNfU0VUX09PTSAoZXJyb3IpOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gIF9kYnVzX3ZlcmJvc2UgKCJUcmFuc2llbnQgc2VydmljZSBkaXJlY3RvcnkgaXMgJXNcbiIsIGRhdGEpOwotICAvKiBPd25lcnNoaXAgd2FzIHRyYW5zZmVycmVkIHRvIEBkaXJzICovCi0gIGRhdGEgPSBOVUxMOwotICByZXQgPSBUUlVFOwotCi1vdXQ6Ci0gIF9kYnVzX3N0cmluZ19mcmVlICgmZGJ1czEpOwotICBfZGJ1c19zdHJpbmdfZnJlZSAoJnNlcnZpY2VzKTsKLSAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ4cmQpOwotICBkYnVzX2ZyZWUgKGRhdGEpOwotICByZXR1cm4gcmV0OwotfQotCi0vKioKICAqIFJldHVybnMgdGhlIHN0YW5kYXJkIGRpcmVjdG9yaWVzIGZvciBhIHNlc3Npb24gYnVzIHRvIGxvb2sgZm9yIHNlcnZpY2UKICAqIGFjdGl2YXRpb24gZmlsZXMKICAqCkBAIC0xNDk2LDcxICsxNDI0LDI3IEBACiB9CiAKIC8qKgotICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzeXN0ZW0uY29uZiBmaWxlCisgKiBBcHBlbmQgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHN5c3RlbS5jb25mIGZpbGUKICAqICh0aGVyZSBpcyBubyBzeXN0ZW0gYnVzIG9uIFdpbmRvd3Mgc28gdGhpcyBjYW4ganVzdAogICogcmV0dXJuIEZBTFNFIGFuZCBwcmludCBhIHdhcm5pbmcgb3Igc29tZXRoaW5nKQogICoKLSAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8sIHdoaWNoIG11c3QgYmUgZW1wdHkgb24gZW50cnkKKyAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8KICAqIEByZXR1cm5zICNGQUxTRSBpZiBubyBtZW1vcnkKICAqLwogZGJ1c19ib29sX3QKLV9kYnVzX2dldF9zeXN0ZW1fY29uZmlnX2ZpbGUgKERCdXNTdHJpbmcgKnN0cikKK19kYnVzX2FwcGVuZF9zeXN0ZW1fY29uZmlnX2ZpbGUgKERCdXNTdHJpbmcgKnN0cikKIHsKLSAgX2RidXNfYXNzZXJ0IChfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoc3RyKSA9PSAwKTsKLQogICByZXR1cm4gX2RidXNfc3RyaW5nX2FwcGVuZCAoc3RyLCBEQlVTX1NZU1RFTV9DT05GSUdfRklMRSk7CiB9CiAKIC8qKgotICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzZXNzaW9uLmNvbmYgZmlsZS4KKyAqIEFwcGVuZCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc2Vzc2lvbi5jb25mIGZpbGUuCiAgKgotICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0bywgd2hpY2ggbXVzdCBiZSBlbXB0eSBvbiBlbnRyeQorICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0bwogICogQHJldHVybnMgI0ZBTFNFIGlmIG5vIG1lbW9yeQogICovCiBkYnVzX2Jvb2xfdAotX2RidXNfZ2V0X3Nlc3Npb25fY29uZmlnX2ZpbGUgKERCdXNTdHJpbmcgKnN0cikKK19kYnVzX2FwcGVuZF9zZXNzaW9uX2NvbmZpZ19maWxlIChEQnVzU3RyaW5nICpzdHIpCiB7Ci0gIF9kYnVzX2Fzc2VydCAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKHN0cikgPT0gMCk7Ci0KICAgcmV0dXJuIF9kYnVzX3N0cmluZ19hcHBlbmQgKHN0ciwgREJVU19TRVNTSU9OX0NPTkZJR19GSUxFKTsKIH0KLQotI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCi0KLS8qCi0gKiBTZXQgdWlkIHRvIGEgbWFjaGluZS1yZWFkYWJsZSBhdXRoZW50aWNhdGlvbiBpZGVudGl0eSAobnVtZXJpYyBVbml4Ci0gKiB1aWQgb3IgQ29udmVydFNpZFRvU3RyaW5nU2lkLXN0eWxlIFdpbmRvd3MgU0lEKSB0aGF0IGlzIGxpa2VseSB0byBleGlzdCwKLSAqIGFuZCBkaWZmZXJzIGZyb20gdGhlIGlkZW50aXR5IG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCi0gKgotICogQHBhcmFtIHVpZCBQb3B1bGF0ZWQgd2l0aCBhIG1hY2hpbmUtcmVhZGFibGUgYXV0aGVudGljYXRpb24gaWRlbnRpdHkKLSAqICAgIG9uIHN1Y2Nlc3MKLSAqIEByZXR1cm5zICNGQUxTRSBpZiBubyBtZW1vcnkKLSAqLwotZGJ1c19ib29sX3QKLV9kYnVzX3Rlc3RfYXBwZW5kX2RpZmZlcmVudF91aWQgKERCdXNTdHJpbmcgKnVpZCkKLXsKLSAgaWYgKGdldGV1aWQgKCkgPT0gMCkKLSAgICByZXR1cm4gX2RidXNfc3RyaW5nX2FwcGVuZCAodWlkLCAiNjU1MzQiKTsKLSAgZWxzZQotICAgIHJldHVybiBfZGJ1c19zdHJpbmdfYXBwZW5kICh1aWQsICIwIik7Ci19Ci0KLS8qCi0gKiBTZXQgdWlkIHRvIGEgaHVtYW4tcmVhZGFibGUgYXV0aGVudGljYXRpb24gaWRlbnRpdHkgKGxvZ2luIG5hbWUpCi0gKiB0aGF0IGlzIGxpa2VseSB0byBleGlzdCwgYW5kIGRpZmZlcnMgZnJvbSB0aGUgaWRlbnRpdHkgb2YgdGhlIGN1cnJlbnQKLSAqIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IG9ubHkgZXhpc3RzIG9uIFVuaXggcGxhdGZvcm1zLgotICoKLSAqIEBwYXJhbSB1aWQgUG9wdWxhdGVkIHdpdGggYSBtYWNoaW5lLXJlYWRhYmxlIGF1dGhlbnRpY2F0aW9uIGlkZW50aXR5Ci0gKiAgICBvbiBzdWNjZXNzCi0gKiBAcmV0dXJucyAjRkFMU0UgaWYgbm8gbWVtb3J5Ci0gKi8KLWRidXNfYm9vbF90Ci1fZGJ1c190ZXN0X2FwcGVuZF9kaWZmZXJlbnRfdXNlcm5hbWUgKERCdXNTdHJpbmcgKnVzZXJuYW1lKQotewotICBpZiAoZ2V0ZXVpZCAoKSA9PSAwKQotICAgIHJldHVybiBfZGJ1c19zdHJpbmdfYXBwZW5kICh1c2VybmFtZSwgIm5vYm9keSIpOwotICBlbHNlCi0gICAgcmV0dXJuIF9kYnVzX3N0cmluZ19hcHBlbmQgKHVzZXJuYW1lLCAicm9vdCIpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zeXNkZXBzLXV0aWwtd2luLmMgYi9kYnVzL2RidXMtc3lzZGVwcy11dGlsLXdpbi5jCmluZGV4IDhjOGZiZWQuLjNiNzU0ZGIgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zeXNkZXBzLXV0aWwtd2luLmMKKysrIGIvZGJ1cy9kYnVzLXN5c2RlcHMtdXRpbC13aW4uYwpAQCAtMjczLDcgKzI3Myw4IEBACiB9CiAKIGRidXNfYm9vbF90Ci1fZGJ1c19ybGltaXRfcmFpc2VfZmRfbGltaXQgKERCdXNFcnJvciAqZXJyb3IpCitfZGJ1c19ybGltaXRfcmFpc2VfZmRfbGltaXRfaWZfcHJpdmlsZWdlZCAodW5zaWduZWQgaW50ICBkZXNpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAqZXJyb3IpCiB7CiAgIGZkX2xpbWl0X25vdF9zdXBwb3J0ZWQgKGVycm9yKTsKICAgcmV0dXJuIEZBTFNFOwpAQCAtMjk1LDYgKzI5Niw3NSBAQAogICBfZGJ1c19hc3NlcnQgKGxpbSA9PSBOVUxMKTsKIH0KIAordm9pZAorX2RidXNfaW5pdF9zeXN0ZW1fbG9nIChkYnVzX2Jvb2xfdCBpc19kYWVtb24pCit7CisgIC8qIE91dHB1dERlYnVnU3RyaW5nQSBkb2Vzbid0IG5lZWQgYW55IHNwZWNpYWwgaW5pdGlhbGl6YXRpb24sIGRvIG5vdGhpbmcgKi8KK30KKworLyoqCisgKiBMb2cgYSBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbG9nIGZpbGUgKGUuZy4gc3lzbG9nIG9uIFVuaXgpLgorICoKKyAqIEBwYXJhbSBzZXZlcml0eSBhIHNldmVyaXR5IHZhbHVlCisgKiBAcGFyYW0gbXNnIGEgcHJpbnRmLXN0eWxlIGZvcm1hdCBzdHJpbmcKKyAqLwordm9pZAorX2RidXNfc3lzdGVtX2xvZyAoREJ1c1N5c3RlbUxvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBjaGFyICptc2csIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBtc2cpOworCisgIF9kYnVzX3N5c3RlbV9sb2d2IChzZXZlcml0eSwgbXNnLCBhcmdzKTsKKworICB2YV9lbmQgKGFyZ3MpOworfQorCisvKioKKyAqIExvZyBhIG1lc3NhZ2UgdG8gdGhlIHN5c3RlbSBsb2cgZmlsZSAoZS5nLiBzeXNsb2cgb24gVW5peCkuCisgKgorICogQHBhcmFtIHNldmVyaXR5IGEgc2V2ZXJpdHkgdmFsdWUKKyAqIEBwYXJhbSBtc2cgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZworICogQHBhcmFtIGFyZ3MgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworICoKKyAqIElmIHRoZSBGQVRBTCBzZXZlcml0eSBpcyBnaXZlbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbQorICogd2l0aCBhbiBlcnJvciBjb2RlLgorICovCit2b2lkCitfZGJ1c19zeXN0ZW1fbG9ndiAoREJ1c1N5c3RlbUxvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBjaGFyICptc2csIHZhX2xpc3QgYXJncykKK3sKKyAgY2hhciAqcyA9ICIiOworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgY2hhciBmb3JtYXRbMTAyNF07CisKKyAgc3dpdGNoKHNldmVyaXR5KSAKKyAgIHsKKyAgICAgY2FzZSBEQlVTX1NZU1RFTV9MT0dfSU5GTzogcyA9ICJpbmZvIjsgYnJlYWs7CisgICAgIGNhc2UgREJVU19TWVNURU1fTE9HX1dBUk5JTkc6IHMgPSAid2FybmluZyI7IGJyZWFrOworICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19TRUNVUklUWTogcyA9ICJzZWN1cml0eSI7IGJyZWFrOworICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19GQVRBTDogcyA9ICJmYXRhbCI7IGJyZWFrOworICAgfQorICAgCisgIHNucHJpbnRmKGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCksICIlcyVzIiwgcyAsbXNnKTsKKyAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYXJncyk7CisgIE91dHB1dERlYnVnU3RyaW5nQShidWYpOworICAKKyAgaWYgKHNldmVyaXR5ID09IERCVVNfU1lTVEVNX0xPR19GQVRBTCkKKyAgICBleGl0ICgxKTsKK30KKworLyoqIEluc3RhbGxzIGEgc2lnbmFsIGhhbmRsZXIKKyAqCisgKiBAcGFyYW0gc2lnIHRoZSBzaWduYWwgdG8gaGFuZGxlCisgKiBAcGFyYW0gaGFuZGxlciB0aGUgaGFuZGxlcgorICovCit2b2lkCitfZGJ1c19zZXRfc2lnbmFsX2hhbmRsZXIgKGludCAgICAgICAgICAgICAgIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1NpZ25hbEhhbmRsZXIgaGFuZGxlcikKK3sKKyAgX2RidXNfdmVyYm9zZSAoIl9kYnVzX3NldF9zaWduYWxfaGFuZGxlcigpIGhhcyB0byBiZSBpbXBsZW1lbnRlZFxuIik7Cit9CisKIC8qKgogICogc3RhdCgpIHdyYXBwZXIuCiAgKgpAQCAtMTM2NywxNCArMTQzNywxMiBAQAogICAgICAgcmV0dXJuICJUaGUgcGFzc3dvcmQgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBwYXNzd29yZCBmaWx0ZXIgRExMcy4iOwogI2VuZGlmCiAKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1zZyA9IHN0cmVycm9yIChlcnJvcl9udW1iZXIpOwotCi0gICAgICAgIGlmIChtc2cgPT0gTlVMTCkKLSAgICAgICAgICBtc2cgPSAidW5rbm93biI7Ci0KLSAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CisgIG1zZyA9IHN0cmVycm9yIChlcnJvcl9udW1iZXIpOworICBpZiAobXNnID09IE5VTEwpCisgICAgbXNnID0gInVua25vd24iOworCisgIHJldHVybiBtc2c7CiAjZW5kaWYgLy9EQlVTX1dJTkNFCiB9CiAKQEAgLTE0MDIsODggKzE0NzAsNzcgQEAKICAgcmV0dXJuIEZBTFNFOwogfQogCi0vKioKLSAqIFJlcGxhY2UgdGhlIERCVVNfUFJFRklYIGluIHRoZSBnaXZlbiBwYXRoLCBpbi1wbGFjZSwgYnkgdGhlCi0gKiBjdXJyZW50IEQtQnVzIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuIE9uIFVuaXggdGhpcyBmdW5jdGlvbgotICogZG9lcyBub3RoaW5nLCBzdWNjZXNzZnVsbHkuCisvKgorICogcmVwbGFjZXMgdGhlIHRlcm0gREJVU19QUkVGSVggaW4gY29uZmlndXJlX3RpbWVfcGF0aCBieSB0aGUKKyAqIGN1cnJlbnQgZGJ1cyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiBPbiB1bml4IHRoaXMgZnVuY3Rpb24gaXMgYSBub29wCiAgKgotICogQHBhcmFtIHBhdGggcGF0aCB0byBlZGl0Ci0gKiBAcmV0dXJuICNGQUxTRSBvbiBPT00KKyAqIEBwYXJhbSBjb25maWd1cmVfdGltZV9wYXRoCisgKiBAcmV0dXJuIHJlYWwgcGF0aAogICovCi1kYnVzX2Jvb2xfdAotX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoREJ1c1N0cmluZyAqcGF0aCkKK2NvbnN0IGNoYXIgKgorX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoY29uc3QgY2hhciAqY29uZmlndXJlX3RpbWVfcGF0aCkKIHsKICNpZm5kZWYgREJVU19QUkVGSVgKLSAgLyogbGVhdmUgcGF0aCB1bmNoYW5nZWQgKi8KLSAgcmV0dXJuIFRSVUU7CisgIHJldHVybiBjb25maWd1cmVfdGltZV9wYXRoOwogI2Vsc2UKLSAgREJ1c1N0cmluZyBydW50aW1lX3ByZWZpeDsKKyAgc3RhdGljIGNoYXIgcmV0dmFsWzEwMDBdOworICBzdGF0aWMgY2hhciBydW50aW1lX3ByZWZpeFsxMDAwXTsKKyAgaW50IGxlbiA9IDEwMDA7CiAgIGludCBpOwogCi0gIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZydW50aW1lX3ByZWZpeCkpCi0gICAgcmV0dXJuIEZBTFNFOworICBpZiAoIWNvbmZpZ3VyZV90aW1lX3BhdGgpCisgICAgcmV0dXJuIE5VTEw7CiAKLSAgaWYgKCFfZGJ1c19nZXRfaW5zdGFsbF9yb290ICgmcnVudGltZV9wcmVmaXgpKQotICAgIHsKLSAgICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcnVudGltZV9wcmVmaXgpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KKyAgaWYgKCghX2RidXNfZ2V0X2luc3RhbGxfcm9vdChydW50aW1lX3ByZWZpeCwgbGVuKSB8fAorICAgICAgIHN0cm5jbXAgKGNvbmZpZ3VyZV90aW1lX3BhdGgsIERCVVNfUFJFRklYICIvIiwKKyAgICAgICAgICAgICAgICBzdHJsZW4gKERCVVNfUFJFRklYKSArIDEpKSkgeworICAgICBzdHJuY3B5IChyZXR2YWwsIGNvbmZpZ3VyZV90aW1lX3BhdGgsIHNpemVvZiAocmV0dmFsKSAtIDEpOworICAgICAvKiBzdHJuY3B5IGRvZXMgbm90IGd1YXJhbnRlZSB0byAwLXRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAgIHJldHZhbFtzaXplb2YgKHJldHZhbCkgLSAxXSA9ICdcMCc7CisgIH0gZWxzZSB7CisgICAgIHNpemVfdCByZW1haW5pbmc7CiAKLSAgaWYgKF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmcnVudGltZV9wcmVmaXgpID09IDApCi0gICAgewotICAgICAgLyogY2Fubm90IGRldGVybWluZSBpbnN0YWxsIHJvb3QsIGxlYXZlIHBhdGggdW5jaGFuZ2VkICovCi0gICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnJ1bnRpbWVfcHJlZml4KTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICBpZiAoX2RidXNfc3RyaW5nX3N0YXJ0c193aXRoX2Nfc3RyIChwYXRoLCBEQlVTX1BSRUZJWCAiLyIpKQotICAgIHsKLSAgICAgIC8qIFJlcGxhY2UgREJVU19QUkVGSVggIi8iIHdpdGggcnVudGltZV9wcmVmaXguCi0gICAgICAgKiBOb3RlIHVudXN1YWwgY2FsbGluZyBjb252ZW50aW9uOiBzb3VyY2UgaXMgZmlyc3QsIHRoZW4gZGVzdCAqLwotICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfcmVwbGFjZV9sZW4gKAotICAgICAgICAgICAgJnJ1bnRpbWVfcHJlZml4LCAwLCBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJnJ1bnRpbWVfcHJlZml4KSwKLSAgICAgICAgICAgIHBhdGgsIDAsIHN0cmxlbiAoREJVU19QUkVGSVgpICsgMSkpCi0gICAgICAgIHsKLSAgICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnJ1bnRpbWVfcHJlZml4KTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgIHN0cm5jcHkgKHJldHZhbCwgcnVudGltZV9wcmVmaXgsIHNpemVvZiAocmV0dmFsKSAtIDEpOworICAgICByZXR2YWxbc2l6ZW9mIChyZXR2YWwpIC0gMV0gPSAnXDAnOworICAgICByZW1haW5pbmcgPSBzaXplb2YgKHJldHZhbCkgLSAxIC0gc3RybGVuIChyZXR2YWwpOworICAgICBzdHJuY2F0IChyZXR2YWwsCisgICAgICAgICBjb25maWd1cmVfdGltZV9wYXRoICsgc3RybGVuIChEQlVTX1BSRUZJWCkgKyAxLAorICAgICAgICAgcmVtYWluaW5nKTsKKyAgfQogCiAgIC8qIFNvbWVob3csIGluIHNvbWUgc2l0dWF0aW9ucywgYmFja3NsYXNoZXMgZ2V0IGNvbGxhcHNlZCBpbiB0aGUgc3RyaW5nLgogICAgKiBTaW5jZSB3aW5kb3dzIEMgbGlicmFyeSBhY2NlcHRzIGJvdGggZm9yd2FyZCBhbmQgYmFja3NsYXNoZXMgYXMKICAgICogcGF0aCBzZXBhcmF0b3JzLCBjb252ZXJ0IGFsbCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMuCiAgICAqLwogCi0gIGZvciAoaSA9IDA7IGkgPCBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAocGF0aCk7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChwYXRoLCBpKSA9PSAnXFwnKQotICAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2J5dGUgKHBhdGgsIGksICcvJyk7Ci0gICAgfQotCi0gIF9kYnVzX3N0cmluZ19mcmVlICgmcnVudGltZV9wcmVmaXgpOwotICByZXR1cm4gVFJVRTsKKyAgZm9yKGkgPSAwOyByZXR2YWxbaV0gIT0gJ1wwJzsgaSsrKSB7CisgICAgaWYocmV0dmFsW2ldID09ICdcXCcpCisgICAgICByZXR2YWxbaV0gPSAnLyc7CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKICNlbmRpZgogfQogCisvKioKKyAqIHJldHVybiB0aGUgcmVsb2NhdGVkIERBVEFESVIKKyAqCisgKiBAcmV0dXJucyByZWxvY2F0ZWQgREFUQURJUiBzdGF0aWMgc3RyaW5nCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorX2RidXNfd2luZG93c19nZXRfZGF0YWRpciAodm9pZCkKK3sKKwlyZXR1cm4gX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeChEQlVTX0RBVEFESVIpOworfQorCisjdW5kZWYgREJVU19EQVRBRElSCisjZGVmaW5lIERCVVNfREFUQURJUiBfZGJ1c193aW5kb3dzX2dldF9kYXRhZGlyICgpCisKKwogI2RlZmluZSBEQlVTX1NUQU5EQVJEX1NFU1NJT05fU0VSVklDRURJUiAiL2RidXMtMS9zZXJ2aWNlcyIKICNkZWZpbmUgREJVU19TVEFOREFSRF9TWVNURU1fU0VSVklDRURJUiAiL2RidXMtMS9zeXN0ZW0tc2VydmljZXMiCiAKIC8qKgotICogUmV0dXJucyB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgZm9yIGEgc2Vzc2lvbiBidXMgdG8gbG9vayBmb3IKLSAqIHRyYW5zaWVudCBzZXJ2aWNlIGFjdGl2YXRpb24gZmlsZXMuIE9uIFdpbmRvd3MsIHRoZXJlIGFyZSBub25lLgotICoKLSAqIEBwYXJhbSBkaXJzIHRoZSBkaXJlY3RvcnkgbGlzdCB3ZSBhcmUgcmV0dXJuaW5nCi0gKiBAcmV0dXJucyAjVFJVRQotICovCi1kYnVzX2Jvb2xfdAotX2RidXNfc2V0X3VwX3RyYW5zaWVudF9zZXNzaW9uX3NlcnZpY2VkaXJzIChEQnVzTGlzdCAgKipkaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcikKLXsKLSAgLyogTm90IGFuIGVycm9yLCB3ZSBqdXN0IGRvbid0IGhhdmUgdHJhbnNpZW50IHNlc3Npb24gc2VydmljZXMgb24gV2luZG93cyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCiAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBmb3IgYSBzZXNzaW9uIGJ1cyB0byBsb29rIGZvciBzZXJ2aWNlCiAgKiBhY3RpdmF0aW9uIGZpbGVzCiAgKgpAQCAtMTUyMywzMCArMTU4MCwyNyBAQAogICAgICAgfQogICB9CiAjZWxzZQorLyoKKyB0aGUgY29kZSBmb3IgYWNjZXNzaW5nIHNlcnZpY2VzIHJlcXVpcmVzIGFic29sdXRlIGJhc2UgcGF0aGVzCisgaW4gY2FzZSBEQlVTX0RBVEFESVIgaXMgcmVsYXRpdmUgbWFrZSBpdCBhYnNvbHV0ZQorKi8KKyNpZmRlZiBEQlVTX1dJTgogICB7CiAgICAgREJ1c1N0cmluZyBwOwogCi0gICAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnApKQotICAgICAgZ290byBvb207CisgICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZwLCBEQlVTX0RBVEFESVIpOwogCi0gICAgLyogREJVU19EQVRBRElSIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGU7IHRoZSBidWlsZCBzeXN0ZW1zIHNob3VsZAotICAgICAqIGVuc3VyZSB0aGF0LiAqLwotICAgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJnAsIERCVVNfREFUQURJUikgfHwKLSAgICAgICAgIV9kYnVzX3JlcGxhY2VfaW5zdGFsbF9wcmVmaXggKCZwKSkKKyAgICBpZiAoIV9kYnVzX3BhdGhfaXNfYWJzb2x1dGUgKCZwKSkKICAgICAgIHsKLSAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZwKTsKLSAgICAgICAgZ290byBvb207CisgICAgICAgIGNoYXIgaW5zdGFsbF9yb290WzEwMDBdOworICAgICAgICBpZiAoX2RidXNfZ2V0X2luc3RhbGxfcm9vdCAoaW5zdGFsbF9yb290LCBzaXplb2YoaW5zdGFsbF9yb290KSkpCisgICAgICAgICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICgmc2VydmljZWRpcl9wYXRoLCBpbnN0YWxsX3Jvb3QpKQorICAgICAgICAgICAgZ290byBvb207CiAgICAgICB9Ci0KLSAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZzZXJ2aWNlZGlyX3BhdGgsCi0gICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmcCkpKQotICAgICAgewotICAgICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnApOwotICAgICAgICBnb3RvIG9vbTsKLSAgICAgIH0KLQotICAgIF9kYnVzX3N0cmluZ19mcmVlICgmcCk7CiAgIH0KKyNlbmRpZgorICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZzZXJ2aWNlZGlyX3BhdGgsIERCVVNfREFUQURJUikpCisgICAgZ290byBvb207CiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfYXBwZW5kICgmc2VydmljZWRpcl9wYXRoLCBfREJVU19QQVRIX1NFUEFSQVRPUikpCiAgICAgZ290byBvb207CkBAIC0xNjA3LDggKzE2NjEsNyBAQAogewogICBEQnVzU3RyaW5nIHRtcDsKIAotICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKHN0ciwgREJVU19EQVRBRElSKSB8fAotICAgICAgIV9kYnVzX3JlcGxhY2VfaW5zdGFsbF9wcmVmaXggKHN0cikpCisgIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoc3RyLCBfZGJ1c193aW5kb3dzX2dldF9kYXRhZGlyICgpKSkKICAgICByZXR1cm4gRkFMU0U7CiAKICAgX2RidXNfc3RyaW5nX2luaXRfY29uc3QgKCZ0bXAsICJkYnVzLTEiKTsKQEAgLTE2MjUsNTYgKzE2NzgsMjcgQEAKIH0KIAogLyoqCi0gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHN5c3RlbS5jb25mIGZpbGUKKyAqIEFwcGVuZCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3lzdGVtLmNvbmYgZmlsZQogICogKHRoZXJlIGlzIG5vIHN5c3RlbSBidXMgb24gV2luZG93cyBzbyB0aGlzIGNhbiBqdXN0CiAgKiByZXR1cm4gRkFMU0UgYW5kIHByaW50IGEgd2FybmluZyBvciBzb21ldGhpbmcpCiAgKgotICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0bywgd2hpY2ggbXVzdCBiZSBlbXB0eSBvbiBlbnRyeQorICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0bwogICogQHJldHVybnMgI0ZBTFNFIGlmIG5vIG1lbW9yeQogICovCiBkYnVzX2Jvb2xfdAotX2RidXNfZ2V0X3N5c3RlbV9jb25maWdfZmlsZSAoREJ1c1N0cmluZyAqc3RyKQorX2RidXNfYXBwZW5kX3N5c3RlbV9jb25maWdfZmlsZSAoREJ1c1N0cmluZyAqc3RyKQogewotICBfZGJ1c19hc3NlcnQgKF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpID09IDApOwotCiAgIHJldHVybiBfZGJ1c19nZXRfY29uZmlnX2ZpbGVfbmFtZShzdHIsICJzeXN0ZW0uY29uZiIpOwogfQogCiAvKioKLSAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc2Vzc2lvbi5jb25mIGZpbGUuCisgKiBBcHBlbmQgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHNlc3Npb24uY29uZiBmaWxlLgogICoKLSAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8sIHdoaWNoIG11c3QgYmUgZW1wdHkgb24gZW50cnkKKyAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8KICAqIEByZXR1cm5zICNGQUxTRSBpZiBubyBtZW1vcnkKICAqLwogZGJ1c19ib29sX3QKLV9kYnVzX2dldF9zZXNzaW9uX2NvbmZpZ19maWxlIChEQnVzU3RyaW5nICpzdHIpCitfZGJ1c19hcHBlbmRfc2Vzc2lvbl9jb25maWdfZmlsZSAoREJ1c1N0cmluZyAqc3RyKQogewotICBfZGJ1c19hc3NlcnQgKF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpID09IDApOwotCiAgIHJldHVybiBfZGJ1c19nZXRfY29uZmlnX2ZpbGVfbmFtZShzdHIsICJzZXNzaW9uLmNvbmYiKTsKIH0KLQotI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCi0KLSNkZWZpbmUgQU5PTllNT1VTX1NJRCAiUy0xLTUtNyIKLSNkZWZpbmUgTE9DQUxfU1lTVEVNX1NJRCAiUy0xLTUtMTgiCi0KLWRidXNfYm9vbF90Ci1fZGJ1c190ZXN0X2FwcGVuZF9kaWZmZXJlbnRfdWlkIChEQnVzU3RyaW5nICp1aWQpCi17Ci0gIGNoYXIgKnNpZCA9IE5VTEw7Ci0gIGRidXNfYm9vbF90IHJldDsKLQotICBpZiAoIV9kYnVzX2dldHNpZCAoJnNpZCwgX2RidXNfZ2V0cGlkICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKHN0cmNtcCAoc2lkLCBBTk9OWU1PVVNfU0lEKSA9PSAwKQotICAgIHJldCA9IF9kYnVzX3N0cmluZ19hcHBlbmQgKHVpZCwgTE9DQUxfU1lTVEVNX1NJRCk7Ci0gIGVsc2UKLSAgICByZXQgPSBfZGJ1c19zdHJpbmdfYXBwZW5kICh1aWQsIEFOT05ZTU9VU19TSUQpOwotCi0gIExvY2FsRnJlZSAoc2lkKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3lzZGVwcy11dGlsLmMgYi9kYnVzL2RidXMtc3lzZGVwcy11dGlsLmMKaW5kZXggNDRjYzZhMi4uNmIzNjFlZiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXN5c2RlcHMtdXRpbC5jCisrKyBiL2RidXMvZGJ1cy1zeXNkZXBzLXV0aWwuYwpAQCAtMzUsOCArMzUsNiBAQAogI2VsaWYgKGRlZmluZWQgX19BUFBMRV9fKQogIyBpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgogIyBkZWZpbmUgZW52aXJvbiAoKl9OU0dldEVudmlyb24oKSkKLSNlbGlmIEhBVkVfREVDTF9FTlZJUk9OICYmIGRlZmluZWQoSEFWRV9VTklTVERfSCkKLSMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZWxzZQogZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwogI2VuZGlmCkBAIC05OSw3ICs5Nyw3IEBACiAKICAgaWYgKCFfZGJ1c19zdHJpbmdfZXF1YWxfY19zdHIgKCZkLCBkaXJuYW1lKSkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuICgiRm9yIGZpbGVuYW1lIFwiJXNcIiBnb3QgZGlybmFtZSBcIiVzXCIgYW5kIGV4cGVjdGVkIFwiJXNcIiIsCisgICAgICBfZGJ1c193YXJuICgiRm9yIGZpbGVuYW1lIFwiJXNcIiBnb3QgZGlybmFtZSBcIiVzXCIgYW5kIGV4cGVjdGVkIFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhICgmZCksCiAgICAgICAgICAgICAgICAgICBkaXJuYW1lKTsKQEAgLTExOSw3ICsxMTcsNyBAQAogCiAgIGlmIChfZGJ1c19wYXRoX2lzX2Fic29sdXRlICgmcCkgIT0gZXhwZWN0ZWQpCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIkZvciBwYXRoIFwiJXNcIiBleHBlY3RlZCBhYnNvbHV0ZSA9ICVkIGdvdCAlZCIsCisgICAgICBfZGJ1c193YXJuICgiRm9yIHBhdGggXCIlc1wiIGV4cGVjdGVkIGFic29sdXRlID0gJWQgZ290ICVkXG4iLAogICAgICAgICAgICAgICAgICAgcGF0aCwgZXhwZWN0ZWQsIF9kYnVzX3BhdGhfaXNfYWJzb2x1dGUgKCZwKSk7CiAgICAgICBleGl0ICgxKTsKICAgICB9CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtc3lzZGVwcy13aW4uYyBiL2RidXMvZGJ1cy1zeXNkZXBzLXdpbi5jCmluZGV4IDBkZWVkZWEuLmQxOTI2N2UgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zeXNkZXBzLXdpbi5jCisrKyBiL2RidXMvZGJ1cy1zeXNkZXBzLXdpbi5jCkBAIC05OSw3ICs5OSw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIEJPT0wgaXNfd2lueHBfc3AzX29yX2xvd2VyICh2b2lkKTsKK3N0YXRpYyBCT09MIGlzX3dpbnhwX3NwM19vcl9sb3dlcigpOwogCiAvKgogICogX01JQl9UQ1BST1dfRVggYW5kIGZyaWVuZHMgYXJlIG5vdCBhdmFpbGFibGUgaW4gc3lzdGVtIGhlYWRlcnMKQEAgLTMyMywxMCArMzIzLDkgQEAKICAgICBjYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOgogICAgIGNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6CiAgICAgICByZXR1cm4gREJVU19FUlJPUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gREJVU19FUlJPUl9GQUlMRUQ7CiAgICAgfQorICAKKyAgcmV0dXJuIERCVVNfRVJST1JfRkFJTEVEOwogfQogCiAKQEAgLTUwOCw3ICs1MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGZkLnNvY2ssIF9kYnVzX3N0cmVycm9yX2Zyb21fZXJybm8gKCkpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgX2RidXNfdmVyYm9zZSAoInNvY2tldD0lSXUsIFxuIiwgZmQuc29jayk7CisgIF9kYnVzX3ZlcmJvc2UgKCJfZGJ1c19jbG9zZV9zb2NrZXQ6IHNvY2tldD0lSXUsIFxuIiwgZmQuc29jayk7CiAKICAgcmV0dXJuIFRSVUU7CiB9CkBAIC02MzIsMTIgKzYzMSwxMiBAQAogICAgIHsKICAgICAgIERCVVNfU09DS0VUX1NFVF9FUlJOTyAoKTsKICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJXU0FTZW5kOiBmYWlsZWQ6ICVzXG4iLCBfZGJ1c19zdHJlcnJvcl9mcm9tX2Vycm5vICgpKTsKLSAgICAgIGJ5dGVzX3dyaXR0ZW4gPSAoRFdPUkQpIC0xOworICAgICAgYnl0ZXNfd3JpdHRlbiA9IC0xOwogICAgIH0KICAgZWxzZQogICAgIF9kYnVzX3ZlcmJvc2UgKCJXU0FTZW5kOiA9ICVsZFxuIiwgYnl0ZXNfd3JpdHRlbik7CiAgICAgCi0gIGlmIChieXRlc193cml0dGVuID09IChEV09SRCkgLTEgJiYgZXJybm8gPT0gRUlOVFIpCisgIGlmIChieXRlc193cml0dGVuIDwgMCAmJiBlcnJubyA9PSBFSU5UUikKICAgICBnb3RvIGFnYWluOwogICAgICAgCiAgIHJldHVybiBieXRlc193cml0dGVuOwpAQCAtOTQyLDggKzk0MSw3IEBACiAKICNpZm5kZWYgREJVU19XSU5DRQogCi1zdGF0aWMgQk9PTAotaXNfd2lueHBfc3AzX29yX2xvd2VyICh2b2lkKQorc3RhdGljIEJPT0wgaXNfd2lueHBfc3AzX29yX2xvd2VyKCkKIHsKICAgIE9TVkVSU0lPTklORk9FWCBvc3ZpOwogICAgRFdPUkRMT05HIGR3bENvbmRpdGlvbk1hc2sgPSAwOwpAQCAtMTMxNywxMSArMTMxNSw5IEBACiAKICNlbHNlICAgLyogVVNFX0NIUklTX0lNUEwgKi8KIAotI2lmZGVmIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERQogI2RlZmluZSBEQlVTX1BPTExfQ0hBUl9CVUZGRVJfU0laRSAyMDAwCiAgIGNoYXIgbXNnW0RCVVNfUE9MTF9DSEFSX0JVRkZFUl9TSVpFXTsKICAgY2hhciAqbXNncDsKLSNlbmRpZgogCiAgIGZkX3NldCByZWFkX3NldCwgd3JpdGVfc2V0LCBlcnJfc2V0OwogICBTT0NLRVQgbWF4X2ZkID0gMDsKQEAgLTIyMjgsMzUgKzIyMjQsNiBAQAogfQogCiAvKioKLSAqIENyZWF0ZXMgYSBkaXJlY3RvcnkuIFVubGlrZSBfZGJ1c19lbnN1cmVfZGlyZWN0b3J5KCksIHRoaXMgb25seSBzdWNjZWVkcwotICogaWYgdGhlIGRpcmVjdG9yeSBpcyBnZW51aW5lbHkgbmV3bHktY3JlYXRlZC4KLSAqCi0gKiBAcGFyYW0gZmlsZW5hbWUgZGlyZWN0b3J5IGZpbGVuYW1lCi0gKiBAcGFyYW0gZXJyb3IgaW5pdGlhbGl6ZWQgZXJyb3Igb2JqZWN0Ci0gKiBAcmV0dXJucyAjVFJVRSBvbiBzdWNjZXNzCi0gKi8KLWRidXNfYm9vbF90Ci1fZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChjb25zdCBEQnVzU3RyaW5nICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgKmVycm9yKQotewotICBjb25zdCBjaGFyICpmaWxlbmFtZV9jOwotCi0gIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwotCi0gIGZpbGVuYW1lX2MgPSBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKGZpbGVuYW1lKTsKLQotICBpZiAoIUNyZWF0ZURpcmVjdG9yeUEgKGZpbGVuYW1lX2MsIE5VTEwpKQotICAgIHsKLSAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZV9jLCBfZGJ1c19zdHJlcnJvcl9mcm9tX2Vycm5vICgpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCiAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5OyBzdWNjZWVkcyBpZiB0aGUgZGlyZWN0b3J5CiAgKiBpcyBjcmVhdGVkIG9yIGFscmVhZHkgZXhpc3RlZC4KICAqCkBAIC0yMjY1LDcgKzIyMzIsNyBAQAogICogQHJldHVybnMgI1RSVUUgb24gc3VjY2VzcwogICovCiBkYnVzX2Jvb2xfdAotX2RidXNfZW5zdXJlX2RpcmVjdG9yeSAoY29uc3QgREJ1c1N0cmluZyAqZmlsZW5hbWUsCitfZGJ1c19jcmVhdGVfZGlyZWN0b3J5IChjb25zdCBEQnVzU3RyaW5nICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgKmVycm9yKQogewogICBjb25zdCBjaGFyICpmaWxlbmFtZV9jOwpAQCAtMjMwNCw3ICsyMjcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAqZXJyb3IpCiB7CiAgIGludCBvbGRfbGVuOwotICB1bnNpZ25lZCBjaGFyICpwOworICBjaGFyICpwOwogICBIQ1JZUFRQUk9WIGhwcm92OwogCiAgIG9sZF9sZW4gPSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoc3RyKTsKQEAgLTIzMTUsNyArMjI4Miw3IEBACiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIHAgPSBfZGJ1c19zdHJpbmdfZ2V0X3VkYXRhX2xlbiAoc3RyLCBvbGRfbGVuLCBuX2J5dGVzKTsKKyAgcCA9IF9kYnVzX3N0cmluZ19nZXRfZGF0YV9sZW4gKHN0ciwgb2xkX2xlbiwgbl9ieXRlcyk7CiAKICAgaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0ICgmaHByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgIHsKQEAgLTIzNTMsMjEgKzIzMjAsMjAgQEAKIAogICBpZiAodG1wZGlyID09IE5VTEwpCiAgICAgewotICAgICAgdW5zaWduZWQgY2hhciAqbGFzdF9zbGFzaDsKLSAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKyAgICAgIGNoYXIgKmxhc3Rfc2xhc2g7CiAKICAgICAgIGlmICghR2V0VGVtcFBhdGhBIChzaXplb2YgKGJ1ZiksIGJ1ZikpCiAgICAgICAgIHsKLSAgICAgICAgICBfZGJ1c193YXJuICgiR2V0VGVtcFBhdGggZmFpbGVkIik7CisgICAgICAgICAgX2RidXNfd2FybiAoIkdldFRlbXBQYXRoIGZhaWxlZFxuIik7CiAgICAgICAgICAgX2RidXNfYWJvcnQgKCk7CiAgICAgICAgIH0KIAogICAgICAgLyogRHJvcCB0ZXJtaW5hdGluZyBiYWNrc2xhc2ggb3Igc2xhc2ggKi8KLSAgICAgIGxhc3Rfc2xhc2ggPSBfbWJzcmNociAocCwgJ1xcJyk7Ci0gICAgICBpZiAobGFzdF9zbGFzaCA+IHAgJiYgbGFzdF9zbGFzaFsxXSA9PSAnXDAnKQorICAgICAgbGFzdF9zbGFzaCA9IF9tYnNyY2hyIChidWYsICdcXCcpOworICAgICAgaWYgKGxhc3Rfc2xhc2ggPiBidWYgJiYgbGFzdF9zbGFzaFsxXSA9PSAnXDAnKQogICAgICAgICBsYXN0X3NsYXNoWzBdID0gJ1wwJzsKLSAgICAgIGxhc3Rfc2xhc2ggPSBfbWJzcmNociAocCwgJy8nKTsKLSAgICAgIGlmIChsYXN0X3NsYXNoID4gcCAmJiBsYXN0X3NsYXNoWzFdID09ICdcMCcpCisgICAgICBsYXN0X3NsYXNoID0gX21ic3JjaHIgKGJ1ZiwgJy8nKTsKKyAgICAgIGlmIChsYXN0X3NsYXNoID4gYnVmICYmIGxhc3Rfc2xhc2hbMV0gPT0gJ1wwJykKICAgICAgICAgbGFzdF9zbGFzaFswXSA9ICdcMCc7CiAKICAgICAgIHRtcGRpciA9IGJ1ZjsKQEAgLTI0NTQsNTYgKzI0MjAsMTkyIEBACiAjZGVmaW5lIF9faTM4Nl9fCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZHVtcF9iYWNrdHJhY2VfZm9yX3RocmVhZCAoSEFORExFIGhUaHJlYWQpCisvLyNkZWZpbmUgTUFLRV9GVU5DUFRSKGYpIHN0YXRpYyB0eXBlb2YoZikgKiBwIyNmCisKKy8vTUFLRV9GVU5DUFRSKFN0YWNrV2Fsayk7CisvL01BS0VfRlVOQ1BUUihTeW1HZXRNb2R1bGVCYXNlKTsKKy8vTUFLRV9GVU5DUFRSKFN5bUZ1bmN0aW9uVGFibGVBY2Nlc3MpOworLy9NQUtFX0ZVTkNQVFIoU3ltSW5pdGlhbGl6ZSk7CisvL01BS0VfRlVOQ1BUUihTeW1HZXRTeW1Gcm9tQWRkcik7CisvL01BS0VfRlVOQ1BUUihTeW1HZXRNb2R1bGVJbmZvKTsKK3N0YXRpYyBCT09MIChXSU5BUEkgKnBTdGFja1dhbGspKAorICBEV09SRCBNYWNoaW5lVHlwZSwKKyAgSEFORExFIGhQcm9jZXNzLAorICBIQU5ETEUgaFRocmVhZCwKKyAgTFBTVEFDS0ZSQU1FIFN0YWNrRnJhbWUsCisgIFBWT0lEIENvbnRleHRSZWNvcmQsCisgIFBSRUFEX1BST0NFU1NfTUVNT1JZX1JPVVRJTkUgUmVhZE1lbW9yeVJvdXRpbmUsCisgIFBGVU5DVElPTl9UQUJMRV9BQ0NFU1NfUk9VVElORSBGdW5jdGlvblRhYmxlQWNjZXNzUm91dGluZSwKKyAgUEdFVF9NT0RVTEVfQkFTRV9ST1VUSU5FIEdldE1vZHVsZUJhc2VSb3V0aW5lLAorICBQVFJBTlNMQVRFX0FERFJFU1NfUk9VVElORSBUcmFuc2xhdGVBZGRyZXNzCispOworI2lmZGVmIF9XSU42NAorc3RhdGljIERXT1JENjQgKFdJTkFQSSAqcFN5bUdldE1vZHVsZUJhc2UpKAorICBIQU5ETEUgaFByb2Nlc3MsCisgIERXT1JENjQgZHdBZGRyCispOworc3RhdGljIFBWT0lEICAoV0lOQVBJICpwU3ltRnVuY3Rpb25UYWJsZUFjY2VzcykoCisgIEhBTkRMRSBoUHJvY2VzcywKKyAgRFdPUkQ2NCBBZGRyQmFzZQorKTsKKyNlbHNlCitzdGF0aWMgRFdPUkQgKFdJTkFQSSAqcFN5bUdldE1vZHVsZUJhc2UpKAorICBIQU5ETEUgaFByb2Nlc3MsCisgIERXT1JEIGR3QWRkcgorKTsKK3N0YXRpYyBQVk9JRCAgKFdJTkFQSSAqcFN5bUZ1bmN0aW9uVGFibGVBY2Nlc3MpKAorICBIQU5ETEUgaFByb2Nlc3MsCisgIERXT1JEIEFkZHJCYXNlCispOworI2VuZGlmCitzdGF0aWMgQk9PTCAgKFdJTkFQSSAqcFN5bUluaXRpYWxpemUpKAorICBIQU5ETEUgaFByb2Nlc3MsCisgIFBTVFIgVXNlclNlYXJjaFBhdGgsCisgIEJPT0wgZkludmFkZVByb2Nlc3MKKyk7CitzdGF0aWMgQk9PTCAgKFdJTkFQSSAqcFN5bUdldFN5bUZyb21BZGRyKSgKKyAgSEFORExFIGhQcm9jZXNzLAorICBEV09SRCBBZGRyZXNzLAorICBQRFdPUkQgRGlzcGxhY2VtZW50LAorICBQSU1BR0VITFBfU1lNQk9MIFN5bWJvbAorKTsKK3N0YXRpYyBCT09MICAoV0lOQVBJICpwU3ltR2V0TW9kdWxlSW5mbykoCisgIEhBTkRMRSBoUHJvY2VzcywKKyAgRFdPUkQgZHdBZGRyLAorICBQSU1BR0VITFBfTU9EVUxFIE1vZHVsZUluZm8KKyk7CitzdGF0aWMgRFdPUkQgIChXSU5BUEkgKnBTeW1TZXRPcHRpb25zKSgKKyAgRFdPUkQgU3ltT3B0aW9ucworKTsKKworCitzdGF0aWMgQk9PTCBpbml0X2JhY2t0cmFjZSgpCiB7Ci0gIEFERFJFU1Mgb2xkX2FkZHJlc3M7Ci0gIFNUQUNLRlJBTUUgc2Y7Ci0gIENPTlRFWFQgY29udGV4dDsKLSAgRFdPUkQgZHdJbWFnZVR5cGU7Ci0gIGludCBpID0gMDsKLQotICBTeW1TZXRPcHRpb25zIChTWU1PUFRfVU5ETkFNRSB8IFNZTU9QVF9MT0FEX0xJTkVTKTsKLSAgU3ltSW5pdGlhbGl6ZSAoR2V0Q3VycmVudFByb2Nlc3MgKCksIE5VTEwsIFRSVUUpOworICAgIEhNT0RVTEUgaG1vZERiZ0hlbHAgPSBMb2FkTGlicmFyeUEoImRiZ2hlbHAiKTsKKy8qCisgICAgI2RlZmluZSBHRVRGVU5DKHgpIFwKKyAgICBwIyN4ID0gKHR5cGVvZih4KSopR2V0UHJvY0FkZHJlc3MoaG1vZERiZ0hlbHAsICN4KTsgXAorICAgIGlmICghcCMjeCkgXAorICAgIHsgXAorICAgICAgICByZXR1cm4gRkFMU0U7IFwKKyAgICB9CisgICAgKi8KIAogCi0gIC8qIGNhbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBjdXJyZW50IHRocmVhZCBhcyBHZXRUaHJlYWRDb250ZXh0Ci0gICAqIGRvZXNuJ3Qgc3VwcG9ydCBnZXR0aW5nIGNvbnRleHQgZnJvbSBjdXJyZW50IHRocmVhZCAqLwotICBpZiAoaFRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkKCkpCi0gICAgcmV0dXJuOworLy8gICAgR0VURlVOQyhTdGFja1dhbGspOworLy8gICAgR0VURlVOQyhTeW1HZXRNb2R1bGVCYXNlKTsKKy8vICAgIEdFVEZVTkMoU3ltRnVuY3Rpb25UYWJsZUFjY2Vzcyk7CisvLyAgICBHRVRGVU5DKFN5bUluaXRpYWxpemUpOworLy8gICAgR0VURlVOQyhTeW1HZXRTeW1Gcm9tQWRkcik7CisvLyAgICBHRVRGVU5DKFN5bUdldE1vZHVsZUluZm8pOwogCi0gIERQUklOVEYgKCJCYWNrdHJhY2U6XG4iKTsKKyNkZWZpbmUgRlVOQyh4KSAjeAogCi0gIF9EQlVTX1pFUk8gKG9sZF9hZGRyZXNzKTsKLSAgX0RCVVNfWkVSTyAoY29udGV4dCk7Ci0gIGNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9GVUxMOworICAgICAgcFN0YWNrV2FsayA9IChCT09MICAoV0lOQVBJICopKAorRFdPUkQgTWFjaGluZVR5cGUsCitIQU5ETEUgaFByb2Nlc3MsCitIQU5ETEUgaFRocmVhZCwKK0xQU1RBQ0tGUkFNRSBTdGFja0ZyYW1lLAorUFZPSUQgQ29udGV4dFJlY29yZCwKK1BSRUFEX1BST0NFU1NfTUVNT1JZX1JPVVRJTkUgUmVhZE1lbW9yeVJvdXRpbmUsCitQRlVOQ1RJT05fVEFCTEVfQUNDRVNTX1JPVVRJTkUgRnVuY3Rpb25UYWJsZUFjY2Vzc1JvdXRpbmUsCitQR0VUX01PRFVMRV9CQVNFX1JPVVRJTkUgR2V0TW9kdWxlQmFzZVJvdXRpbmUsCitQVFJBTlNMQVRFX0FERFJFU1NfUk9VVElORSBUcmFuc2xhdGVBZGRyZXNzCispKUdldFByb2NBZGRyZXNzIChobW9kRGJnSGVscCwgRlVOQyhTdGFja1dhbGspKTsKKyNpZmRlZiBfV0lONjQKKyAgICBwU3ltR2V0TW9kdWxlQmFzZT0oRFdPUkQ2NCAgKFdJTkFQSSAqKSgKKyAgSEFORExFIGhQcm9jZXNzLAorICBEV09SRDY0IGR3QWRkcgorKSlHZXRQcm9jQWRkcmVzcyAoaG1vZERiZ0hlbHAsIEZVTkMoU3ltR2V0TW9kdWxlQmFzZSkpOworICAgIHBTeW1GdW5jdGlvblRhYmxlQWNjZXNzPShQVk9JRCAgKFdJTkFQSSAqKSgKKyAgSEFORExFIGhQcm9jZXNzLAorICBEV09SRDY0IEFkZHJCYXNlCispKUdldFByb2NBZGRyZXNzIChobW9kRGJnSGVscCwgRlVOQyhTeW1GdW5jdGlvblRhYmxlQWNjZXNzKSk7CisjZWxzZQorICAgIHBTeW1HZXRNb2R1bGVCYXNlPShEV09SRCAgKFdJTkFQSSAqKSgKKyAgSEFORExFIGhQcm9jZXNzLAorICBEV09SRCBkd0FkZHIKKykpR2V0UHJvY0FkZHJlc3MgKGhtb2REYmdIZWxwLCBGVU5DKFN5bUdldE1vZHVsZUJhc2UpKTsKKyAgICBwU3ltRnVuY3Rpb25UYWJsZUFjY2Vzcz0oUFZPSUQgIChXSU5BUEkgKikoCisgIEhBTkRMRSBoUHJvY2VzcywKKyAgRFdPUkQgQWRkckJhc2UKKykpR2V0UHJvY0FkZHJlc3MgKGhtb2REYmdIZWxwLCBGVU5DKFN5bUZ1bmN0aW9uVGFibGVBY2Nlc3MpKTsKKyNlbmRpZgorICAgIHBTeW1Jbml0aWFsaXplID0gKEJPT0wgIChXSU5BUEkgKikoCisgIEhBTkRMRSBoUHJvY2VzcywKKyAgUFNUUiBVc2VyU2VhcmNoUGF0aCwKKyAgQk9PTCBmSW52YWRlUHJvY2VzcworKSlHZXRQcm9jQWRkcmVzcyAoaG1vZERiZ0hlbHAsIEZVTkMoU3ltSW5pdGlhbGl6ZSkpOworICAgIHBTeW1HZXRTeW1Gcm9tQWRkciA9IChCT09MICAoV0lOQVBJICopKAorICBIQU5ETEUgaFByb2Nlc3MsCisgIERXT1JEIEFkZHJlc3MsCisgIFBEV09SRCBEaXNwbGFjZW1lbnQsCisgIFBJTUFHRUhMUF9TWU1CT0wgU3ltYm9sCispKUdldFByb2NBZGRyZXNzIChobW9kRGJnSGVscCwgRlVOQyhTeW1HZXRTeW1Gcm9tQWRkcikpOworICAgIHBTeW1HZXRNb2R1bGVJbmZvID0gKEJPT0wgIChXSU5BUEkgKikoCisgIEhBTkRMRSBoUHJvY2VzcywKKyAgRFdPUkQgZHdBZGRyLAorICBQSU1BR0VITFBfTU9EVUxFIE1vZHVsZUluZm8KKykpR2V0UHJvY0FkZHJlc3MgKGhtb2REYmdIZWxwLCBGVU5DKFN5bUdldE1vZHVsZUluZm8pKTsKK3BTeW1TZXRPcHRpb25zID0gKERXT1JEICAoV0lOQVBJICopKAorRFdPUkQgU3ltT3B0aW9ucworKSlHZXRQcm9jQWRkcmVzcyAoaG1vZERiZ0hlbHAsIEZVTkMoU3ltU2V0T3B0aW9ucykpOwogCi0gIFN1c3BlbmRUaHJlYWQgKGhUaHJlYWQpOwogCi0gIGlmICghR2V0VGhyZWFkQ29udGV4dCAoaFRocmVhZCwgJmNvbnRleHQpKQorICAgIHBTeW1TZXRPcHRpb25zKFNZTU9QVF9VTkROQU1FKTsKKworICAgIHBTeW1Jbml0aWFsaXplKEdldEN1cnJlbnRQcm9jZXNzKCksIE5VTEwsIFRSVUUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfYmFja3RyYWNlX2Zvcl90aHJlYWQoSEFORExFIGhUaHJlYWQpCit7CisgICAgU1RBQ0tGUkFNRSBzZjsKKyAgICBDT05URVhUIGNvbnRleHQ7CisgICAgRFdPUkQgZHdJbWFnZVR5cGU7CisKKyAgICBpZiAoIXBTdGFja1dhbGspCisgICAgICAgIGlmICghaW5pdF9iYWNrdHJhY2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgIC8qIGNhbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBjdXJyZW50IHRocmVhZCBhcyBHZXRUaHJlYWRDb250ZXh0CisgICAgICogZG9lc24ndCBzdXBwb3J0IGdldHRpbmcgY29udGV4dCBmcm9tIGN1cnJlbnQgdGhyZWFkICovCisgICAgaWYgKGhUaHJlYWQgPT0gR2V0Q3VycmVudFRocmVhZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBEUFJJTlRGKCJCYWNrdHJhY2U6XG4iKTsKKworICAgIF9EQlVTX1pFUk8oY29udGV4dCk7CisgICAgY29udGV4dC5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEw7CisKKyAgICBTdXNwZW5kVGhyZWFkKGhUaHJlYWQpOworCisgICAgaWYgKCFHZXRUaHJlYWRDb250ZXh0KGhUaHJlYWQsICZjb250ZXh0KSkKICAgICB7Ci0gICAgICBEUFJJTlRGICgiQ291bGRuJ3QgZ2V0IHRocmVhZCBjb250ZXh0IChlcnJvciAlbGQpXG4iLCBHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgUmVzdW1lVGhyZWFkIChoVGhyZWFkKTsKLSAgICAgIHJldHVybjsKKyAgICAgICAgRFBSSU5URigiQ291bGRuJ3QgZ2V0IHRocmVhZCBjb250ZXh0IChlcnJvciAlbGQpXG4iLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIFJlc3VtZVRocmVhZChoVGhyZWFkKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICBfREJVU19aRVJPIChzZik7CisgICAgX0RCVVNfWkVSTyhzZik7CiAKICNpZmRlZiBfX2kzODZfXwotICBkd0ltYWdlVHlwZSAgICAgICAgID0gSU1BR0VfRklMRV9NQUNISU5FX0kzODY7Ci0gIHNmLkFkZHJGcmFtZS5PZmZzZXQgPSBjb250ZXh0LkVicDsKLSAgc2YuQWRkckZyYW1lLk1vZGUgICA9IEFkZHJNb2RlRmxhdDsKLSAgc2YuQWRkclBDLk9mZnNldCAgICA9IGNvbnRleHQuRWlwOwotICBzZi5BZGRyUEMuTW9kZSAgICAgID0gQWRkck1vZGVGbGF0OwotI2VsaWYgZGVmaW5lZChfTV9YNjQpCi0gIGR3SW1hZ2VUeXBlICAgICAgICAgPSBJTUFHRV9GSUxFX01BQ0hJTkVfQU1ENjQ7CisgICAgc2YuQWRkckZyYW1lLk9mZnNldCA9IGNvbnRleHQuRWJwOworICAgIHNmLkFkZHJGcmFtZS5Nb2RlID0gQWRkck1vZGVGbGF0OworICAgIHNmLkFkZHJQQy5PZmZzZXQgPSBjb250ZXh0LkVpcDsKKyAgICBzZi5BZGRyUEMuTW9kZSA9IEFkZHJNb2RlRmxhdDsKKyAgICBkd0ltYWdlVHlwZSA9IElNQUdFX0ZJTEVfTUFDSElORV9JMzg2OworI2VsaWYgX01fWDY0CisgIGR3SW1hZ2VUeXBlICAgICAgICAgICAgICAgID0gSU1BR0VfRklMRV9NQUNISU5FX0FNRDY0OwogICBzZi5BZGRyUEMuT2Zmc2V0ICAgID0gY29udGV4dC5SaXA7CiAgIHNmLkFkZHJQQy5Nb2RlICAgICAgPSBBZGRyTW9kZUZsYXQ7CiAgIHNmLkFkZHJGcmFtZS5PZmZzZXQgPSBjb250ZXh0LlJzcDsKICAgc2YuQWRkckZyYW1lLk1vZGUgICA9IEFkZHJNb2RlRmxhdDsKICAgc2YuQWRkclN0YWNrLk9mZnNldCA9IGNvbnRleHQuUnNwOwogICBzZi5BZGRyU3RhY2suTW9kZSAgID0gQWRkck1vZGVGbGF0OwotI2VsaWYgZGVmaW5lZChfTV9JQTY0KQotICBkd0ltYWdlVHlwZSAgICAgICAgID0gSU1BR0VfRklMRV9NQUNISU5FX0lBNjQ7CisjZWxpZiBfTV9JQTY0CisgIGR3SW1hZ2VUeXBlICAgICAgICAgICAgICAgICA9IElNQUdFX0ZJTEVfTUFDSElORV9JQTY0OwogICBzZi5BZGRyUEMuT2Zmc2V0ICAgID0gY29udGV4dC5TdElJUDsKICAgc2YuQWRkclBDLk1vZGUgICAgICA9IEFkZHJNb2RlRmxhdDsKICAgc2YuQWRkckZyYW1lLk9mZnNldCA9IGNvbnRleHQuSW50U3A7CkBAIC0yNTE2LDk4ICsyNjE4LDcxIEBACiAjIGVycm9yIFlvdSBuZWVkIHRvIGZpbGwgaW4gdGhlIFNUQUNLRlJBTUUgc3RydWN0dXJlIGZvciB5b3VyIGFyY2hpdGVjdHVyZQogI2VuZGlmCiAKLSAgLyoKLSAgICBiYWNrdHJhY2UgZm9ybWF0Ci0gICAgPGxldmVsPiA8YWRkcmVzcz4gPHN5bWJvbD5bK29mZnNldF0gWyAnWycgPGZpbGU+ICc6JyA8bGluZT4gJ10nIF0gWyAnaW4nIDxtb2R1bGU+IF0KLSAgICBleGFtcGxlOgotICAgICAgNiAweGY3NWFkZTZiIHdpbmVfc3dpdGNoX3RvX3N0YWNrKzB4MmEgWy91c3Ivc3JjL2RlYnVnL3dpbmUtc25hcHNob3QvbGlicy93aW5lL3BvcnQuYzo1OV0gaW4gbGlid2luZS5zby4xCi0gICovCi0gIHdoaWxlIChTdGFja1dhbGsgKGR3SW1hZ2VUeXBlLCBHZXRDdXJyZW50UHJvY2VzcyAoKSwKLSAgICAgICAgICAgICAgICAgICAgaFRocmVhZCwgJnNmLCAmY29udGV4dCwgTlVMTCwgU3ltRnVuY3Rpb25UYWJsZUFjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgU3ltR2V0TW9kdWxlQmFzZSwgTlVMTCkpCisgICAgd2hpbGUgKHBTdGFja1dhbGsoZHdJbWFnZVR5cGUsIEdldEN1cnJlbnRQcm9jZXNzKCksCisgICAgICAgICAgICAgICAgICAgICBoVGhyZWFkLCAmc2YsICZjb250ZXh0LCBOVUxMLCBwU3ltRnVuY3Rpb25UYWJsZUFjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgIHBTeW1HZXRNb2R1bGVCYXNlLCBOVUxMKSkKICAgICB7Ci0gICAgICBjaGFyIGJ1ZmZlcltzaXplb2YoU1lNQk9MX0lORk8pICsgTUFYX1NZTV9OQU1FICogc2l6ZW9mKGNoYXIpXTsKLSAgICAgIFBTWU1CT0xfSU5GTyBwU3ltYm9sID0gKFBTWU1CT0xfSU5GTylidWZmZXI7Ci0gICAgICBEV09SRDY0IGRpc3BsYWNlbWVudDsKLSAgICAgIElNQUdFSExQX0xJTkUgbGluZTsKLSAgICAgIERXT1JEIGR3RGlzcGxhY2VtZW50OwotICAgICAgSU1BR0VITFBfTU9EVUxFIG1vZHVsZUluZm87CisgICAgICAgIEJZVEUgYnVmZmVyWzI1Nl07CisgICAgICAgIElNQUdFSExQX1NZTUJPTCAqIHBTeW1ib2wgPSAoSU1BR0VITFBfU1lNQk9MICopYnVmZmVyOworICAgICAgICBEV09SRCBkd0Rpc3BsYWNlbWVudDsKIAotICAgICAgLyoKLSAgICAgICAgIG9uIFdpbmU2NCB2ZXJzaW9uIDEuNy41NCwgd2UgZ2V0IGFuIGluZmluaXRlIG51bWJlciBvZiBzdGFjayBlbnRyaWVzCi0gICAgICAgICBwb2ludGluZyB0byB0aGUgc2FtZSBzdGFjayBmcmFtZSAgKF9zdGFydCsweDI5IGluIDx3aW5lLWxvYWRlcj4pCi0gICAgICAgICBzZWUgYnVnIGh0dHBzOi8vYnVncy53aW5laHEub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTYwNgotICAgICAgKi8KLSNpZm5kZWYgX19pMzg2X18KLSAgICAgIGlmIChvbGRfYWRkcmVzcy5PZmZzZXQgPT0gc2YuQWRkclBDLk9mZnNldCkKKyAgICAgICAgcFN5bWJvbC0+U2l6ZU9mU3RydWN0ID0gc2l6ZW9mKElNQUdFSExQX1NZTUJPTCk7CisgICAgICAgIHBTeW1ib2wtPk1heE5hbWVMZW5ndGggPSBzaXplb2YoYnVmZmVyKSAtIHNpemVvZihJTUFHRUhMUF9TWU1CT0wpICsgMTsKKworICAgICAgICBpZiAoIXBTeW1HZXRTeW1Gcm9tQWRkcihHZXRDdXJyZW50UHJvY2VzcygpLCBzZi5BZGRyUEMuT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHdEaXNwbGFjZW1lbnQsIHBTeW1ib2wpKQogICAgICAgICB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgSU1BR0VITFBfTU9EVUxFIE1vZHVsZUluZm87CisgICAgICAgICAgICBNb2R1bGVJbmZvLlNpemVPZlN0cnVjdCA9IHNpemVvZihNb2R1bGVJbmZvKTsKIAotICAgICAgcFN5bWJvbC0+U2l6ZU9mU3RydWN0ID0gc2l6ZW9mKFNZTUJPTF9JTkZPKTsKLSAgICAgIHBTeW1ib2wtPk1heE5hbWVMZW4gPSBNQVhfU1lNX05BTUU7Ci0KLSAgICAgIGlmIChTeW1Gcm9tQWRkciAoR2V0Q3VycmVudFByb2Nlc3MgKCksIHNmLkFkZHJQQy5PZmZzZXQsICZkaXNwbGFjZW1lbnQsIHBTeW1ib2wpKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGRpc3BsYWNlbWVudCkKLSAgICAgICAgICAgIERQUklOVEYgKCIlM2QgJXMrMHglSTY0eCIsIGkrKywgcFN5bWJvbC0+TmFtZSwgZGlzcGxhY2VtZW50KTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBEUFJJTlRGICgiJTNkICVzIiwgaSsrLCBwU3ltYm9sLT5OYW1lKTsKKyAgICAgICAgICAgIGlmICghcFN5bUdldE1vZHVsZUluZm8oR2V0Q3VycmVudFByb2Nlc3MoKSwgc2YuQWRkclBDLk9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1vZHVsZUluZm8pKQorICAgICAgICAgICAgICAgIERQUklOVEYoIjFcdCVwXG4iLCAodm9pZCopc2YuQWRkclBDLk9mZnNldCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRFBSSU5URigiMlx0JXMrMHglbHhcbiIsIE1vZHVsZUluZm8uSW1hZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICBzZi5BZGRyUEMuT2Zmc2V0IC0gTW9kdWxlSW5mby5CYXNlT2ZJbWFnZSk7CiAgICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgRFBSSU5URiAoIiUzZCAweCVJeCIsIGkrKywgc2YuQWRkclBDLk9mZnNldCk7Ci0KLSAgICAgIGxpbmUuU2l6ZU9mU3RydWN0ID0gc2l6ZW9mKElNQUdFSExQX0xJTkUpOwotICAgICAgaWYgKFN5bUdldExpbmVGcm9tQWRkciAoR2V0Q3VycmVudFByb2Nlc3MgKCksIHNmLkFkZHJQQy5PZmZzZXQsICZkd0Rpc3BsYWNlbWVudCwgJmxpbmUpKQotICAgICAgICB7Ci0gICAgICAgICAgRFBSSU5URiAoIiBbJXM6JWxkXSIsIGxpbmUuRmlsZU5hbWUsIGxpbmUuTGluZU51bWJlcik7Ci0gICAgICAgIH0KLQotICAgICAgbW9kdWxlSW5mby5TaXplT2ZTdHJ1Y3QgPSBzaXplb2YobW9kdWxlSW5mbyk7Ci0gICAgICBpZiAoU3ltR2V0TW9kdWxlSW5mbyAoR2V0Q3VycmVudFByb2Nlc3MgKCksIHNmLkFkZHJQQy5PZmZzZXQsICZtb2R1bGVJbmZvKSkKLSAgICAgICAgewotICAgICAgICAgIERQUklOVEYgKCIgaW4gJXMiLCBtb2R1bGVJbmZvLk1vZHVsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICBEUFJJTlRGICgiXG4iKTsKLSAgICAgIG9sZF9hZGRyZXNzID0gc2YuQWRkclBDOworICAgICAgICBlbHNlIGlmIChkd0Rpc3BsYWNlbWVudCkKKyAgICAgICAgICAgIERQUklOVEYoIjNcdCVzKzB4JWx4XG4iLCBwU3ltYm9sLT5OYW1lLCBkd0Rpc3BsYWNlbWVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERQUklOVEYoIjRcdCVzXG4iLCBwU3ltYm9sLT5OYW1lKTsKICAgICB9Ci0gIFJlc3VtZVRocmVhZCAoaFRocmVhZCk7CisKKyAgICBSZXN1bWVUaHJlYWQoaFRocmVhZCk7CiB9CiAKLXN0YXRpYyBEV09SRCBXSU5BUEkgZHVtcF90aHJlYWRfcHJvYyAoTFBWT0lEIGxwUGFyYW1ldGVyKQorc3RhdGljIERXT1JEIFdJTkFQSSBkdW1wX3RocmVhZF9wcm9jKExQVk9JRCBscFBhcmFtZXRlcikKIHsKLSAgZHVtcF9iYWNrdHJhY2VfZm9yX3RocmVhZCAoKEhBTkRMRSkgbHBQYXJhbWV0ZXIpOwotICByZXR1cm4gMDsKKyAgICBkdW1wX2JhY2t0cmFjZV9mb3JfdGhyZWFkKChIQU5ETEUpbHBQYXJhbWV0ZXIpOworICAgIHJldHVybiAwOwogfQogCiAvKiBjYW5ub3QgZ2V0IHZhbGlkIGNvbnRleHQgZnJvbSBjdXJyZW50IHRocmVhZCwgc28gd2UgaGF2ZSB0byBleGVjdXRlCiAgKiBiYWNrdHJhY2UgZnJvbSBhbm90aGVyIHRocmVhZCAqLwotc3RhdGljIHZvaWQKLWR1bXBfYmFja3RyYWNlICh2b2lkKQorc3RhdGljIHZvaWQgZHVtcF9iYWNrdHJhY2UoKQogewotICBIQU5ETEUgaEN1cnJlbnRUaHJlYWQ7Ci0gIEhBTkRMRSBoVGhyZWFkOwotICBEV09SRCBkd1RocmVhZElkOwotICBEdXBsaWNhdGVIYW5kbGUgKEdldEN1cnJlbnRQcm9jZXNzICgpLCBHZXRDdXJyZW50VGhyZWFkICgpLAotICAgICAgICAgICAgICAgICAgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAmaEN1cnJlbnRUaHJlYWQsCi0gICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VTUyk7Ci0gIGhUaHJlYWQgPSBDcmVhdGVUaHJlYWQgKE5VTEwsIDAsIGR1bXBfdGhyZWFkX3Byb2MsIChMUFZPSUQpaEN1cnJlbnRUaHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZkd1RocmVhZElkKTsKLSAgV2FpdEZvclNpbmdsZU9iamVjdCAoaFRocmVhZCwgSU5GSU5JVEUpOwotICBDbG9zZUhhbmRsZSAoaFRocmVhZCk7Ci0gIENsb3NlSGFuZGxlIChoQ3VycmVudFRocmVhZCk7CisgICAgSEFORExFIGhDdXJyZW50VGhyZWFkOworICAgIEhBTkRMRSBoVGhyZWFkOworICAgIERXT1JEIGR3VGhyZWFkSWQ7CisgICAgRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwKKyAgICAgICAgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhDdXJyZW50VGhyZWFkLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKKyAgICBoVGhyZWFkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsIGR1bXBfdGhyZWFkX3Byb2MsIChMUFZPSUQpaEN1cnJlbnRUaHJlYWQsCisgICAgICAgIDAsICZkd1RocmVhZElkKTsKKyAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhUaHJlYWQsIElORklOSVRFKTsKKyAgICBDbG9zZUhhbmRsZShoVGhyZWFkKTsKKyAgICBDbG9zZUhhbmRsZShoQ3VycmVudFRocmVhZCk7CiB9CiAjZW5kaWYKICNlbmRpZiAvKiBhc3NlcnRzIG9yIHRlc3RzIGVuYWJsZWQgKi8KIAogI2lmZGVmIEJBQ0tUUkFDRVMKLXZvaWQgX2RidXNfcHJpbnRfYmFja3RyYWNlICh2b2lkKQordm9pZCBfZGJ1c19wcmludF9iYWNrdHJhY2Uodm9pZCkKIHsKLSAgZHVtcF9iYWNrdHJhY2UgKCk7CisgIGluaXRfYmFja3RyYWNlKCk7CisgIGR1bXBfYmFja3RyYWNlKCk7CiB9CiAjZWxzZQotdm9pZCBfZGJ1c19wcmludF9iYWNrdHJhY2UgKHZvaWQpCit2b2lkIF9kYnVzX3ByaW50X2JhY2t0cmFjZSh2b2lkKQogewogICBfZGJ1c192ZXJib3NlICgiICBELUJ1cyBub3QgY29tcGlsZWQgd2l0aCBiYWNrdHJhY2Ugc3VwcG9ydFxuIik7CiB9CkBAIC0yNzE3LDkgKzI3OTIsOSBAQAogICAgICAgIGNhc2UgV0FJVF9GQUlMRUQ6CiAgICAgICAgY2FzZSBXQUlUX1RJTUVPVVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgcmV0dXJuIG11dGV4OwogICAgICB9CisKKyAgIHJldHVybiBtdXRleDsKIH0KIAogc3RhdGljCkBAIC0yNzQ2LDEyICsyODIxLDE1IEBACiB7CiAgICAgREJ1c1N0cmluZyBpbnN0YWxsX3BhdGg7CiAKLSAgICBfZGJ1c19zdHJpbmdfaW5pdCgmaW5zdGFsbF9wYXRoKTsKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEgqMl07CisgICAgaW50IHBhdGhfc2l6ZSA9IHNpemVvZihwYXRoKTsKIAotICAgIGlmICghX2RidXNfZ2V0X2luc3RhbGxfcm9vdCAoJmluc3RhbGxfcGF0aCkgfHwKLSAgICAgICAgX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKCZpbnN0YWxsX3BhdGgpID09IDApCisgICAgaWYgKCFfZGJ1c19nZXRfaW5zdGFsbF9yb290KHBhdGgscGF0aF9zaXplKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCisgICAgX2RidXNfc3RyaW5nX2luaXQoJmluc3RhbGxfcGF0aCk7CisgICAgX2RidXNfc3RyaW5nX2FwcGVuZCgmaW5zdGFsbF9wYXRoLHBhdGgpOworCiAgICAgX2RidXNfc3RyaW5nX2luaXQob3V0KTsKICAgICBfZGJ1c19zdHJpbmdfdG9sb3dlcl9hc2NpaSgmaW5zdGFsbF9wYXRoLDAsX2RidXNfc3RyaW5nX2dldF9sZW5ndGgoJmluc3RhbGxfcGF0aCkpOwogCkBAIC0zMjIxLDg3ICszMjk5LDQ1IEBACiB9CiAKIC8qKgotICogRmlsbCBzdHIgd2l0aCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgRC1CdXMgaW5zdGFsbGF0aW9uLCBvciB0cnVuY2F0ZSBzdHIKLSAqIHRvIHplcm8gbGVuZ3RoIGlmIHdlIGNhbm5vdCBkZXRlcm1pbmUgaXQuCisgKiByZXR1cm4gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRidXMgaW5zdGFsbGF0aW9uIAogICoKLSAqIEBwYXJhbSBzdHIgYnVmZmVyIGZvciBpbnN0YWxsYXRpb24gcGF0aAotICogQHJldHVybnMgI0ZBTFNFIG9uIE9PTSwgI1RSVUUgaWYgbm90IE9PTQorICogQHBhcmFtIHByZWZpeCBidWZmZXIgZm9yIGluc3RhbGxhdGlvbiBwYXRoCisgKiBAcGFyYW0gbGVuIGxlbmd0aCBvZiBidWZmZXIKKyAqIEByZXR1cm5zICNGQUxTRSBvbiBmYWlsdXJlCiAgKi8KIGRidXNfYm9vbF90Ci1fZGJ1c19nZXRfaW5zdGFsbF9yb290IChEQnVzU3RyaW5nICpzdHIpCitfZGJ1c19nZXRfaW5zdGFsbF9yb290KGNoYXIgKnByZWZpeCwgaW50IGxlbikKIHsKLSAgICAvKiB0aGlzIGlzIGp1c3QgYW4gaW5pdGlhbCBndWVzcyAqLwotICAgIERXT1JEIHBhdGhMZW5ndGggPSBNQVhfUEFUSDsKLSAgICB1bnNpZ25lZCBjaGFyICpsYXN0U2xhc2g7Ci0gICAgdW5zaWduZWQgY2hhciAqcHJlZml4OwotCi0gICAgZG8KLSAgICAgIHsKLSAgICAgICAgLyogYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBvdXIgYmVzdCBndWVzcyBhdCB0aGUgbGVuZ3RoICovCi0gICAgICAgIGlmICghX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKHN0ciwgcGF0aExlbmd0aCkpCi0gICAgICAgICAgewotICAgICAgICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKHN0ciwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgfQotCi0gICAgICAgIFNldExhc3RFcnJvciAoMCk7Ci0gICAgICAgIHBhdGhMZW5ndGggPSBHZXRNb2R1bGVGaWxlTmFtZUEgKF9kYnVzX3dpbl9nZXRfZGxsX2htb2R1bGUgKCksCi0gICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2RhdGEgKHN0ciksIF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChzdHIpKTsKLQotICAgICAgICBpZiAocGF0aExlbmd0aCA9PSAwIHx8IEdldExhc3RFcnJvciAoKSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIGZhaWxlZCwgYnV0IG5vdCBPT00gKi8KLSAgICAgICAgICAgIF9kYnVzX3N0cmluZ19zZXRfbGVuZ3RoIChzdHIsIDApOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgICAgfQotCi0gICAgICAgIC8qIGlmIHRoZSByZXR1cm4gaXMgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBidWZmZXIgc2l6ZSwgaXQgaGFzCi0gICAgICAgICAqIG5vdCBiZWVuIHRydW5jYXRlZCwgc28gd2UgY2FuIGNvbnRpbnVlICovCi0gICAgICAgIGlmIChwYXRoTGVuZ3RoIDwgKERXT1JEKSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoc3RyKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiByZWR1Y2UgdGhlIGxlbmd0aCB0byBtYXRjaCB3aGF0IFdpbmRvd3MgZmlsbGVkIGluICovCi0gICAgICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19zZXRfbGVuZ3RoIChzdHIsIHBhdGhMZW5ndGgpKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKHN0ciwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAvKiBlbHNlIGl0IG1heSBoYXZlIGJlZW4gdHJ1bmNhdGVkOyB0cnkgd2l0aCBhIGxhcmdlciBidWZmZXIgKi8KLSAgICAgICAgcGF0aExlbmd0aCAqPSAyOwotICAgICAgfQotICAgIHdoaWxlIChUUlVFKTsKLQotICAgIC8qIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gd29ya3MgYnkgZGlyZWN0IGJ5dGUgbWFuaXB1bGF0aW9uIG9mIHRoZQotICAgICAqIHVuZGVybHlpbmcgYnVmZmVyICovCi0gICAgcHJlZml4ID0gX2RidXNfc3RyaW5nX2dldF91ZGF0YSAoc3RyKTsKLQotICAgIGxhc3RTbGFzaCA9IF9tYnNyY2hyIChwcmVmaXgsICdcXCcpOworICAgIC8vVG8gZmluZCB0aGUgcHJlZml4LCB3ZSBjdXQgdGhlIGZpbGVuYW1lIGFuZCBhbHNvIFxiaW5cIGlmIHByZXNlbnQKKyAgICBEV09SRCBwYXRoTGVuZ3RoOworICAgIGNoYXIgKmxhc3RTbGFzaDsKKyAgICBTZXRMYXN0RXJyb3IoIDAgKTsKKyAgICBwYXRoTGVuZ3RoID0gR2V0TW9kdWxlRmlsZU5hbWVBKF9kYnVzX3dpbl9nZXRfZGxsX2htb2R1bGUoKSwgcHJlZml4LCBsZW4pOworICAgIGlmICggcGF0aExlbmd0aCA9PSAwIHx8IEdldExhc3RFcnJvcigpICE9IDAgKSB7CisgICAgICAgICpwcmVmaXggPSAnXDAnOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGxhc3RTbGFzaCA9IF9tYnNyY2hyKHByZWZpeCwgJ1xcJyk7CiAgICAgaWYgKGxhc3RTbGFzaCA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIGZhaWxlZCwgYnV0IG5vdCBPT00gKi8KLSAgICAgICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKHN0ciwgMCk7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAqcHJlZml4ID0gJ1wwJzsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICAvL2N1dCBvZmYgYmluYXJ5IG5hbWUKICAgICBsYXN0U2xhc2hbMV0gPSAwOwogCiAgICAgLy9jdXQgcG9zc2libGUgIlxcYmluIgorCiAgICAgLy90aGlzIGZhaWxzIGlmIHdlIGFyZSBpbiBhIGRvdWJsZS1ieXRlIHN5c3RlbSBjb2RlcGFnZSBhbmQgdGhlCiAgICAgLy9mb2xkZXIncyBuYW1lIGhhcHBlbnMgdG8gZW5kIHdpdGggdGhlICpieXRlcyoKICAgICAvLyJcXGJpbiIuLi4gKEkuZS4gdGhlIHNlY29uZCBieXRlIG9mIHNvbWUgSGFuIGNoYXJhY3RlciBhbmQgdGhlbgogICAgIC8vdGhlIExhdGluICJiaW4iLCBidXQgdGhhdCBpcyBub3QgbGlrZWx5IEkgdGhpbmsuLi4KLSAgICBpZiAobGFzdFNsYXNoIC0gcHJlZml4ID49IDQgJiYgX21ic25pY21wIChsYXN0U2xhc2ggLSA0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSJcXGJpbiIsIDQpID09IDApCisgICAgaWYgKGxhc3RTbGFzaCAtIHByZWZpeCA+PSA0ICYmIHN0cm5pY21wKGxhc3RTbGFzaCAtIDQsICJcXGJpbiIsIDQpID09IDApCiAgICAgICAgIGxhc3RTbGFzaFstM10gPSAwOwotICAgIGVsc2UgaWYgKGxhc3RTbGFzaCAtIHByZWZpeCA+PSAxMCAmJiBfbWJzbmljbXAgKGxhc3RTbGFzaCAtIDEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSJcXGJpblxcZGVidWciLCAxMCkgPT0gMCkKKyAgICBlbHNlIGlmIChsYXN0U2xhc2ggLSBwcmVmaXggPj0gMTAgJiYgc3RybmljbXAobGFzdFNsYXNoIC0gMTAsICJcXGJpblxcZGVidWciLCAxMCkgPT0gMCkKICAgICAgICAgbGFzdFNsYXNoWy05XSA9IDA7Ci0gICAgZWxzZSBpZiAobGFzdFNsYXNoIC0gcHJlZml4ID49IDEyICYmIF9tYnNuaWNtcCAobGFzdFNsYXNoIC0gMTIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIlxcYmluXFxyZWxlYXNlIiwgMTIpID09IDApCisgICAgZWxzZSBpZiAobGFzdFNsYXNoIC0gcHJlZml4ID49IDEyICYmIHN0cm5pY21wKGxhc3RTbGFzaCAtIDEyLCAiXFxiaW5cXHJlbGVhc2UiLCAxMikgPT0gMCkKICAgICAgICAgbGFzdFNsYXNoWy0xMV0gPSAwOwogCi0gICAgLyogZml4IHVwIHRoZSBsZW5ndGggdG8gbWF0Y2ggdGhlIGJ5dGUtbWFuaXB1bGF0aW9uICovCi0gICAgX2RidXNfc3RyaW5nX3NldF9sZW5ndGggKHN0ciwgc3RybGVuICgoY2hhciAqKSBwcmVmaXgpKTsKLQogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0zMzc3LDcgKzM0MTMsNyBAQAogICAgICAgICBzdGF0aWMgZGJ1c19ib29sX3QgYWxyZWFkeV93YXJuZWQgPSBGQUxTRTsKICAgICAgICAgaWYgKCFhbHJlYWR5X3dhcm5lZCkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBfZGJ1c193YXJuICgiVXNpbmcgeW91ciByZWFsIGhvbWUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nLCBzZXQgREJVU19URVNUX0hPTUVESVIgdG8gYXZvaWQiKTsKKyAgICAgICAgICAgIF9kYnVzX3dhcm4gKCJVc2luZyB5b3VyIHJlYWwgaG9tZSBkaXJlY3RvcnkgZm9yIHRlc3RpbmcsIHNldCBEQlVTX1RFU1RfSE9NRURJUiB0byBhdm9pZFxuIik7CiAgICAgICAgICAgICBhbHJlYWR5X3dhcm5lZCA9IFRSVUU7CiAgICAgICAgICAgfQogICAgICAgfQpAQCAtMzU1NCwxNSArMzU5MCwxMiBAQAogCiAgICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKICAgICAgIHJldHVybiAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgbXNnID0gc3RyZXJyb3IgKGVycm9yX251bWJlcik7Ci0KLSAgICAgIGlmIChtc2cgPT0gTlVMTCkKLSAgICAgICAgbXNnID0gInVua25vd24iOwotCi0gICAgICByZXR1cm4gbXNnOwogICAgIH0KKyAgbXNnID0gc3RyZXJyb3IgKGVycm9yX251bWJlcik7CisgIGlmIChtc2cgPT0gTlVMTCkKKyAgICBtc2cgPSAidW5rbm93biI7CisKKyAgcmV0dXJuIG1zZzsKICNlbmRpZiAvL0RCVVNfV0lOQ0UKIH0KIApAQCAtMzYwMiw3ICszNjM1LDcgQEAKIAogICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CiAgIF9kYnVzX3dpbl9zZXRfZXJyb3JfZnJvbV93aW5fZXJyb3IgKCZlcnJvciwgY29kZSk7Ci0gIF9kYnVzX3dhcm4gKCIlczogJXMiLCBtZXNzYWdlLCBlcnJvci5tZXNzYWdlKTsKKyAgX2RidXNfd2FybiAoIiVzOiAlc1xuIiwgbWVzc2FnZSwgZXJyb3IubWVzc2FnZSk7CiAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKIH0KIApAQCAtMzY3MSw3NiArMzcwNCw2IEBACiAgIF9kYnVzX3dpbl9zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmxvZ190YWcgPSAiZGJ1cyI7Ci1zdGF0aWMgREJ1c0xvZ0ZsYWdzIGxvZ19mbGFncyA9IERCVVNfTE9HX0ZMQUdTX1NUREVSUjsKLQotLyoqCi0gKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gbG9nLgotICoKLSAqIFRoZSAidGFnIiBpcyBub3QgY29waWVkLCBhbmQgbXVzdCByZW1haW4gdmFsaWQgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YKLSAqIHRoZSBwcm9jZXNzIG9yIHVudGlsIF9kYnVzX2luaXRfc3lzdGVtX2xvZygpIGlzIGNhbGxlZCBhZ2Fpbi4gSW4gcHJhY3RpY2UKLSAqIGl0IHdpbGwgbm9ybWFsbHkgYmUgYSBjb25zdGFudC4KLSAqCi0gKiBAcGFyYW0gdGFnIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIChzeXNsb2cgdGFnKQotICogQHBhcmFtIG1vZGUgd2hldGhlciB0byBsb2cgdG8gc3RkZXJyLCB0aGUgc3lzdGVtIGxvZyBvciBib3RoCi0gKi8KLXZvaWQKLV9kYnVzX2luaXRfc3lzdGVtX2xvZyAoY29uc3QgY2hhciAgICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgIERCdXNMb2dGbGFncyAgZmxhZ3MpCi17Ci0gIC8qIFdlIG5ldmVyIHdhbnQgdG8gdHVybiBvZmYgbG9nZ2luZyBjb21wbGV0ZWx5ICovCi0gIF9kYnVzX2Fzc2VydCAoCi0gICAgICAoZmxhZ3MgJiAoREJVU19MT0dfRkxBR1NfU1RERVJSIHwgREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRykpICE9IDApOwotCi0gIGxvZ190YWcgPSB0YWc7Ci0gIGxvZ19mbGFncyA9IGZsYWdzOwotfQotCi0vKioKLSAqIExvZyBhIG1lc3NhZ2UgdG8gdGhlIHN5c3RlbSBsb2cgZmlsZSAoZS5nLiBzeXNsb2cgb24gVW5peCkuCi0gKgotICogQHBhcmFtIHNldmVyaXR5IGEgc2V2ZXJpdHkgdmFsdWUKLSAqIEBwYXJhbSBtc2cgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZwotICogQHBhcmFtIGFyZ3MgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZwotICovCi12b2lkCi1fZGJ1c19sb2d2IChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgIHNldmVyaXR5LAotICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICptc2csCi0gICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICAgIGFyZ3MpCi17Ci0gIGNvbnN0IGNoYXIgKnMgPSAiIjsKLSAgdmFfbGlzdCB0bXA7Ci0KLSAgc3dpdGNoKHNldmVyaXR5KQotICAgewotICAgICBjYXNlIERCVVNfU1lTVEVNX0xPR19JTkZPOiBzID0gImluZm8iOyBicmVhazsKLSAgICAgY2FzZSBEQlVTX1NZU1RFTV9MT0dfV0FSTklORzogcyA9ICJ3YXJuaW5nIjsgYnJlYWs7Ci0gICAgIGNhc2UgREJVU19TWVNURU1fTE9HX1NFQ1VSSVRZOiBzID0gInNlY3VyaXR5IjsgYnJlYWs7Ci0gICAgIGNhc2UgREJVU19TWVNURU1fTE9HX0VSUk9SOiBzID0gImVycm9yIjsgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6IF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQgbG9nIHNldmVyaXR5Iik7Ci0gICB9Ci0KLSAgaWYgKGxvZ19mbGFncyAmIERCVVNfTE9HX0ZMQUdTX1NZU1RFTV9MT0cpCi0gICAgewotICAgICAgY2hhciBidWZbMTAyNF07Ci0gICAgICBjaGFyIGZvcm1hdFsxMDI0XTsKLQotICAgICAgREJVU19WQV9DT1BZICh0bXAsIGFyZ3MpOwotICAgICAgc25wcmludGYgKGZvcm1hdCwgc2l6ZW9mIChmb3JtYXQpLCAiJXM6ICVzIiwgcywgbXNnKTsKLSAgICAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHRtcCk7Ci0gICAgICBPdXRwdXREZWJ1Z1N0cmluZ0EoYnVmKTsKLSAgICAgIHZhX2VuZCAodG1wKTsKLSAgICB9Ci0KLSAgaWYgKGxvZ19mbGFncyAmIERCVVNfTE9HX0ZMQUdTX1NUREVSUikKLSAgICB7Ci0gICAgICBEQlVTX1ZBX0NPUFkgKHRtcCwgYXJncyk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIlc1slbHVdOiAlczogIiwgbG9nX3RhZywgX2RidXNfcGlkX2Zvcl9sb2cgKCksIHMpOwotICAgICAgdmZwcmludGYgKHN0ZGVyciwgbXNnLCB0bXApOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICAgIHZhX2VuZCAodG1wKTsKLSAgICB9Ci19Ci0KIC8qKiBAfSBlbmQgb2Ygc3lzZGVwcy13aW4gKi8KIC8qIHRlc3RzIGluIGRidXMtc3lzZGVwcy11dGlsLmMgKi8KKwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXN5c2RlcHMtd2luLmggYi9kYnVzL2RidXMtc3lzZGVwcy13aW4uaAppbmRleCBiODg2MWExLi5lOWIzMGQ3IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtc3lzZGVwcy13aW4uaAorKysgYi9kYnVzL2RidXMtc3lzZGVwcy13aW4uaApAQCAtODIsOCArODIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICAqKndkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICplcnJvcik7CiAKK2RidXNfYm9vbF90IF9kYnVzX2ZpbGVfZXhpc3RzIChjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKIERCVVNfUFJJVkFURV9FWFBPUlQKLWRidXNfYm9vbF90IF9kYnVzX2dldF9pbnN0YWxsX3Jvb3QgKERCdXNTdHJpbmcgKnN0cik7CitkYnVzX2Jvb2xfdCBfZGJ1c19nZXRfaW5zdGFsbF9yb290KGNoYXIgKnByZWZpeCwgaW50IGxlbik7CiAKIHZvaWQgICAgICAgIF9kYnVzX3RocmVhZHNfd2luZG93c19pbml0X2dsb2JhbCAodm9pZCk7CiB2b2lkICAgICAgICBfZGJ1c190aHJlYWRzX3dpbmRvd3NfZW5zdXJlX2N0b3JfbGlua2VkICh2b2lkKTsKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zeXNkZXBzLmMgYi9kYnVzL2RidXMtc3lzZGVwcy5jCmluZGV4IDIwYmI4OTQuLjhiOTg2ZDUgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zeXNkZXBzLmMKKysrIGIvZGJ1cy9kYnVzLXN5c2RlcHMuYwpAQCAtNTIsOCArNTIsNiBAQAogI2VsaWYgKGRlZmluZWQgX19BUFBMRV9fKQogIyBpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgogIyBkZWZpbmUgZW52aXJvbiAoKl9OU0dldEVudmlyb24oKSkKLSNlbGlmIEhBVkVfREVDTF9FTlZJUk9OICYmIGRlZmluZWQoSEFWRV9VTklTVERfSCkKLSMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZWxzZQogZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwogI2VuZGlmCkBAIC02NzAsOSArNjY4LDkgQEAKICAgICBjYXNlIEVOT0VOVDoKICAgICAgIHJldHVybiBEQlVTX0VSUk9SX0ZJTEVfTk9UX0ZPVU5EOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBEQlVTX0VSUk9SX0ZBSUxFRDsKICAgICB9CisKKyAgcmV0dXJuIERCVVNfRVJST1JfRkFJTEVEOwogfQogCiAvKioKQEAgLTc1MywyNiArNzUxLDYgQEAKICAgcmV0dXJuIF9kYnVzX3N0cmVycm9yIChlcnJubyk7CiB9CiAKLS8qKgotICogTG9nIGEgbWVzc2FnZSB0byB0aGUgc3lzdGVtIGxvZyBmaWxlIChlLmcuIHN5c2xvZyBvbiBVbml4KSBhbmQvb3Igc3RkZXJyLgotICoKLSAqIEBwYXJhbSBzZXZlcml0eSBhIHNldmVyaXR5IHZhbHVlCi0gKiBAcGFyYW0gbXNnIGEgcHJpbnRmLXN0eWxlIGZvcm1hdCBzdHJpbmcKLSAqLwotdm9pZAotX2RidXNfbG9nIChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgIHNldmVyaXR5LAotICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgKm1zZywKLSAgICAgICAgICAgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIG1zZyk7Ci0KLSAgX2RidXNfbG9ndiAoc2V2ZXJpdHksIG1zZywgYXJncyk7Ci0KLSAgdmFfZW5kIChhcmdzKTsKLX0KLQogLyoqIEB9IGVuZCBvZiBzeXNkZXBzICovCiAKIC8qIHRlc3RzIGluIGRidXMtc3lzZGVwcy11dGlsLmMgKi8KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy1zeXNkZXBzLmggYi9kYnVzL2RidXMtc3lzZGVwcy5oCmluZGV4IDI0ZmJlYzYuLjJkMTUyYjggMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy1zeXNkZXBzLmgKKysrIGIvZGJ1cy9kYnVzLXN5c2RlcHMuaApAQCAtNDgsMzIgKzQ4LDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2lmICFkZWZpbmVkKEJST0tFTl9QT0xMKSAmJiAoZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19JTlRFUklYKSkKLSAgLyogRm9sbG93aW5nIGxpYmN1cmwncyBleGFtcGxlLCB3ZSBibGFja2xpc3QgcG9sbCgpIG9uIERhcndpbgotICAgKiAobWFjT1MsIGlPUywgZXRjLikgYW5kIEludGVyaXggZHVlIHRvIGEgaGlzdG9yeSBvZiBpbXBsZW1lbnRhdGlvbgotICAgKiBpc3N1ZXMuCi0gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvYmxvYi9tYXN0ZXIvbTQvY3VybC1mdW5jdGlvbnMubTQKLSAgICoKLSAgICogT24gdW5zcGVjaWZpZWQgb2xkZXIgbWFjT1MgdmVyc2lvbnMsIHBvbGwoKSBmYWlsZWQgaWYgZ2l2ZW4gYQotICAgKiBkZXZpY2Ugbm9kZSB0byBwb2xsLgotICAgKgotICAgKiBPbiBtYWNPUyA8IDEwLjksIHBvbGwoKSB3aXRoIG5mZHM9MCBmYWlsZWQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgotICAgKiB0aGUgdGltZW91dCBhbmQgdGhlbiBzdWNjZWVkaW5nLgotICAgKgotICAgKiBPbiBtYWNPUyA+PSAxMC4xMiwgcG9sbCgpIHdpdGggbmZkcz0wIHN1Y2NlZWRlZCBpbW1lZGlhdGVseQotICAgKiBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSB0aW1lb3V0LCByZXN1bHRpbmcgaW4gYnVzeS1sb29waW5nLgotICAgKgotICAgKiBPbiBJbnRlcml4LCBwb2xsKCkgYXBwYXJlbnRseSBvbmx5IHdvcmtzIGZvciBmaWxlcyBpbiAvcHJvYy4KLSAgICoKLSAgICogVGhlICJsZWdhY3kiIGJ1aWxkIGZsYXZvdXIgaW4gb3VyIENJIG1hY2hpbmVyeSBkZWZpbmVzIEJST0tFTl9QT0xMCi0gICAqIG9uIHdoYXRldmVyIHBsYXRmb3JtIGlzIGluIHVzZSAobm9ybWFsbHkgTGludXgpIHRvIGZvcmNlIHVzZSBvZiB0aGUKLSAgICogc2FtZSBzZWxlY3QoKS1iYXNlZCBwb2xsKCkgZW11bGF0aW9uIHRoYXQgd2UgdXNlIGZvciBtYWNPUywgSW50ZXJpeCwKLSAgICogYW5kIGFueSBwbGF0Zm9ybSB0aGF0IGxhY2tzIGEgcmVhbCBwb2xsKCksIHNvIHRoYXQgd2UgY2FuIHRlc3QgaXQKLSAgICogbW9yZSByZWd1bGFybHkuCi0gICAqLwotIyBkZWZpbmUgQlJPS0VOX1BPTEwKLSNlbmRpZgotCiAvKiBBSVggc3lzL3BvbGwuaCBkb2VzICNkZWZpbmUgZXZlbnRzIHJlcWV2ZW50cywgYW5kIG90aGVyCiAgKiB3b25kZXJvdXNuZXNzLCBzbyBtdXN0IGluY2x1ZGUgc3lzL3BvbGwgYmVmb3JlIGRlY2xhcmluZwogICogREJ1c1BvbGxGRApAQCAtMTE4LDcgKzkyLDYgQEAKICAqIEB7CiAgKi8KIAotREJVU19QUklWQVRFX0VYUE9SVAogdm9pZCBfZGJ1c19hYm9ydCAodm9pZCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKIAogZGJ1c19ib29sX3QgX2RidXNfY2hlY2tfc2V0dWlkICh2b2lkKTsKQEAgLTIyNSw3ICsxOTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c1N0cmluZyAgICAgICAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICpmZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICpuX2Zkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICpuX2Zkcyk7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCiBpbnQgX2RidXNfd3JpdGVfc29ja2V0X3dpdGhfdW5peF9mZHMgICAgIChEQnVzU29ja2V0ICAgICAgICBmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERCdXNTdHJpbmcgKmJ1ZmZlciwKQEAgLTMxMiw2ICsyODUsMTYgQEAKICNlbmRpZgogfTsKIAorLyogVGhlIHZhbHVlIHdlIGdldCBmcm9tIGF1dG9mb28gaXMgaW4gdGhlIGZvcm0gb2YgYSBjcHAgZXhwcmVzc2lvbjsKKyAqIGNvbnZlcnQgdGhhdCB0byBhIGNvbnZlbnRpb25hbCBkZWZpbmVkL3VuZGVmIHN3aXRjaC4gKFdlIGNhbid0IGdldAorICogdGhlIGNvbnZlbnRpb25hbCBkZWZpbmVkL3VuZGVmIGJlY2F1c2Ugb2YgbXVsdGlhcmNoIGJ1aWxkcyBvbmx5IHJ1bm5pbmcKKyAqIC4vY29uZmlndXJlIG9uY2UsIG9uIERhcndpbi4pICovCisjaWYgREJVU19IQVZFX0FUT01JQ19JTlRfQ09ORAorIyAgIGRlZmluZSBEQlVTX0hBVkVfQVRPTUlDX0lOVCAxCisjZWxzZQorIyAgIHVuZGVmIERCVVNfSEFWRV9BVE9NSUNfSU5UCisjZW5kaWYKKwogREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19pbnQzMl90IF9kYnVzX2F0b21pY19pbmMgKERCdXNBdG9taWMgKmF0b21pYyk7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCkBAIC00MzgsOSArNDIxLDYgQEAKIGRidXNfYm9vbF90ICAgIF9kYnVzX2NyZWF0ZV9kaXJlY3RvcnkgICAgICAgIChjb25zdCBEQnVzU3RyaW5nICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICplcnJvcik7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCi1kYnVzX2Jvb2xfdCAgICBfZGJ1c19lbnN1cmVfZGlyZWN0b3J5ICAgICAgICAoY29uc3QgREJ1c1N0cmluZyAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAqZXJyb3IpOwotREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19ib29sX3QgICAgX2RidXNfZGVsZXRlX2RpcmVjdG9yeSAgICAgICAgKGNvbnN0IERCdXNTdHJpbmcgKmZpbGVuYW1lLAogCQkJCQkgICAgICBEQnVzRXJyb3IgICAgICAgICplcnJvcik7CiAKQEAgLTQ1NCwxMSArNDM0LDkgQEAKIAogZGJ1c19ib29sX3QgX2RidXNfZ2V0X3N0YW5kYXJkX3Nlc3Npb25fc2VydmljZWRpcnMgKERCdXNMaXN0ICoqZGlycyk7CiBkYnVzX2Jvb2xfdCBfZGJ1c19nZXRfc3RhbmRhcmRfc3lzdGVtX3NlcnZpY2VkaXJzIChEQnVzTGlzdCAqKmRpcnMpOwotZGJ1c19ib29sX3QgX2RidXNfc2V0X3VwX3RyYW5zaWVudF9zZXNzaW9uX3NlcnZpY2VkaXJzIChEQnVzTGlzdCAgKipkaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcik7CiAKLWRidXNfYm9vbF90IF9kYnVzX2dldF9zeXN0ZW1fY29uZmlnX2ZpbGUgIChEQnVzU3RyaW5nICpzdHIpOwotZGJ1c19ib29sX3QgX2RidXNfZ2V0X3Nlc3Npb25fY29uZmlnX2ZpbGUgKERCdXNTdHJpbmcgKnN0cik7CitkYnVzX2Jvb2xfdCBfZGJ1c19hcHBlbmRfc3lzdGVtX2NvbmZpZ19maWxlICAoREJ1c1N0cmluZyAqc3RyKTsKK2RidXNfYm9vbF90IF9kYnVzX2FwcGVuZF9zZXNzaW9uX2NvbmZpZ19maWxlIChEQnVzU3RyaW5nICpzdHIpOwogCiAvKiogT3BhcXVlIHR5cGUgZm9yIHJlYWRpbmcgYSBkaXJlY3RvcnkgbGlzdGluZyAqLwogdHlwZWRlZiBzdHJ1Y3QgREJ1c0Rpckl0ZXIgREJ1c0Rpckl0ZXI7CkBAIC01MTQsMTIgKzQ5Miw4IEBACiAKIERCVVNfUFJJVkFURV9FWFBPUlQKIGludCBfZGJ1c19wcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kIChjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSBfREJVU19HTlVDX1BSSU5URiAoMSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKTsKIAotI2lmZGVmIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERQotREJVU19QUklWQVRFX0VYUE9SVAotdm9pZCBfZGJ1c19wcmludF90aHJlYWQgKHZvaWQpOwotI2VuZGlmCiAKIC8qKgogICogUG9ydGFibGUgc3RydWN0IHdpdGggc3RhdCgpIHJlc3VsdHMKQEAgLTU0NSw3ICs1MTksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgICAgICAgYmxvY2tpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICplcnJvcik7CiAKLURCVVNfUFJJVkFURV9FWFBPUlQKIHZvaWQgICAgICAgIF9kYnVzX3ByaW50X2JhY2t0cmFjZSAgKHZvaWQpOwogCiBkYnVzX2Jvb2xfdCBfZGJ1c19iZWNvbWVfZGFlbW9uICAgKGNvbnN0IERCdXNTdHJpbmcgKnBpZGZpbGUsCkBAIC01NjcsMzMgKzU0MCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBtYXhfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICplcnJvcik7CiAKKy8qKiBBIFVOSVggc2lnbmFsIGhhbmRsZXIgKi8KK3R5cGVkZWYgdm9pZCAoKiBEQnVzU2lnbmFsSGFuZGxlcikgKGludCBzaWcpOworCit2b2lkIF9kYnVzX3NldF9zaWduYWxfaGFuZGxlciAoaW50ICAgICAgICAgICAgICAgc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNTaWduYWxIYW5kbGVyIGhhbmRsZXIpOworCiBkYnVzX2Jvb2xfdCBfZGJ1c191c2VyX2F0X2NvbnNvbGUgKGNvbnN0IGNoYXIgKnVzZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcik7CiAKLXR5cGVkZWYgZW51bSB7Ci0gIERCVVNfTE9HX0ZMQUdTX1NUREVSUiA9ICgxIDw8IDApLAotICBEQlVTX0xPR19GTEFHU19TWVNURU1fTE9HID0gKDEgPDwgMSkKLX0gREJ1c0xvZ0ZsYWdzOwotCi1EQlVTX1BSSVZBVEVfRVhQT1JUCi12b2lkIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoY29uc3QgY2hhciAgICp0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0xvZ0ZsYWdzICBmbGFncyk7Cit2b2lkIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoZGJ1c19ib29sX3QgaXNfZGFlbW9uKTsKIAogdHlwZWRlZiBlbnVtIHsKICAgREJVU19TWVNURU1fTE9HX0lORk8sCiAgIERCVVNfU1lTVEVNX0xPR19XQVJOSU5HLAogICBEQlVTX1NZU1RFTV9MT0dfU0VDVVJJVFksCi0gIERCVVNfU1lTVEVNX0xPR19FUlJPUgorICBEQlVTX1NZU1RFTV9MT0dfRkFUQUwKIH0gREJ1c1N5c3RlbUxvZ1NldmVyaXR5OwogCi1EQlVTX1BSSVZBVEVfRVhQT1JUCi12b2lkIF9kYnVzX2xvZyAgKERCdXNTeXN0ZW1Mb2dTZXZlcml0eSAgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAqbXNnLAotICAgICAgICAgICAgICAgICAuLi4pIF9EQlVTX0dOVUNfUFJJTlRGICgyLCAzKTsKLURCVVNfUFJJVkFURV9FWFBPUlQKLXZvaWQgX2RidXNfbG9ndiAoREJ1c1N5c3RlbUxvZ1NldmVyaXR5ICBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICptc2csCi0gICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgX0RCVVNfR05VQ19QUklOVEYgKDIsIDApOwordm9pZCBfZGJ1c19zeXN0ZW1fbG9nIChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNoYXIgKm1zZywgLi4uKSBfREJVU19HTlVDX1BSSU5URiAoMiwgMyk7Cit2b2lkIF9kYnVzX3N5c3RlbV9sb2d2IChEQnVzU3lzdGVtTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNoYXIgKm1zZywgdmFfbGlzdCBhcmdzKTsKIAogLyogRGVmaW5lIERCVVNfVkFfQ09QWSgpIHRvIGRvIHRoZSByaWdodCB0aGluZyBmb3IgY29weWluZyB2YV9saXN0IHZhcmlhYmxlcy4KICAqIGNvbmZpZy5oIG1heSBoYXZlIGFscmVhZHkgZGVmaW5lZCBEQlVTX1ZBX0NPUFkgYXMgdmFfY29weSBvciBfX3ZhX2NvcHkuCkBAIC02NDMsNyArNjA5LDYgQEAKICAqLwogdHlwZWRlZiB1bmlvbiBEQnVzR1VJRCBEQnVzR1VJRDsKIAotREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c19ib29sX3QgX2RidXNfcmVhZF9sb2NhbF9tYWNoaW5lX3V1aWQgICAoREJ1c0dVSUQgICAgICAgICAqbWFjaGluZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfYm9vbF90ICAgICAgIGNyZWF0ZV9pZl9ub3RfZm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICplcnJvcik7CkBAIC02ODIsMTAgKzY0NywyMSBAQAogREJVU19QUklWQVRFX0VYUE9SVAogZGJ1c191aWRfdCAgICBfZGJ1c19nZXR1aWQgKHZvaWQpOwogCitkYnVzX2Jvb2xfdCBfZGJ1c19jaGFuZ2VfdG9fZGFlbW9uX3VzZXIgKGNvbnN0IGNoYXIgKnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgKmVycm9yKTsKKwogREJVU19QUklWQVRFX0VYUE9SVAogdm9pZCBfZGJ1c19mbHVzaF9jYWNoZXMgKHZvaWQpOwogCi1kYnVzX2Jvb2xfdCBfZGJ1c19yZXBsYWNlX2luc3RhbGxfcHJlZml4IChEQnVzU3RyaW5nICpwYXRoKTsKKy8qCisgKiByZXBsYWNlcyB0aGUgdGVybSBEQlVTX1BSRUZJWCBpbiBjb25maWd1cmVfdGltZV9wYXRoIGJ5IHRoZQorICogY3VycmVudCBkYnVzIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuIE9uIHVuaXggdGhpcyBmdW5jdGlvbiBpcyBhIG5vb3AKKyAqCisgKiBAcGFyYW0gY29uZmlndXJlX3RpbWVfcGF0aAorICogQHJldHVybiByZWFsIHBhdGgKKyAqLworY29uc3QgY2hhciAqCitfZGJ1c19yZXBsYWNlX2luc3RhbGxfcHJlZml4IChjb25zdCBjaGFyICpjb25maWd1cmVfdGltZV9wYXRoKTsKIAogLyogRG8gbm90IHNldCB0aGlzIHRvbyBoaWdoOiBpdCBpcyBhIGRlbmlhbC1vZi1zZXJ2aWNlIHJpc2suCiAgKiBTZWUgPGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTgyODIwPgpAQCAtNjk4LDIxICs2NzQsMTIgQEAKIHR5cGVkZWYgc3RydWN0IERCdXNSTGltaXQgREJ1c1JMaW1pdDsKIAogREJ1c1JMaW1pdCAgICAgKl9kYnVzX3JsaW1pdF9zYXZlX2ZkX2xpbWl0ICAgICAgICAgICAgICAgICAoREJ1c0Vycm9yICAgICplcnJvcik7Ci1kYnVzX2Jvb2xfdCAgICAgX2RidXNfcmxpbWl0X3JhaXNlX2ZkX2xpbWl0ICAgICAgICAgICAgICAgIChEQnVzRXJyb3IgICAgKmVycm9yKTsKK2RidXNfYm9vbF90ICAgICBfZGJ1c19ybGltaXRfcmFpc2VfZmRfbGltaXRfaWZfcHJpdmlsZWdlZCAgKHVuc2lnbmVkIGludCAgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAqZXJyb3IpOwogZGJ1c19ib29sX3QgICAgIF9kYnVzX3JsaW1pdF9yZXN0b3JlX2ZkX2xpbWl0ICAgICAgICAgICAgICAoREJ1c1JMaW1pdCAgICpzYXZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAqZXJyb3IpOwogdm9pZCAgICAgICAgICAgIF9kYnVzX3JsaW1pdF9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAoREJ1c1JMaW1pdCAgICpsaW0pOwogCi0jaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKLV9EQlVTX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUCi1kYnVzX2Jvb2xfdCBfZGJ1c190ZXN0X2FwcGVuZF9kaWZmZXJlbnRfdWlkIChEQnVzU3RyaW5nICp1aWQpOwotCi0jaWZkZWYgREJVU19VTklYCi1fREJVU19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVAotZGJ1c19ib29sX3QgX2RidXNfdGVzdF9hcHBlbmRfZGlmZmVyZW50X3VzZXJuYW1lIChEQnVzU3RyaW5nICp1c2VybmFtZSk7Ci0jZW5kaWYKLSNlbmRpZiAgLyogREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMgKi8KLQogLyoqIEB9ICovCiAKIERCVVNfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdGVzdC1tYWluLmMgYi9kYnVzL2RidXMtdGVzdC1tYWluLmMKaW5kZXggZjgwODhmOC4uMDhlNDAyYiAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXRlc3QtbWFpbi5jCisrKyBiL2RidXMvZGJ1cy10ZXN0LW1haW4uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImRidXMtdGVzdC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaWYgSEFWRV9MT0NBTEVfSAogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdGVzdC5jIGIvZGJ1cy9kYnVzLXRlc3QuYwppbmRleCA2YzBkNzFmLi41OTkwZDZlIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtdGVzdC5jCisrKyBiL2RidXMvZGJ1cy10ZXN0LmMKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCi1zdGF0aWMgdm9pZCBkaWUgKGNvbnN0IGNoYXIgKmZhaWx1cmUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiBkaWUgKGNvbnN0IGNoYXIgKmZhaWx1cmUpCiB7CkBAIC00Niw3ICs0NCw3IEBACiAgIHByaW50ZiAoIiVzOiBjaGVja2luZyBmb3IgbWVtbGVha3NcbiIsICJ0ZXN0LWRidXMiKTsKICAgaWYgKF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nICgpICE9IDApCiAgICAgewotICAgICAgX2RidXNfd2FybiAoIiVkIGRidXNfbWFsbG9jIGJsb2NrcyB3ZXJlIG5vdCBmcmVlZCIsCisgICAgICBfZGJ1c193YXJuICgiJWQgZGJ1c19tYWxsb2MgYmxvY2tzIHdlcmUgbm90IGZyZWVkXG4iLAogICAgICAgICAgICAgICAgICAgX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCkpOwogICAgICAgZGllICgibWVtbGVha3MiKTsKICAgICB9CmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdGltZW91dC5jIGIvZGJ1cy9kYnVzLXRpbWVvdXQuYwppbmRleCAyM2NhNmU0Li5hMWQ2Y2U1IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtdGltZW91dC5jCisrKyBiL2RidXMvZGJ1cy10aW1lb3V0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICAgdm9pZCAqZGF0YTsJCSAgIAkgICAgICAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIGRhdGEuICovCiAgIERCdXNGcmVlRnVuY3Rpb24gZnJlZV9kYXRhX2Z1bmN0aW9uOyAgICAgICAgIC8qKjwgRnJlZSB0aGUgYXBwbGljYXRpb24gZGF0YS4gKi8KICAgdW5zaWduZWQgaW50IGVuYWJsZWQgOiAxOyAgICAgICAgICAgICAgICAgICAgLyoqPCBUcnVlIGlmIHRpbWVvdXQgaXMgYWN0aXZlLiAqLwotICB1bnNpZ25lZCBpbnQgbmVlZHNfcmVzdGFydCA6IDE7ICAgICAgICAgICAgICAvKio8IEZsYWcgdGhhdCB0aW1lb3V0IHNob3VsZCBiZSByZXN0YXJ0ZWQgYWZ0ZXIgcmUtZW5hYmxpbmcuICovCiB9OwogCiAvKioKQEAgLTgwLDcgKzc5LDYgQEAKICAgdGltZW91dC0+ZnJlZV9oYW5kbGVyX2RhdGFfZnVuY3Rpb24gPSBmcmVlX2RhdGFfZnVuY3Rpb247CiAKICAgdGltZW91dC0+ZW5hYmxlZCA9IFRSVUU7Ci0gIHRpbWVvdXQtPm5lZWRzX3Jlc3RhcnQgPSBGQUxTRTsKICAgCiAgIHJldHVybiB0aW1lb3V0OwogfQpAQCAtMTI0LDI5ICsxMjIsMjUgQEAKIH0KIAogLyoqCi0gKiBDaGFuZ2UgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgdG8gYmUgaW50ZXJ2YWwgbWlsbGlzZWNvbmRzIGZyb20gbm93Ci0gKiAoZm9yZ2V0dGluZyB3aGVuIHRoZSB0aW1lb3V0IHdhcyBpbml0aWFsbHkgc3RhcnRlZCksIGFuZCBlbmFibGUgaXQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIERCdXNMb29wOgotICogaXQgY2FuIGJlIHVzZWQgaW4gdGhlIG1lc3NhZ2UgYnVzIGRhZW1vbiBpbXBsZW1lbnRhdGlvbiBvciBpbiB1bml0IHRlc3RzLAotICogYnV0IGl0IGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gbWFpbiBsb29wLgorICogQ2hhbmdlcyB0aGUgdGltZW91dCBpbnRlcnZhbC4gTm90ZSB0aGF0IHlvdSBoYXZlIHRvIGRpc2FibGUgYW5kCisgKiByZS1lbmFibGUgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIHRpbWVvdXQgdG9nZ2xlIGZ1bmN0aW9uCisgKiAoX2RidXNfY29ubmVjdGlvbl90b2dnbGVfdGltZW91dF91bmxvY2tlZCgpIGV0Yy4pIHRvIG5vdGlmeSB0aGUKKyAqIGFwcGxpY2F0aW9uIG9mIHRoaXMgY2hhbmdlLgogICoKICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0CiAgKiBAcGFyYW0gaW50ZXJ2YWwgdGhlIG5ldyBpbnRlcnZhbAogICovCiB2b2lkCi1fZGJ1c190aW1lb3V0X3Jlc3RhcnQgKERCdXNUaW1lb3V0ICp0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgaW50ZXJ2YWwpCitfZGJ1c190aW1lb3V0X3NldF9pbnRlcnZhbCAoREJ1c1RpbWVvdXQgKnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgIGludGVydmFsKQogewogICBfZGJ1c19hc3NlcnQgKGludGVydmFsID49IDApOwogICAKICAgdGltZW91dC0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgdGltZW91dC0+ZW5hYmxlZCA9IFRSVUU7Ci0gIHRpbWVvdXQtPm5lZWRzX3Jlc3RhcnQgPSBUUlVFOwogfQogCiAvKioKLSAqIERpc2FibGUgdGhlIHRpbWVvdXQuIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIHVzZQorICogQ2hhbmdlcyB0aGUgdGltZW91dCdzIGVuYWJsZWQtbmVzcy4gTm90ZSB0aGF0IHlvdSBzaG91bGQgdXNlCiAgKiBfZGJ1c19jb25uZWN0aW9uX3RvZ2dsZV90aW1lb3V0X3VubG9ja2VkKCkgZXRjLiBpbnN0ZWFkLCBpZgogICogdGhlIHRpbWVvdXQgaXMgcGFzc2VkIG91dCB0byBhbiBhcHBsaWNhdGlvbiBtYWluIGxvb3AuCiAgKiBpLmUuIHlvdSBjYW4ndCB1c2UgdGhpcyBmdW5jdGlvbiBpbiB0aGUgRC1CdXMgbGlicmFyeSwgaXQncwpAQCAtMTU2LDExICsxNTAsMTMgQEAKICAqIEBwYXJhbSBlbmFibGVkICNUUlVFIGlmIHRpbWVvdXQgc2hvdWxkIGJlIGVuYWJsZWQuCiAgKi8KIHZvaWQKLV9kYnVzX3RpbWVvdXRfZGlzYWJsZSAoREJ1c1RpbWVvdXQgICp0aW1lb3V0KQorX2RidXNfdGltZW91dF9zZXRfZW5hYmxlZCAoREJ1c1RpbWVvdXQgICp0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgICBlbmFibGVkKQogewotICB0aW1lb3V0LT5lbmFibGVkID0gRkFMU0U7CisgIHRpbWVvdXQtPmVuYWJsZWQgPSBlbmFibGVkICE9IEZBTFNFOwogfQogCisKIC8qKgogICogQHR5cGVkZWYgREJ1c1RpbWVvdXRMaXN0CiAgKgpAQCAtMjY2LDEyICsyNjIsMTIgQEAKICAgICAgICAgICAgICAgbGluazIgPSBfZGJ1c19saXN0X2dldF9maXJzdF9saW5rICgmdGltZW91dF9saXN0LT50aW1lb3V0cyk7CiAgICAgICAgICAgICAgIHdoaWxlIChsaW5rMiAhPSBsaW5rKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIERCdXNMaXN0ICpuZXh0MiA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayAoJnRpbWVvdXRfbGlzdC0+dGltZW91dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsyKTsKKyAgICAgICAgICAgICAgICAgIERCdXNMaXN0ICpuZXh0ID0gX2RidXNfbGlzdF9nZXRfbmV4dF9saW5rICgmdGltZW91dF9saXN0LT50aW1lb3V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rMik7CiAKICAgICAgICAgICAgICAgICAgICgqIHJlbW92ZV9mdW5jdGlvbikgKGxpbmsyLT5kYXRhLCBkYXRhKTsKICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgbGluazIgPSBuZXh0MjsKKyAgICAgICAgICAgICAgICAgIGxpbmsyID0gbmV4dDsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMzc5LDMwICszNzUsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9saXN0LT50aW1lb3V0X2RhdGEpOwogfQogCi0vKioKLSAqIFJldHVybnMgd2hldGhlciBhIHRpbWVvdXQgbmVlZHMgcmVzdGFydCB0aW1lIGNvdW50aW5nIGluIHRoZSBldmVudCBsb29wLgotICoKLSAqIEBwYXJhbSB0aW1lb3V0IHRoZSBEQnVzVGltZW91dCBvYmplY3QKLSAqIEByZXR1cm5zICNUUlVFIGlmIHJlc3RhcnQgaXMgbmVlZGVkCi0gKi8KLWRidXNfYm9vbF90Ci1fZGJ1c190aW1lb3V0X25lZWRzX3Jlc3RhcnQgKERCdXNUaW1lb3V0ICp0aW1lb3V0KQotewotICByZXR1cm4gdGltZW91dC0+bmVlZHNfcmVzdGFydDsKLX0KLQotLyoqCi0gKiBNYXJrIHRpbWVvdXQgYXMgcmVzdGFydGVkIChzZXR0aW5nIHRpbWVzdGFtcHMgaXMgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGV2ZW50Ci0gKiBsb29wKS4KLSAqCi0gKiBAcGFyYW0gdGltZW91dCB0aGUgREJ1c1RpbWVvdXQgb2JqZWN0Ci0gKi8KLXZvaWQKLV9kYnVzX3RpbWVvdXRfcmVzdGFydGVkIChEQnVzVGltZW91dCAqdGltZW91dCkKLXsKLSAgdGltZW91dC0+bmVlZHNfcmVzdGFydCA9IEZBTFNFOwotfQotCiAvKiogQH0gKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdGltZW91dC5oIGIvZGJ1cy9kYnVzLXRpbWVvdXQuaAppbmRleCAzZDBiOGI0Li5jNjUyYmI3IDEwMDY0NAotLS0gYS9kYnVzL2RidXMtdGltZW91dC5oCisrKyBiL2RidXMvZGJ1cy10aW1lb3V0LmgKQEAgLTQ5LDEwICs0OSwxMSBAQAogREJVU19QUklWQVRFX0VYUE9SVAogdm9pZCAgICAgICAgIF9kYnVzX3RpbWVvdXRfdW5yZWYgICAgICAgIChEQnVzVGltZW91dCAgICAgICAgKnRpbWVvdXQpOwogREJVU19QUklWQVRFX0VYUE9SVAotdm9pZCAgICAgICAgIF9kYnVzX3RpbWVvdXRfcmVzdGFydCAgICAgIChEQnVzVGltZW91dCAgICAgICAgKnRpbWVvdXQsCit2b2lkICAgICAgICAgX2RidXNfdGltZW91dF9zZXRfaW50ZXJ2YWwgKERCdXNUaW1lb3V0ICAgICAgICAqdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICBpbnRlcnZhbCk7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCi12b2lkICAgICAgICAgX2RidXNfdGltZW91dF9kaXNhYmxlICAgICAgKERCdXNUaW1lb3V0ICAgICAgICAqdGltZW91dCk7Cit2b2lkICAgICAgICAgX2RidXNfdGltZW91dF9zZXRfZW5hYmxlZCAgKERCdXNUaW1lb3V0ICAgICAgICAqdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgICAgICAgICBlbmFibGVkKTsKIAogREJ1c1RpbWVvdXRMaXN0ICpfZGJ1c190aW1lb3V0X2xpc3RfbmV3ICAgICAgICAgICAgKHZvaWQpOwogdm9pZCAgICAgICAgICAgICBfZGJ1c190aW1lb3V0X2xpc3RfZnJlZSAgICAgICAgICAgKERCdXNUaW1lb3V0TGlzdCAgICAgICAgICAgKnRpbWVvdXRfbGlzdCk7CkBAIC03MCwxMCArNzEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNUaW1lb3V0ICAgICAgICAgICAgICAgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgICAgICAgICAgICAgICAgZW5hYmxlZCk7CiAKLURCVVNfUFJJVkFURV9FWFBPUlQKLWRidXNfYm9vbF90IF9kYnVzX3RpbWVvdXRfbmVlZHNfcmVzdGFydCAoREJ1c1RpbWVvdXQgKnRpbWVvdXQpOwotREJVU19QUklWQVRFX0VYUE9SVAotdm9pZCAgICAgICAgX2RidXNfdGltZW91dF9yZXN0YXJ0ZWQgICAgIChEQnVzVGltZW91dCAqdGltZW91dCk7CiAKIC8qKiBAfSAqLwogCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdHJhbnNwb3J0LXNvY2tldC5jIGIvZGJ1cy9kYnVzLXRyYW5zcG9ydC1zb2NrZXQuYwppbmRleCA3Mzg5NjUwLi4zNWMzY2JmIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtdHJhbnNwb3J0LXNvY2tldC5jCisrKyBiL2RidXMvZGJ1cy10cmFuc3BvcnQtc29ja2V0LmMKQEAgLTQ3NiwxMSArNDc2LDYgQEAKICAgICAgICAgICBfZGJ1c192ZXJib3NlICgiICVzIGF1dGggc3RhdGU6IGF1dGhlbnRpY2F0ZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBTlNQT1JUX1NJREUgKHRyYW5zcG9ydCkpOwogICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgREJVU19BVVRIX1NUQVRFX0lOVkFMSUQ6Ci0gICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBhdXRoIHN0YXRlIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc5OSw5ICs3OTQsNyBAQAogICAgICAgaWYgKGJ5dGVzX3JlYWQgPiAwKQogICAgICAgICB7CiAgICAgICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAodHJhbnNwb3J0LT5sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIpOwogCiAgICAgICAgICAgaWYgKCFfZGJ1c19hdXRoX2RlY29kZV9kYXRhICh0cmFuc3BvcnQtPmF1dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc29ja2V0X3RyYW5zcG9ydC0+ZW5jb2RlZF9pbmNvbWluZywKQEAgLTgyNCwyMiArODE3LDEzIEBACiAgICAgfQogICBlbHNlCiAgICAgewotICAgICAgaW50IG1heF90b19yZWFkID0gREJVU19NQVhJTVVNX01FU1NBR0VfTEVOR1RIOwotICAgICAgZGJ1c19ib29sX3QgbWF5X3JlYWRfdW5peF9mZHMgPSBUUlVFOwotCiAgICAgICBfZGJ1c19tZXNzYWdlX2xvYWRlcl9nZXRfYnVmZmVyICh0cmFuc3BvcnQtPmxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X3RvX3JlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF5X3JlYWRfdW5peF9mZHMpOwotCi0gICAgICBpZiAobWF4X3RvX3JlYWQgPiBzb2NrZXRfdHJhbnNwb3J0LT5tYXhfYnl0ZXNfcmVhZF9wZXJfaXRlcmF0aW9uKQotICAgICAgICBtYXhfdG9fcmVhZCA9IHNvY2tldF90cmFuc3BvcnQtPm1heF9ieXRlc19yZWFkX3Blcl9pdGVyYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyKTsKIAogI2lmZGVmIEhBVkVfVU5JWF9GRF9QQVNTSU5HCi0gICAgICBpZiAoREJVU19UUkFOU1BPUlRfQ0FOX1NFTkRfVU5JWF9GRCh0cmFuc3BvcnQpICYmIG1heV9yZWFkX3VuaXhfZmRzKQorICAgICAgaWYgKERCVVNfVFJBTlNQT1JUX0NBTl9TRU5EX1VOSVhfRkQodHJhbnNwb3J0KSkKICAgICAgICAgewotICAgICAgICAgIGludCAqZmRzOwotICAgICAgICAgIHVuc2lnbmVkIGludCBuX2ZkczsKKyAgICAgICAgICBpbnQgKmZkcywgbl9mZHM7CiAKICAgICAgICAgICBpZiAoIV9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF91bml4X2Zkcyh0cmFuc3BvcnQtPmxvYWRlciwgJmZkcywgJm5fZmRzKSkKICAgICAgICAgICAgIHsKQEAgLTg1MSw3ICs4MzUsNyBAQAogCiAgICAgICAgICAgYnl0ZXNfcmVhZCA9IF9kYnVzX3JlYWRfc29ja2V0X3dpdGhfdW5peF9mZHMoc29ja2V0X3RyYW5zcG9ydC0+ZmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90b19yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldF90cmFuc3BvcnQtPm1heF9ieXRlc19yZWFkX3Blcl9pdGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRzLCAmbl9mZHMpOwogICAgICAgICAgIHNhdmVkX2Vycm5vID0gX2RidXNfc2F2ZV9zb2NrZXRfZXJybm8gKCk7CiAKQEAgLTg2NCw3ICs4NDgsNyBAQAogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICBieXRlc19yZWFkID0gX2RidXNfcmVhZF9zb2NrZXQgKHNvY2tldF90cmFuc3BvcnQtPmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBtYXhfdG9fcmVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNvY2tldF90cmFuc3BvcnQtPm1heF9ieXRlc19yZWFkX3Blcl9pdGVyYXRpb24pOwogICAgICAgICAgIHNhdmVkX2Vycm5vID0gX2RidXNfc2F2ZV9zb2NrZXRfZXJybm8gKCk7CiAgICAgICAgIH0KIApAQCAtMTAyNiw3ICsxMDEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwogICAgICAgZWxzZQogICAgICAgICBfZGJ1c192ZXJib3NlICgiYXNrZWQgdG8gaGFuZGxlIHdhdGNoICVwIG9uIGZkICUiIERCVVNfU09DS0VUX0ZPUk1BVCAiIHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplXG4iLAotICAgICAgICAgICAgICAgICAgICAgICB3YXRjaCwgX2RidXNfc29ja2V0X3ByaW50YWJsZSAoX2RidXNfd2F0Y2hfZ2V0X3NvY2tldCAod2F0Y2gpKSk7CisgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoLCBkYnVzX3dhdGNoX2dldF9zb2NrZXQgKHdhdGNoKSk7CiAgICAgfQogI2VuZGlmIC8qIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERSAqLwogCmRpZmYgLS1naXQgYS9kYnVzL2RidXMtdHJhbnNwb3J0LmMgYi9kYnVzL2RidXMtdHJhbnNwb3J0LmMKaW5kZXggZjJhOTYxNS4uMzE1ODZiMSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXRyYW5zcG9ydC5jCisrKyBiL2RidXMvZGJ1cy10cmFuc3BvcnQuYwpAQCAtMjU0LDE2ICsyNTQsMTMgQEAKICAgaW50IGxlbiwgaTsKIAogICBfZGJ1c19hc3NlcnQgKGFkZHJlc3MgIT0gTlVMTCk7Ci0gIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19DTEVBUiAoZXJyb3IpOwogCiAgIGlmICghZGJ1c19wYXJzZV9hZGRyZXNzIChhZGRyZXNzLCAmZW50cmllcywgJmxlbiwgZXJyb3IpKQogICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgLyogbm90IGEgdmFsaWQgYWRkcmVzcyAqLwogCiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKGVycm9yKTsKICAgICAgIHRyYW5zcG9ydCA9IF9kYnVzX3RyYW5zcG9ydF9vcGVuIChlbnRyaWVzW2ldLCBlcnJvcik7Ci0KICAgICAgIGlmICh0cmFuc3BvcnQgIT0gTlVMTCkKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDEzLDkgKzQxMCw2IEBACiAgICAgICAgICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX1NFVCAoJnRtcF9lcnJvcik7CiAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCB0cmFuc3BvcnQgb3BlbiByZXN1bHQiKTsKLSAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzUyLDE3ICs3NDYsOCBAQAogICAgICAgICAgICAgY2FzZSBEQlVTX0FVVEhfU1RBVEVfQVVUSEVOVElDQVRFRDoKICAgICAgICAgICAgICAgLyogbGVhdmUgYXMgbWF5YmVfYXV0aGVudGljYXRlZCAqLwogICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBEQlVTX0FVVEhfU1RBVEVfV0FJVElOR19GT1JfSU5QVVQ6Ci0gICAgICAgICAgICBjYXNlIERCVVNfQVVUSF9TVEFURV9XQUlUSU5HX0ZPUl9NRU1PUlk6Ci0gICAgICAgICAgICBjYXNlIERCVVNfQVVUSF9TVEFURV9IQVZFX0JZVEVTX1RPX1NFTkQ6Ci0gICAgICAgICAgICBjYXNlIERCVVNfQVVUSF9TVEFURV9ORUVEX0RJU0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgIG1heWJlX2F1dGhlbnRpY2F0ZWQgPSBGQUxTRTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgREJVU19BVVRIX1NUQVRFX0lOVkFMSUQ6CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIHN0YXRlIik7CisgICAgICAgICAgICAgIG1heWJlX2F1dGhlbnRpY2F0ZWQgPSBGQUxTRTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC05MTQsNyArODk5LDcgQEAKIAogICBpZiAoZGJ1c193YXRjaF9nZXRfc29ja2V0ICh3YXRjaCkgPCAwKQogICAgIHsKLSAgICAgIF9kYnVzX3dhcm5fY2hlY2tfZmFpbGVkICgiVHJpZWQgdG8gaGFuZGxlIGFuIGludmFsaWRhdGVkIHdhdGNoOyB0aGlzIHdhdGNoIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCIpOworICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJUcmllZCB0byBoYW5kbGUgYW4gaW52YWxpZGF0ZWQgd2F0Y2g7IHRoaXMgd2F0Y2ggc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkXG4iKTsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgCkBAIC0xMDQ0LDkgKzEwMjksNyBAQAogICAgICAgICB9CiAgICAgICAKICAgICAgIF9kYnVzX21lc3NhZ2VfbG9hZGVyX2dldF9idWZmZXIgKHRyYW5zcG9ydC0+bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIpOwogICAgICAgCiAgICAgICBvcmlnX2xlbiA9IF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoIChidWZmZXIpOwogICAgICAgCkBAIC0xMDcyLDIwICsxMDU1LDE0IEBACiAgICAgewogICAgICAgY29uc3QgREJ1c1N0cmluZyAqYnl0ZXM7CiAgICAgICBEQnVzU3RyaW5nICpidWZmZXI7Ci0jaWZkZWYgREJVU19FTkFCTEVfVkVSQk9TRV9NT0RFCiAgICAgICBpbnQgb3JpZ19sZW47Ci0jZW5kaWYKICAgICAgIGRidXNfYm9vbF90IHN1Y2NlZWRlZDsKIAogICAgICAgX2RidXNfbWVzc2FnZV9sb2FkZXJfZ2V0X2J1ZmZlciAodHJhbnNwb3J0LT5sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0jaWZkZWYgREJVU19FTkFCTEVfVkVSQk9TRV9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAKICAgICAgIG9yaWdfbGVuID0gX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKGJ1ZmZlcik7Ci0jZW5kaWYKLQorICAgICAgICAgICAgICAgIAogICAgICAgX2RidXNfYXV0aF9nZXRfdW51c2VkX2J5dGVzICh0cmFuc3BvcnQtPmF1dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlcyk7CiAKQEAgLTExNjUsOSArMTE0Miw5IEBACiAgIERCdXNEaXNwYXRjaFN0YXR1cyBzdGF0dXM7CiAKICNpZiAwCi0gIF9kYnVzX3ZlcmJvc2UgKCJlbnRlclxuIik7CisgIF9kYnVzX3ZlcmJvc2UgKCJfZGJ1c190cmFuc3BvcnRfcXVldWVfbWVzc2FnZXMoKVxuIik7CiAjZW5kaWYKLQorICAKICAgLyogUXVldWUgYW55IG1lc3NhZ2VzICovCiAgIHdoaWxlICgoc3RhdHVzID0gX2RidXNfdHJhbnNwb3J0X2dldF9kaXNwYXRjaF9zdGF0dXMgKHRyYW5zcG9ydCkpID09IERCVVNfRElTUEFUQ0hfREFUQV9SRU1BSU5TKQogICAgIHsKZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy11c2VyZGItdXRpbC5jIGIvZGJ1cy9kYnVzLXVzZXJkYi11dGlsLmMKaW5kZXggMTcwZDIzMy4uODg4YTIzZSAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXVzZXJkYi11dGlsLmMKKysrIGIvZGJ1cy9kYnVzLXVzZXJkYi11dGlsLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJkYnVzLXByb3RvY29sLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpZmRlZiBIQVZFX1NZU1RFTUQKKyNpZiBIQVZFX1NZU1RFTUQKICNpbmNsdWRlIDxzeXN0ZW1kL3NkLWxvZ2luLmg+CiAjZW5kaWYKIApAQCAtMzgsMTUgKzM4LDYgQEAKICAqIEB7CiAgKi8KIAotc3RhdGljIERCdXNHcm91cEluZm8gKgotX2RidXNfZ3JvdXBfaW5mb19yZWYgKERCdXNHcm91cEluZm8gKmluZm8pCi17Ci0gIF9kYnVzX2Fzc2VydCAoaW5mby0+cmVmY291bnQgPiAwKTsKLSAgX2RidXNfYXNzZXJ0IChpbmZvLT5yZWZjb3VudCA8IFNJWkVfTUFYKTsKLSAgaW5mby0+cmVmY291bnQrKzsKLSAgcmV0dXJuIGluZm87Ci19Ci0KIC8qKgogICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgVUlEIHNlbnQgaW4gaXMgdGhlIGNvbnNvbGUgdXNlcgogICoKQEAgLTI0OSw5ICsyNDAsOSBAQAogICogQHBhcmFtIGdpZCB0aGUgZ3JvdXAgSUQgb3IgI0RCVVNfR0lEX1VOU0VUCiAgKiBAcGFyYW0gZ3JvdXBuYW1lIGdyb3VwIG5hbWUgb3IgI05VTEwgCiAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgdG8gZmlsbCBpbgotICogQHJldHVybnMgdGhlIGVudHJ5IGluIHRoZSBkYXRhYmFzZSAoYm9ycm93ZWQsIGRvIG5vdCBmcmVlKQorICogQHJldHVybnMgdGhlIGVudHJ5IGluIHRoZSBkYXRhYmFzZQogICovCi1jb25zdCBEQnVzR3JvdXBJbmZvICoKK0RCdXNHcm91cEluZm8qCiBfZGJ1c191c2VyX2RhdGFiYXNlX2xvb2t1cF9ncm91cCAoREJ1c1VzZXJEYXRhYmFzZSAqZGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19naWRfdCAgICAgICAgZ2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERCdXNTdHJpbmcgKmdyb3VwbmFtZSwKQEAgLTI5NiwxNCArMjg3LDEzIEBACiAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgIGluZm8tPnJlZmNvdW50ID0gMTsKIAogICAgICAgaWYgKGdpZCAhPSBEQlVTX0dJRF9VTlNFVCkKICAgICAgICAgewogICAgICAgICAgIGlmICghX2RidXNfZ3JvdXBfaW5mb19maWxsX2dpZCAoaW5mbywgZ2lkLCBlcnJvcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIF9EQlVTX0FTU0VSVF9FUlJPUl9JU19TRVQgKGVycm9yKTsKLSAgICAgICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb191bnJlZiAoaW5mbyk7CisgICAgICAgICAgICAgIF9kYnVzX2dyb3VwX2luZm9fZnJlZV9hbGxvY2F0ZWQgKGluZm8pOwogICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzEyLDcgKzMwMiw3IEBACiAgICAgICAgICAgaWYgKCFfZGJ1c19ncm91cF9pbmZvX2ZpbGwgKGluZm8sIGdyb3VwbmFtZSwgZXJyb3IpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBfREJVU19BU1NFUlRfRVJST1JfSVNfU0VUIChlcnJvcik7Ci0gICAgICAgICAgICAgIF9kYnVzX2dyb3VwX2luZm9fdW5yZWYgKGluZm8pOworICAgICAgICAgICAgICBfZGJ1c19ncm91cF9pbmZvX2ZyZWVfYWxsb2NhdGVkIChpbmZvKTsKICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyMSwzNyArMzExLDIzIEBACiAgICAgICBnaWQgPSBEQlVTX0dJRF9VTlNFVDsKICAgICAgIGdyb3VwbmFtZSA9IE5VTEw7CiAKLSAgICAgIGlmIChfZGJ1c19oYXNoX3RhYmxlX2luc2VydF91aW50cHRyIChkYi0+Z3JvdXBzLCBpbmZvLT5naWQsIGluZm8pKQotICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb19yZWYgKGluZm8pOwotICAgICAgICB9Ci0gICAgICBlbHNlCisgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3VpbnRwdHIgKGRiLT5ncm91cHMsIGluZm8tPmdpZCwgaW5mbykpCiAgICAgICAgIHsKICAgICAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfTk9fTUVNT1JZLCBOVUxMKTsKLSAgICAgICAgICBfZGJ1c19ncm91cF9pbmZvX3VucmVmIChpbmZvKTsKKyAgICAgICAgICBfZGJ1c19ncm91cF9pbmZvX2ZyZWVfYWxsb2NhdGVkIChpbmZvKTsKICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCiAKLSAgICAgIGlmIChfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9zdHJpbmcgKGRiLT5ncm91cHNfYnlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmdyb3VwbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8pKQotICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb19yZWYgKGluZm8pOwotICAgICAgICB9Ci0gICAgICBlbHNlCisgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3N0cmluZyAoZGItPmdyb3Vwc19ieV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmdyb3VwbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKSkKICAgICAgICAgewogICAgICAgICAgIF9kYnVzX2hhc2hfdGFibGVfcmVtb3ZlX3VpbnRwdHIgKGRiLT5ncm91cHMsIGluZm8tPmdpZCk7Ci0gICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb191bnJlZiAoaW5mbyk7CiAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLQotICAgICAgLyogUmVsZWFzZSB0aGUgb3JpZ2luYWwgcmVmZXJlbmNlICovCi0gICAgICBfZGJ1c19ncm91cF9pbmZvX3VucmVmIChpbmZvKTsKLQotICAgICAgLyogUmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBEQnVzR3JvdXBJbmZvIG93bmVkIGJ5IHRoZQotICAgICAgICogdHdvIGhhc2ggdGFibGVzICovCisgICAgICAKICAgICAgIHJldHVybiBpbmZvOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2RidXMvZGJ1cy11c2VyZGIuYyBiL2RidXMvZGJ1cy11c2VyZGIuYwppbmRleCAxMDQzNGJiLi41MmY5MjdhIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtdXNlcmRiLmMKKysrIGIvZGJ1cy9kYnVzLXVzZXJkYi5jCkBAIC0zNSw1NyArMzUsMzQgQEAKICAqIEB7CiAgKi8KIAotc3RhdGljIERCdXNVc2VySW5mbyAqCi1fZGJ1c191c2VyX2luZm9fcmVmIChEQnVzVXNlckluZm8gKmluZm8pCi17Ci0gIF9kYnVzX2Fzc2VydCAoaW5mby0+cmVmY291bnQgPiAwKTsKLSAgX2RidXNfYXNzZXJ0IChpbmZvLT5yZWZjb3VudCA8IFNJWkVfTUFYKTsKLSAgaW5mby0+cmVmY291bnQrKzsKLSAgcmV0dXJuIGluZm87Ci19Ci0KIC8qKgotICogRGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50LiBJZiBpdCByZWFjaGVzIDAsCi0gKiBmcmVlcyB0aGUgZ2l2ZW4gI0RCdXNVc2VySW5mbydzIG1lbWJlcnMgd2l0aCBfZGJ1c191c2VyX2luZm9fZnJlZSgpCisgKiBGcmVlcyB0aGUgZ2l2ZW4gI0RCdXNVc2VySW5mbydzIG1lbWJlcnMgd2l0aCBfZGJ1c191c2VyX2luZm9fZnJlZSgpCiAgKiBhbmQgYWxzbyBjYWxscyBkYnVzX2ZyZWUoKSBvbiB0aGUgYmxvY2sgaXRzZWxmCiAgKgogICogQHBhcmFtIGluZm8gdGhlIGluZm8KICAqLwogdm9pZAotX2RidXNfdXNlcl9pbmZvX3VucmVmIChEQnVzVXNlckluZm8gKmluZm8pCitfZGJ1c191c2VyX2luZm9fZnJlZV9hbGxvY2F0ZWQgKERCdXNVc2VySW5mbyAqaW5mbykKIHsKICAgaWYgKGluZm8gPT0gTlVMTCkgLyogaGFzaCB0YWJsZSB3aWxsIHBhc3MgTlVMTCAqLwogICAgIHJldHVybjsKIAotICBfZGJ1c19hc3NlcnQgKGluZm8tPnJlZmNvdW50ID4gMCk7Ci0gIF9kYnVzX2Fzc2VydCAoaW5mby0+cmVmY291bnQgPCBTSVpFX01BWCk7Ci0KLSAgaWYgKC0taW5mby0+cmVmY291bnQgPiAwKQotICAgIHJldHVybjsKLQogICBfZGJ1c191c2VyX2luZm9fZnJlZSAoaW5mbyk7CiAgIGRidXNfZnJlZSAoaW5mbyk7CiB9CiAKIC8qKgotICogRGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50LiBJZiBpdCByZWFjaGVzIDAsCi0gKiBmcmVlcyB0aGUgZ2l2ZW4gI0RCdXNHcm91cEluZm8ncyBtZW1iZXJzIHdpdGggX2RidXNfZ3JvdXBfaW5mb19mcmVlKCkKKyAqIEZyZWVzIHRoZSBnaXZlbiAjREJ1c0dyb3VwSW5mbydzIG1lbWJlcnMgd2l0aCBfZGJ1c19ncm91cF9pbmZvX2ZyZWUoKQogICogYW5kIGFsc28gY2FsbHMgZGJ1c19mcmVlKCkgb24gdGhlIGJsb2NrIGl0c2VsZgogICoKICAqIEBwYXJhbSBpbmZvIHRoZSBpbmZvCiAgKi8KIHZvaWQKLV9kYnVzX2dyb3VwX2luZm9fdW5yZWYgKERCdXNHcm91cEluZm8gKmluZm8pCitfZGJ1c19ncm91cF9pbmZvX2ZyZWVfYWxsb2NhdGVkIChEQnVzR3JvdXBJbmZvICppbmZvKQogewogICBpZiAoaW5mbyA9PSBOVUxMKSAvKiBoYXNoIHRhYmxlIHdpbGwgcGFzcyBOVUxMICovCiAgICAgcmV0dXJuOwogCi0gIF9kYnVzX2Fzc2VydCAoaW5mby0+cmVmY291bnQgPiAwKTsKLSAgX2RidXNfYXNzZXJ0IChpbmZvLT5yZWZjb3VudCA8IFNJWkVfTUFYKTsKLQotICBpZiAoLS1pbmZvLT5yZWZjb3VudCA+IDApCi0gICAgcmV0dXJuOwotCiAgIF9kYnVzX2dyb3VwX2luZm9fZnJlZSAoaW5mbyk7CiAgIGRidXNfZnJlZSAoaW5mbyk7CiB9CkBAIC0xNDUsOSArMTIyLDkgQEAKICAqIEBwYXJhbSB1aWQgdGhlIHVzZXIgSUQgb3IgI0RCVVNfVUlEX1VOU0VUCiAgKiBAcGFyYW0gdXNlcm5hbWUgdXNlcm5hbWUgb3IgI05VTEwgCiAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgdG8gZmlsbCBpbgotICogQHJldHVybnMgdGhlIGVudHJ5IGluIHRoZSBkYXRhYmFzZSAoYm9ycm93ZWQsIGRvIG5vdCBmcmVlKQorICogQHJldHVybnMgdGhlIGVudHJ5IGluIHRoZSBkYXRhYmFzZQogICovCi1jb25zdCBEQnVzVXNlckluZm8gKgorREJ1c1VzZXJJbmZvKgogX2RidXNfdXNlcl9kYXRhYmFzZV9sb29rdXAgKERCdXNVc2VyRGF0YWJhc2UgKmRiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfdWlkX3QgICAgICAgIHVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEQnVzU3RyaW5nICp1c2VybmFtZSwKQEAgLTE5MywxNCArMTcwLDEzIEBACiAgICAgICAgICAgZGJ1c19zZXRfZXJyb3IgKGVycm9yLCBEQlVTX0VSUk9SX05PX01FTU9SWSwgTlVMTCk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgIGluZm8tPnJlZmNvdW50ID0gMTsKIAogICAgICAgaWYgKHVpZCAhPSBEQlVTX1VJRF9VTlNFVCkKICAgICAgICAgewogICAgICAgICAgIGlmICghX2RidXNfdXNlcl9pbmZvX2ZpbGxfdWlkIChpbmZvLCB1aWQsIGVycm9yKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX1NFVCAoZXJyb3IpOwotICAgICAgICAgICAgICBfZGJ1c191c2VyX2luZm9fdW5yZWYgKGluZm8pOworICAgICAgICAgICAgICBfZGJ1c191c2VyX2luZm9fZnJlZV9hbGxvY2F0ZWQgKGluZm8pOwogICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjA5LDcgKzE4NSw3IEBACiAgICAgICAgICAgaWYgKCFfZGJ1c191c2VyX2luZm9fZmlsbCAoaW5mbywgdXNlcm5hbWUsIGVycm9yKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX0RCVVNfQVNTRVJUX0VSUk9SX0lTX1NFVCAoZXJyb3IpOwotICAgICAgICAgICAgICBfZGJ1c191c2VyX2luZm9fdW5yZWYgKGluZm8pOworICAgICAgICAgICAgICBfZGJ1c191c2VyX2luZm9fZnJlZV9hbGxvY2F0ZWQgKGluZm8pOwogICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjE5LDM1ICsxOTUsMjIgQEAKICAgICAgIHVzZXJuYW1lID0gTlVMTDsKIAogICAgICAgLyogaW5zZXJ0IGludG8gaGFzaCAqLwotICAgICAgaWYgKF9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3VpbnRwdHIgKGRiLT51c2VycywgaW5mby0+dWlkLCBpbmZvKSkKLSAgICAgICAgewotICAgICAgICAgIF9kYnVzX3VzZXJfaW5mb19yZWYgKGluZm8pOwotICAgICAgICB9Ci0gICAgICBlbHNlCisgICAgICBpZiAoIV9kYnVzX2hhc2hfdGFibGVfaW5zZXJ0X3VpbnRwdHIgKGRiLT51c2VycywgaW5mby0+dWlkLCBpbmZvKSkKICAgICAgICAgewogICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlksIE5VTEwpOwotICAgICAgICAgIF9kYnVzX3VzZXJfaW5mb191bnJlZiAoaW5mbyk7CisgICAgICAgICAgX2RidXNfdXNlcl9pbmZvX2ZyZWVfYWxsb2NhdGVkIChpbmZvKTsKICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICBpZiAoX2RidXNfaGFzaF90YWJsZV9pbnNlcnRfc3RyaW5nIChkYi0+dXNlcnNfYnlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnVzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbykpCi0gICAgICAgIHsKLSAgICAgICAgICBfZGJ1c191c2VyX2luZm9fcmVmIChpbmZvKTsKLSAgICAgICAgfQotICAgICAgZWxzZQorICAgICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9zdHJpbmcgKGRiLT51c2Vyc19ieV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8pKQogICAgICAgICB7CiAgICAgICAgICAgX2RidXNfaGFzaF90YWJsZV9yZW1vdmVfdWludHB0ciAoZGItPnVzZXJzLCBpbmZvLT51aWQpOwogICAgICAgICAgIGRidXNfc2V0X2Vycm9yIChlcnJvciwgREJVU19FUlJPUl9OT19NRU1PUlksIE5VTEwpOwotICAgICAgICAgIF9kYnVzX3VzZXJfaW5mb191bnJlZiAoaW5mbyk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLQotICAgICAgX2RidXNfdXNlcl9pbmZvX3VucmVmIChpbmZvKTsKLQotICAgICAgLyogUmV0dXJuIGEgYm9ycm93ZWQgcG9pbnRlciB0byB0aGUgREJ1c1VzZXJJbmZvIG93bmVkIGJ5IHRoZQotICAgICAgICogaGFzaCB0YWJsZXMgKi8KKyAgICAgIAogICAgICAgcmV0dXJuIGluZm87CiAgICAgfQogfQpAQCAtMjk3LDcgKzI2MCw3IEBACiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAvKiBUaGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbi4gKi8KLSAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBnZXQgcGFzc3dvcmQgZGF0YWJhc2UgaW5mb3JtYXRpb24gZm9yIFVJRCBvZiBjdXJyZW50IHByb2Nlc3M6ICVzIiwKKyAgICAgICAgICAgICAgX2RidXNfd2FybiAoIkNvdWxkIG5vdCBnZXQgcGFzc3dvcmQgZGF0YWJhc2UgaW5mb3JtYXRpb24gZm9yIFVJRCBvZiBjdXJyZW50IHByb2Nlc3M6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwogICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC01MDEsMTYgKzQ2NCw2IEBACiAgIERCdXNVc2VyRGF0YWJhc2UgKmRiOwogICBjb25zdCBEQnVzVXNlckluZm8gKmluZm87CiAKLSAgaWYgKHVpZCA9PSBfZGJ1c19nZXR1aWQgKCkgJiYgdWlkID09IF9kYnVzX2dldGV1aWQgKCkpCi0gICAgewotICAgICAgY29uc3QgY2hhciAqZnJvbV9lbnZpcm9ubWVudDsKLQotICAgICAgZnJvbV9lbnZpcm9ubWVudCA9IF9kYnVzX2dldGVudiAoIkhPTUUiKTsKLQotICAgICAgaWYgKGZyb21fZW52aXJvbm1lbnQgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIF9kYnVzX3N0cmluZ19hcHBlbmQgKGhvbWVkaXIsIGZyb21fZW52aXJvbm1lbnQpOwotICAgIH0KLQogICAvKiBGSVhNRTogdGhpcyBjYW4ndCBkaXN0aW5ndWlzaCBFTk9NRU0gZnJvbSBvdGhlciBlcnJvcnMgKi8KICAgaWYgKCFfZGJ1c191c2VyX2RhdGFiYXNlX2xvY2tfc3lzdGVtICgpKQogICAgIHJldHVybiBGQUxTRTsKQEAgLTYwNSwyNCArNTU4LDI0IEBACiAgIGRiLT5yZWZjb3VudCA9IDE7CiAKICAgZGItPnVzZXJzID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9VSU5UUFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKERCdXNGcmVlRnVuY3Rpb24pIF9kYnVzX3VzZXJfaW5mb191bnJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAoREJ1c0ZyZWVGdW5jdGlvbikgX2RidXNfdXNlcl9pbmZvX2ZyZWVfYWxsb2NhdGVkKTsKICAgCiAgIGlmIChkYi0+dXNlcnMgPT0gTlVMTCkKICAgICBnb3RvIGZhaWxlZDsKIAogICBkYi0+Z3JvdXBzID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9VSU5UUFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIChEQnVzRnJlZUZ1bmN0aW9uKSBfZGJ1c19ncm91cF9pbmZvX3VucmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAoREJ1c0ZyZWVGdW5jdGlvbikgX2RidXNfZ3JvdXBfaW5mb19mcmVlX2FsbG9jYXRlZCk7CiAgIAogICBpZiAoZGItPmdyb3VwcyA9PSBOVUxMKQogICAgIGdvdG8gZmFpbGVkOwogCiAgIGRiLT51c2Vyc19ieV9uYW1lID0gX2RidXNfaGFzaF90YWJsZV9uZXcgKERCVVNfSEFTSF9TVFJJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIChEQnVzRnJlZUZ1bmN0aW9uKSBfZGJ1c191c2VyX2luZm9fdW5yZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKICAgaWYgKGRiLT51c2Vyc19ieV9uYW1lID09IE5VTEwpCiAgICAgZ290byBmYWlsZWQ7CiAgIAogICBkYi0+Z3JvdXBzX2J5X25hbWUgPSBfZGJ1c19oYXNoX3RhYmxlX25ldyAoREJVU19IQVNIX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIChEQnVzRnJlZUZ1bmN0aW9uKSBfZGJ1c19ncm91cF9pbmZvX3VucmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwogICBpZiAoZGItPmdyb3Vwc19ieV9uYW1lID09IE5VTEwpCiAgICAgZ290byBmYWlsZWQ7CiAgIApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXVzZXJkYi5oIGIvZGJ1cy9kYnVzLXVzZXJkYi5oCmluZGV4IGIzOGUzZDEuLjUzZmM5MGIgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy11c2VyZGIuaAorKysgYi9kYnVzL2RidXMtdXNlcmRiLmgKQEAgLTc2LDE5ICs3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICAgICAgICAgICAqZXJyb3IpOwogCiBEQlVTX1BSSVZBVEVfRVhQT1JUCi1jb25zdCBEQnVzVXNlckluZm8gKl9kYnVzX3VzZXJfZGF0YWJhc2VfbG9va3VwICAoREJ1c1VzZXJEYXRhYmFzZSAqZGIsCitEQnVzVXNlckluZm8qICBfZGJ1c191c2VyX2RhdGFiYXNlX2xvb2t1cCAgICAgICAoREJ1c1VzZXJEYXRhYmFzZSAqZGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c191aWRfdCAgICAgICAgdWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERCdXNTdHJpbmcgKnVzZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgKmVycm9yKTsKIERCVVNfUFJJVkFURV9FWFBPUlQKLWNvbnN0IERCdXNHcm91cEluZm8qIF9kYnVzX3VzZXJfZGF0YWJhc2VfbG9va3VwX2dyb3VwIChEQnVzVXNlckRhdGFiYXNlICpkYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2dpZF90ICAgICAgICBnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c1N0cmluZyAqZ3JvdXBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJvciAgICAgICAgKmVycm9yKTsKLQotdm9pZCAgICAgICAgICAgX2RidXNfdXNlcl9pbmZvX3VucmVmICAgICAgICAgICAgKERCdXNVc2VySW5mbyAgICAgKmluZm8pOworREJ1c0dyb3VwSW5mbyogX2RidXNfdXNlcl9kYXRhYmFzZV9sb29rdXBfZ3JvdXAgKERCdXNVc2VyRGF0YWJhc2UgKmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRidXNfZ2lkX3QgICAgICAgIGdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEQnVzU3RyaW5nICpncm91cG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAgICAgICAqZXJyb3IpOwogREJVU19QUklWQVRFX0VYUE9SVAotdm9pZCAgICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb191bnJlZiAgICAgICAgICAgKERCdXNHcm91cEluZm8gICAgKmluZm8pOwordm9pZCAgICAgICAgICAgX2RidXNfdXNlcl9pbmZvX2ZyZWVfYWxsb2NhdGVkICAgKERCdXNVc2VySW5mbyAgICAgKmluZm8pOworREJVU19QUklWQVRFX0VYUE9SVAordm9pZCAgICAgICAgICAgX2RidXNfZ3JvdXBfaW5mb19mcmVlX2FsbG9jYXRlZCAgKERCdXNHcm91cEluZm8gICAgKmluZm8pOwogI2VuZGlmIC8qIERCVVNfVVNFUkRCX0lOQ0xVREVTX1BSSVZBVEUgKi8KIAogREJVU19QUklWQVRFX0VYUE9SVApkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXV1aWRnZW4uaCBiL2RidXMvZGJ1cy11dWlkZ2VuLmgKaW5kZXggNzAwM2YxNi4uNWU0YTk0OCAxMDA2NDQKLS0tIGEvZGJ1cy9kYnVzLXV1aWRnZW4uaAorKysgYi9kYnVzL2RidXMtdXVpZGdlbi5oCkBAIC0zNyw2ICszNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAqKnV1aWRfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgY3JlYXRlX2lmX25vdF9mb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAqZXJyb3IpOworZGJ1c19ib29sX3QgZGJ1c19pbnRlcm5hbF9kb19ub3RfdXNlX2Vuc3VyZV91dWlkIChjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICoqdXVpZF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQnVzRXJyb3IgICplcnJvcik7CiBEQlVTX1BSSVZBVEVfRVhQT1JUCiBkYnVzX2Jvb2xfdCBfZGJ1c19jcmVhdGVfdXVpZCAgICAgICAgICAgICAgICAgICAgKGNoYXIgICAgICAqKnV1aWRfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJ1c0Vycm9yICAqZXJyb3IpOwpkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLXdhdGNoLmMgYi9kYnVzL2RidXMtd2F0Y2guYwppbmRleCA5ODQyMjk2Li4wOTNmMTkzIDEwMDY0NAotLS0gYS9kYnVzL2RidXMtd2F0Y2guYworKysgYi9kYnVzL2RidXMtd2F0Y2guYwpAQCAtMzI2LDggKzMyNiw4IEBACiAgICAgICAgICAgICAgIGxpbmsyID0gX2RidXNfbGlzdF9nZXRfZmlyc3RfbGluayAoJndhdGNoX2xpc3QtPndhdGNoZXMpOwogICAgICAgICAgICAgICB3aGlsZSAobGluazIgIT0gbGluaykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBEQnVzTGlzdCAqbmV4dDIgPSBfZGJ1c19saXN0X2dldF9uZXh0X2xpbmsgKCZ3YXRjaF9saXN0LT53YXRjaGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rMik7CisgICAgICAgICAgICAgICAgICBEQnVzTGlzdCAqbmV4dCA9IF9kYnVzX2xpc3RfZ2V0X25leHRfbGluayAoJndhdGNoX2xpc3QtPndhdGNoZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluazIpOwogI2lmZGVmIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERQogICAgICAgICAgICAgICAgICAgREJ1c1dhdGNoICp3YXRjaDIgPSBsaW5rMi0+ZGF0YTsKICAgICAgICAgICAgICAgICAgIApAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICgqIHJlbW92ZV9mdW5jdGlvbikgKGxpbmsyLT5kYXRhLCBkYXRhKTsKICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgbGluazIgPSBuZXh0MjsKKyAgICAgICAgICAgICAgICAgIGxpbmsyID0gbmV4dDsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtNzM5LDcgKzczOSw3IEBACiAjaWZuZGVmIERCVVNfRElTQUJMRV9DSEVDS1MKICAgaWYgKCFfZGJ1c19wb2xsYWJsZV9pc192YWxpZCAod2F0Y2gtPmZkKSB8fCB3YXRjaC0+ZmxhZ3MgPT0gMCkKICAgICB7Ci0gICAgICBfZGJ1c193YXJuX2NoZWNrX2ZhaWxlZCAoIldhdGNoIGlzIGludmFsaWQsIGl0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCIpOworICAgICAgX2RidXNfd2Fybl9jaGVja19mYWlsZWQgKCJXYXRjaCBpcyBpbnZhbGlkLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWRcbiIpOwogICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kYnVzL2RidXMuaCBiL2RidXMvZGJ1cy5oCmluZGV4IDMxYWE0ZDEuLjkzMmNlYWIgMTAwNjQ0Ci0tLSBhL2RidXMvZGJ1cy5oCisrKyBiL2RidXMvZGJ1cy5oCkBAIC05MSw4ICs5MSw4IEBACiAgKiBUaGlzIG1hbnVhbCBhbHNvIGNvbnRhaW5zIGRvY3MgZm9yIEByZWYgREJ1c0ludGVybmFscyAiRC1CdXMgaW50ZXJuYWxzIiwKICAqIHNvIHlvdSBjYW4gdXNlIGl0IHRvIGdldCBvcmllbnRlZCB0byB0aGUgRC1CdXMgc291cmNlIGNvZGUgaWYgeW91J3JlCiAgKiBpbnRlcmVzdGVkIGluIHBhdGNoaW5nIHRoZSBjb2RlLiBZb3Ugc2hvdWxkIGFsc28gcmVhZCB0aGUKLSAqIGZpbGUgQ09OVFJJQlVUSU5HLm1kIHdoaWNoIGNvbWVzIHdpdGggdGhlIHNvdXJjZSBjb2RlIGlmIHlvdSBwbGFuIHRvCi0gKiBjb250cmlidXRlIHRvIEQtQnVzLgorICogZmlsZSBIQUNLSU5HIHdoaWNoIGNvbWVzIHdpdGggdGhlIHNvdXJjZSBjb2RlIGlmIHlvdSBwbGFuIHRvIGNvbnRyaWJ1dGUgdG8KKyAqIEQtQnVzLgogICoKICAqIEFzIHlvdSByZWFkIHRoZSBjb2RlLCB5b3UgY2FuIGlkZW50aWZ5IGludGVybmFsIEQtQnVzIGZ1bmN0aW9ucwogICogYmVjYXVzZSB0aGV5IHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZSAoJ18nKSBjaGFyYWN0ZXIuIEFsc28sIGFueQpkaWZmIC0tZ2l0IGEvZGJ1cy92ZXJzaW9uaW5mby5yYy5pbiBiL2RidXMvdmVyc2lvbmluZm8ucmMuaW4KaW5kZXggNGFmMmJlZS4uYjc0NWIzOSAxMDA2NDQKLS0tIGEvZGJ1cy92ZXJzaW9uaW5mby5yYy5pbgorKysgYi9kYnVzL3ZlcnNpb25pbmZvLnJjLmluCkBAIC0xMiw0MyArMTIsNDEgQEAKICAKIC8qIFRoaXMgZmlsZSBpcyBwcm9jZXNzZWQgYnkgY29uZmlndXJlIHRvIGNyZWF0ZSB2ZXJzaW9uaW5mby5yYyAqLwogCi0jaW5jbHVkZSA8d2luZG93cy5oPgorI2xpbmUgX19MSU5FX18gInZlcnNpb25pbmZvLnJjLmluIgorCisjaW5jbHVkZSA8YWZ4cmVzLmg+CisKIAogVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCiAgRklMRVZFUlNJT04gQEJVSUxEX0ZJTEVWRVJTSU9OQAogIFBST0RVQ1RWRVJTSU9OIEBCVUlMRF9GSUxFVkVSU0lPTkAKICBGSUxFRkxBR1NNQVNLIDB4M2ZMCiAjaWZkZWYgX0RFQlVHCi0gRklMRUZMQUdTIFZTX0ZGX0RFQlVHCisgRklMRUZMQUdTIDB4MjFMCiAjZWxzZQotIEZJTEVGTEFHUyAweDBMCisgRklMRUZMQUdTIDB4MjBMCiAjZW5kaWYKLSBGSUxFT1MgVk9TX19XSU5ET1dTMzIKLSBGSUxFVFlQRSBWRlRfRExMCisgRklMRU9TIDB4NDAwMDRMCisgRklMRVRZUEUgMHgxTAogIEZJTEVTVUJUWVBFIDB4MEwKIEJFR0lOCiAgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgIEJFR0lOCi0gICAgICAgIC8qIHN0cmluZyBuZWVkIHRvIG1hdGNoIGNvbmNhdGVkIGhleCB2YWx1ZXMgaW4gJ1ZhckZpbGVJbmZvJyBibG9jayAqLwotICAgICAgICBCTE9DSyAiMDQwOTA0ZTQiCisgICAgICAgIEJMT0NLICIwNDA5MDRiMCIKICAgICAgICAgQkVHSU4KLSAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJQcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSA+PSAyLjAgb3IgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4xXDAiCi0gICAgICAgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiZnJlZWRlc2t0b3Aub3JnXDAiCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiUHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXDAiCisgICAgICAgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiRnJlZURlc2t0b3Aub3JnXDAiCiAgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgImRidXMgLSBGcmVlRGVza3RvcCBtZXNzYWdlIGJ1cyBzeXN0ZW1cMCIKICAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICJAREJVU19WRVJTSU9OQFwwIgotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJkYnVzLTEtM1wwIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDE5OTQtMjAxNyBkYnVzIGNvbnRyaWJ1dG9ycywgc2VlIGRidXMgc291cmNlIGNvZGUgZm9yIGRldGFpbHNcMCIKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiZGJ1c1wwIgorICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMDkgRnJlZURlc2t0b3Aub3JnXDAiCiAgICAgICAgICAgICBWQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlwwIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZGJ1cy0xLTMuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJkYnVzLTEuZGxsXDAiCisgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlwwIgogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgImRidXNcMCIKICAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICJAREJVU19WRVJTSU9OQFwwIgogICAgICAgICAgICAgVkFMVUUgIlNwZWNpYWxCdWlsZCIsICJAQlVJTERfVElNRVNUQU1QQFwwIgogICAgICAgICBFTkQKICAgICBFTkQKLSAgICBCTE9DSyAiVmFyRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAgLyogc3VwcG9ydHMgRW5nbGlzaCBsYW5ndWFnZSAoMHg0MDkpIGluIHRoZSBXaW5kb3dzIEFOU0kgY29kZXBhZ2UgKDEyNTIpLiAqLwotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTI1MgotICAgIEVORAogRU5ECiAKZGlmZiAtLWdpdCBhL2RvYy8uZ2l0aWdub3JlIGIvZG9jLy5naXRpZ25vcmUKaW5kZXggNmJjODI4Ni4uMWFmZTAxNCAxMDA2NDQKLS0tIGEvZG9jLy5naXRpZ25vcmUKKysrIGIvZG9jLy5naXRpZ25vcmUKQEAgLTIsMjkgKzIsMTcgQEAKIC5saWJzCiBNYWtlZmlsZQogTWFrZWZpbGUuaW4KLSouMQotKi4xLnhtbAogKi4xLmh0bWwKICoubG8KICoubGEKICoubwogYXBpCiBkYnVzLmRldmhlbHAKLS9kYnVzLmRldmhlbHAyCiBkYnVzLXNwZWNpZmljYXRpb24uaHRtbAogZGJ1cy10ZXN0LXBsYW4uaHRtbAogZGJ1cy10dXRvcmlhbC5odG1sCiBkYnVzLWZhcS5odG1sCitkYnVzLWRhZW1vbi4xCiBkYnVzLWRvY3MKIGRidXMtZG9jcy50YXIuZ3oKIGRveHlnZW4uc3RhbXAKLWRidXMtYXBpLWRlc2lnbi5wYWdlCi1kYnVzLWFwaS1kZXNpZ24uaHRtbAotL2hpZ2hsaWdodC5wYWNrLmpzCi1qcXVlcnkuanMKLWpxdWVyeS5zeW50YXguYnJ1c2guaHRtbC5qcwotanF1ZXJ5LnN5bnRheC5jb3JlLmpzCi1qcXVlcnkuc3ludGF4LmpzCi1qcXVlcnkuc3ludGF4LmxheW91dC55ZWxwLmpzCi15ZWxwLmpzCi1DLmNzcwpkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCmluZGV4IDk3ZGZhOWEuLjhiYzg1YzUgMTAwNjQ0Ci0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysgYi9kb2MvTWFrZWZpbGUuYW0KQEAgLTIwLDggKzIwLDcgQEAKIAogTUFOX0hUTUxfRklMRVMgPSAkKHBhdHN1YnN0ICUuMSwlLjEuaHRtbCwkKG1hbl9wYWdlcykpCiAKLWR0ZGRpciA9ICQoZGF0YWRpcikveG1sL2RidXMtMQotZGlzdF9kdGRfREFUQSA9IFwKK0RURFMgPSBcCiAJYnVzY29uZmlnLmR0ZCBcCiAJaW50cm9zcGVjdC5kdGQKIApAQCAtMzUsNyArMzQsOCBAQAogCWRidXMtdHV0b3JpYWwueG1sIFwKIAlkYnVzLWFwaS1kZXNpZ24uZHVjayBcCiAJZGNvcC1ob3d0by50eHQgXAotCWludHJvc3BlY3QueHNsCisJaW50cm9zcGVjdC54c2wgXAorCSQoRFREUykKIAogRVhUUkFfRElTVCA9IFwKIAlmaWxlLWJvaWxlcnBsYXRlLmMgXApAQCAtNTcsNyArNTcsNiBAQAogWUVMUF9TVEFUSUNfSFRNTCA9IFwKIAl5ZWxwLmpzIFwKIAlDLmNzcyBcCi0JaGlnaGxpZ2h0LnBhY2suanMgXAogCWpxdWVyeS5qcyBcCiAJanF1ZXJ5LnN5bnRheC5qcyBcCiAJanF1ZXJ5LnN5bnRheC5icnVzaC5odG1sLmpzIFwKQEAgLTk4LDE0ICs5NywxNCBAQAogCUB0b3VjaCAkQAogCiBpZiBEQlVTX0hBVkVfWFNMVFBST0MKLWh0bWxfREFUQSArPSBkYnVzLmRldmhlbHAyCitodG1sX0RBVEEgKz0gZGJ1cy5kZXZoZWxwCiAKLWRidXMuZGV2aGVscDI6ICQoc3JjZGlyKS9kb3h5Z2VuX3RvX2RldmhlbHAueHNsIGRveHlnZW4uc3RhbXAKK2RidXMuZGV2aGVscDogJChzcmNkaXIpL2RveHlnZW5fdG9fZGV2aGVscC54c2wgZG94eWdlbi5zdGFtcAogCSQoWFNMVFBST0MpIC1vICRAICQ8IGFwaS94bWwvaW5kZXgueG1sCiBlbmRpZgogCiBpZiBEQlVTX0RVQ0tUWVBFX0RPQ1NfRU5BQkxFRAotaHRtbF9EQVRBICs9ICQoWUVMUF9IVE1MKQoraHRtbF9EQVRBICs9ICQoWUVMUF9IVE1MKSAkKFlFTFBfU1RBVElDX0hUTUwpCiAKICUucGFnZTogJS5kdWNrCiAJJChEVUNLVFlQRSkgLW8gJEAgJDwKQEAgLTExOSwyMSArMTE4LDEyIEBACiBpbnN0YWxsLWRhdGEtbG9jYWw6OiBkb3h5Z2VuLnN0YW1wCiAJJChNS0RJUl9QKSAkKERFU1RESVIpJChhcGlkaXIpCiAJJChJTlNUQUxMX0RBVEEpIGFwaS9odG1sLyogJChERVNURElSKSQoYXBpZGlyKQotaWYgREJVU19EVUNLVFlQRV9ET0NTX0VOQUJMRUQKLQkkKEFNX1ZfYXQpZm9yIHggaW4gJChZRUxQX1NUQVRJQ19IVE1MKTsgZG8gXAotCQlpZiB0ZXN0IC1lICIkJHgiOyB0aGVuIFwKLQkJCSQoSU5TVEFMTF9EQVRBKSAiJCR4IiAkKERFU1RESVIpJChodG1sZGlyKTsgXAotCQlmaTsgXAotCWRvbmUKLWVuZGlmCiAKIHVuaW5zdGFsbC1sb2NhbDo6CiAJcm0gLWYgJChERVNURElSKSQoYXBpZGlyKS8qLmh0bWwKIAlybSAtZiAkKERFU1RESVIpJChhcGlkaXIpLyoucG5nCiAJcm0gLWYgJChERVNURElSKSQoYXBpZGlyKS8qLmNzcwogCXJtIC1mICQoREVTVERJUikkKGFwaWRpcikvKi5qcwotCXJtIC1mICQoREVTVERJUikkKGh0bWxkaXIpLyouY3NzCi0Jcm0gLWYgJChERVNURElSKSQoaHRtbGRpcikvKi5qcwogCXJtIC1mICQoREVTVERJUikkKGh0bWxkaXIpLyouaHRtbAogCXJtIC1mICQoREVTVERJUikkKGRvY2RpcikvKi50eHQKIAlybSAtZiAkKERFU1RESVIpJChodG1sZGlyKS8qLnBuZwpAQCAtMTQ1LDI2ICsxMzUsMjEgQEAKIGlmIERCVVNfQ0FOX1VQTE9BRF9ET0NTCiBCT05VU19GSUxFUyA9IFwKIAkkKHRvcF9zcmNkaXIpL1JFQURNRSBcCi0JJCh0b3Bfc3JjZGlyKS9DT05UUklCVVRJTkcubWQgXAorCSQodG9wX3NyY2RpcikvSEFDS0lORyBcCiAJJCh0b3Bfc3JjZGlyKS9BVVRIT1JTIFwKIAkkKHRvcF9zcmNkaXIpL05FV1MgXAogCSQodG9wX3NyY2RpcikvQ09QWUlORyBcCiAJJCh0b3Bfc3JjZGlyKS9DaGFuZ2VMb2cKIAotZGJ1cy1kb2NzOiAkKFNUQVRJQ19ET0NTKSAkKGRpc3RfZHRkX0RBVEEpICQoTUFOX1hNTF9GSUxFUykgJChkaXN0X2RvY19EQVRBKSAkKGRpc3RfaHRtbF9EQVRBKSAkKE1BTl9IVE1MX0ZJTEVTKSAkKEJPTlVTX0ZJTEVTKSBkb3h5Z2VuLnN0YW1wICQoWE1MVE9fSFRNTCkgJChZRUxQX0hUTUwpCitkYnVzLWRvY3M6ICQoU1RBVElDX0RPQ1MpICQoTUFOX1hNTF9GSUxFUykgJChkaXN0X2RvY19EQVRBKSAkKGRpc3RfaHRtbF9EQVRBKSAkKE1BTl9IVE1MX0ZJTEVTKSAkKEJPTlVTX0ZJTEVTKSBkb3h5Z2VuLnN0YW1wICQoWE1MVE9fSFRNTCkgJChZRUxQX0hUTUwpICQoWUVMUF9TVEFUSUNfSFRNTCkKIAkkKEFNX1ZfYXQpcm0gLXJmICRAICRALnRtcAogCSQoQU1fVl9HRU4pJChNS0RJUl9QKSAkQC50bXAvYXBpCiAJJChBTV9WX2F0KWNkICQoc3JjZGlyKSAmJiBjcCAkKFNUQVRJQ19ET0NTKSBAYWJzX2J1aWxkZGlyQC8kQC50bXAKLQkkKEFNX1ZfYXQpY2QgJChzcmNkaXIpICYmIGNwICQoZGlzdF9kdGRfREFUQSkgQGFic19idWlsZGRpckAvJEAudG1wCiAJJChBTV9WX2F0KWNkICQoc3JjZGlyKSAmJiBjcCAkKGRpc3RfZG9jX0RBVEEpIEBhYnNfYnVpbGRkaXJALyRALnRtcAogCSQoQU1fVl9hdCljZCAkKHNyY2RpcikgJiYgY3AgJChTVEFUSUNfSFRNTCkgQGFic19idWlsZGRpckAvJEAudG1wCiAJJChBTV9WX2F0KWNwICQoWE1MVE9fSFRNTCkgQGFic19idWlsZGRpckAvJEAudG1wCiAJJChBTV9WX2F0KWNwICQoWUVMUF9IVE1MKSBAYWJzX2J1aWxkZGlyQC8kQC50bXAKLQkkKEFNX1ZfYXQpZm9yIHggaW4gJChZRUxQX1NUQVRJQ19IVE1MKTsgZG8gXAotCQlpZiB0ZXN0IC1lICIkJHgiOyB0aGVuIFwKLQkJCWNwICIkJHgiIEBhYnNfYnVpbGRkaXJALyRALnRtcDsgXAotCQlmaTsgXAotCWRvbmUKKwkkKEFNX1ZfYXQpY3AgJChZRUxQX1NUQVRJQ19IVE1MKSBAYWJzX2J1aWxkZGlyQC8kQC50bXAKIAkkKEFNX1ZfYXQpY3AgJChNQU5fSFRNTF9GSUxFUykgQGFic19idWlsZGRpckAvJEAudG1wCiAJJChBTV9WX2F0KWNwICQoTUFOX1hNTF9GSUxFUykgQGFic19idWlsZGRpckAvJEAudG1wCiAJJChBTV9WX2F0KWNwICQoQk9OVVNfRklMRVMpIEBhYnNfYnVpbGRkaXJALyRALnRtcApAQCAtMTg0LDExICsxNjksMTIgQEAKIAlzY3AgZGJ1cy1kb2NzLnRhci5neiAkKERPQ19TRVJWRVIpOiQoRE9DX1dXV19ESVIpLwogCXJzeW5jIC1ycHZ6UCAtLWNobW9kPURnK3MsdWcrcndYLG89clggXAogCQlkYnVzLWRvY3MvICQoRE9DX1NFUlZFUik6JChET0NfV1dXX0RJUikvZG9jLwotCWNkICQoc3JjZGlyKSAmJiBzY3AgLXAgJChkaXN0X2R0ZF9EQVRBKSAkKFNQRUNJRklDQVRJT05fU0VSVkVSKTokKFNQRUNJRklDQVRJT05fUEFUSCkvCisJY2QgJChzcmNkaXIpICYmIHNjcCAtcCAkKERURFMpICQoU1BFQ0lGSUNBVElPTl9TRVJWRVIpOiQoU1BFQ0lGSUNBVElPTl9QQVRIKS8KIGVsc2UKIG1haW50YWluZXItdXBsb2FkLWRvY3M6CiAJQGVjaG8gIkNhbid0IHVwbG9hZCBkb2N1bWVudGF0aW9uISBSZS1ydW4gY29uZmlndXJlIHdpdGgiCiAJQGVjaG8gIiAgLS1lbmFibGUtZG94eWdlbi1kb2NzIC0tZW5hYmxlLXhtbC1kb2NzIC0tZW5hYmxlLWR1Y2t0eXBlLWRvY3MiCisJQGVjaG8gImFuZCBlbnN1cmUgdGhhdCBtYW4yaHRtbCBpcyBpbnN0YWxsZWQuIgogCUBmYWxzZQogZW5kaWYKIApkaWZmIC0tZ2l0IGEvZG9jL2RidXMtYXBpLWRlc2lnbi5kdWNrIGIvZG9jL2RidXMtYXBpLWRlc2lnbi5kdWNrCmluZGV4IDgyYTM2ODcuLmJlM2VhOWYgMTAwNjQ0Ci0tLSBhL2RvYy9kYnVzLWFwaS1kZXNpZ24uZHVjaworKysgYi9kb2MvZGJ1cy1hcGktZGVzaWduLmR1Y2sKQEAgLTYwLDEyICs2MCwxMiBAQAogc3BlY2lmaWNhdGlvbiksIGFuZCBpcyBzdXBwb3J0ZWQgYnkgdG9vbHMgc3VjaCBhcyAkY21kKGdkYnVzLWNvZGVnZW4pLgogCiBJbnRlcmZhY2UgZmlsZXMgZm9yIHB1YmxpYyBBUEkgc2hvdWxkIGJlIGluc3RhbGxlZCB0bwotJGNvZGUoJHZhcigkJChkYXRhZGlyKSkvZGJ1cy0xL2ludGVyZmFjZXMpIHNvIHRoYXQgb3RoZXIgc2VydmljZXMgY2FuIGxvYWQKKyRjb2RlKCR2YXIoJCQoZGF0YWRpciQpKS9kYnVzLTEvaW50ZXJmYWNlcykgc28gdGhhdCBvdGhlciBzZXJ2aWNlcyBjYW4gbG9hZAogdGhlbS4gUHJpdmF0ZSBBUElzIHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLiBUaGVyZSBzaG91bGQgYmUgb25lIGZpbGUgaW5zdGFsbGVkCiBwZXIgRC1CdXMgaW50ZXJmYWNlLCBuYW1lZCBhZnRlciB0aGUgaW50ZXJmYWNlLCBjb250YWluaW5nIGEgc2luZ2xlIHRvcC1sZXZlbAogJGNvZGUoPG5vZGU+KSBlbGVtZW50IHdpdGggYSBzaW5nbGUgJGNvZGUoPGludGVyZmFjZT4pIGJlbmVhdGggaXQuIEZvciBleGFtcGxlLAogaW50ZXJmYWNlICRjb2RlKGNvbS5leGFtcGxlLk15U2VydmljZTEuTWFuYWdlcikgd291bGQgYmUgZGVzY3JpYmVkIGJ5IGZpbGUKLSRmaWxlKCR2YXIoJCQoZGF0YWRpcikpL2RidXMtMS9pbnRlcmZhY2VzL2NvbS5leGFtcGxlLk15U2VydmljZTEuTWFuYWdlci54bWwpOgorJGZpbGUoJHZhcigkJChkYXRhZGlyJCkpL2RidXMtMS9pbnRlcmZhY2VzL2NvbS5leGFtcGxlLk15U2VydmljZTEuTWFuYWdlci54bWwpOgogCiBbbGlzdGluZ10KICAgW3RpdGxlXQpAQCAtMTg5LDE2ICsxODksMTYgQEAKIGNhbGwsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhcyBtYW55IGNhbGxzIGFzIGVsZW1lbnRzIGluIHRoZSBkYXRhIHNldC4KIAogQ29uc2lkZXIgYW4gYWRkcmVzcyBib29rIEFQSSwgJGNvZGUoY29tLmV4YW1wbGUuTXlTZXJ2aWNlMS5BZGRyZXNzQm9vaykuIEl0Ci1taWdodCBoYXZlIGFuICRjb2RlKEFkZENvbnRhY3Qoc3MpIOKGkiAodSkpIG1ldGhvZCB0byBhZGQgYSBjb250YWN0ICh0YWtpbmcgbmFtZQorbWlnaHQgaGF2ZSBhbiAkY29kZShBZGRDb250YWN0KHNzJCkg4oaSICh1JCkpIG1ldGhvZCB0byBhZGQgYSBjb250YWN0ICh0YWtpbmcgbmFtZQogYW5kIGUtbWFpbCBhZGRyZXNzIHBhcmFtZXRlcnMgYW5kIHJldHVybmluZyBhIHVuaXF1ZSBjb250YWN0IElEKSwgYW5kIGEKLSRjb2RlKFJlbW92ZUNvbnRhY3QodSkpIG1ldGhvZCB0byByZW1vdmUgb25lIGJ5IElELiBJbiB0aGUgbm9ybWFsIGNhc2Ugb2YKKyRjb2RlKFJlbW92ZUNvbnRhY3QodSQpKSBtZXRob2QgdG8gcmVtb3ZlIG9uZSBieSBJRC4gSW4gdGhlIG5vcm1hbCBjYXNlIG9mCiBvcGVyYXRpbmcgb24gc2luZ2xlIGNvbnRhY3RzIGluIHRoZSBhZGRyZXNzIGJvb2ssIHRoZXNlIGNhbGxzIGFyZSBvcHRpbWFsLgogSG93ZXZlciwgaWYgdGhlIHVzZXIgd2FudHMgdG8gaW1wb3J0IGEgbGlzdCBvZiBjb250YWN0cywgb3IgZGVsZXRlIG11bHRpcGxlCiBjb250YWN0cyBzaW11bHRhbmVvdXNseSwgb25lIGNhbGwgaGFzIHRvIGJlIG1hZGUgcGVyIGNvbnRhY3Qg4oCUIHRoaXMgY291bGQgdGFrZQogYSBsb25nIHRpbWUgZm9yIGxhcmdlIGNvbnRhY3QgbGlzdHMuCiAKIEluc3RlYWQgb2YgdGhlICRjb2RlKEFkZENvbnRhY3QpIGFuZCAkY29kZShSZW1vdmVDb250YWN0KSBtZXRob2RzLCB0aGUgaW50ZXJmYWNlCi1jb3VsZCBoYXZlIGFuICRjb2RlKFVwZGF0ZUNvbnRhY3RzKGEoc3MpYXUpIOKGkiAoYXUpKSBtZXRob2QsIHdoaWNoIHRha2VzIGFuIGFycmF5Citjb3VsZCBoYXZlIGFuICRjb2RlKFVwZGF0ZUNvbnRhY3RzKGEoc3MkKWF1JCkg4oaSIChhdSQpKSBtZXRob2QsIHdoaWNoIHRha2VzIGFuIGFycmF5CiBvZiBzdHJ1Y3RzIGNvbnRhaW5pbmcgdGhlIG5ldyBjb250YWN0c+KAmSBkZXRhaWxzLCBhbmQgYW4gYXJyYXkgb2YgSURzIG9mIHRoZQogY29udGFjdHMgdG8gZGVsZXRlLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBuZXcgY29udGFjdHMuIFRoaXMKIHJlZHVjZXMgdGhlIG51bWJlciBvZiByb3VuZCB0cmlwcyBuZWVkZWQgdG8gb25lLgpAQCAtNDc5LDE4ICs0NzksMTggQEAKICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlCiAgICRjb2RlKGNvbS5leGFtcGxlLk15U2VydmljZTEuU29tZUludGVyZmFjZSkgd2l0aCBtZXRob2RzOgogICBbbGlzdF0KLSAgKiAkY29kZShHZXROYW1lKCkg4oaSIChzKSkKLSAgKiAkY29kZShTZXROYW1lKHMpIOKGkiAoKSkKLSAgKiAkY29kZShHZXRTdGF0dXMoKSDihpIgKHUpKQotICAqICRjb2RlKFJ1bk9wZXJhdGlvbihzcykg4oaSICh1KSkKKyAgKiAkY29kZShHZXROYW1lKCQpIOKGkiAocyQpKQorICAqICRjb2RlKFNldE5hbWUocyQpIOKGkiAoJCkpCisgICogJGNvZGUoR2V0U3RhdHVzKCQpIOKGkiAodSQpKQorICAqICRjb2RlKFJ1bk9wZXJhdGlvbihzcyQpIOKGkiAodSQpKQogICBhbmQgc2lnbmFsczoKICAgW2xpc3RdCi0gICogJGNvZGUoTmFtZUNoYW5nZWQodSkpCi0gICogJGNvZGUoU3RhdHVzQ2hhbmdlZCh1KSkKKyAgKiAkY29kZShOYW1lQ2hhbmdlZCh1JCkpCisgICogJGNvZGUoU3RhdHVzQ2hhbmdlZCh1JCkpCiAKICAgVGhlIGludGVyZmFjZSBjb3VsZCBiZSBjdXQgZG93biB0byBhIHNpbmdsZSBtZXRob2Q6CiAgIFtsaXN0XQotICAqICRjb2RlKFJ1bk9wZXJhdGlvbihzcykg4oaSICh1KSkKKyAgKiAkY29kZShSdW5PcGVyYXRpb24oc3MkKSDihpIgKHUkKSkKICAgVGhlIG9iamVjdCBjb3VsZCB0aGVuIGltcGxlbWVudCB0aGUgJGNvZGUob3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcykKICAgaW50ZXJmYWNlIGFuZCBkZWZpbmUgcHJvcGVydGllczoKICAgW2xpc3RdCkBAIC01MjIsMTEgKzUyMiwxMSBAQAogICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYW4gb2JqZWN0IGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2UKICAgJGNvZGUoY29tLmV4YW1wbGUuTXlTZXJ2aWNlMS5BZGRyZXNzQm9va01hbmFnZXIpIHdpdGggbWV0aG9kczoKICAgW2xpc3RdCi0gICogJGNvZGUoR2V0QWRkcmVzc0Jvb2tzKCkg4oaSIChhbykpCisgICogJGNvZGUoR2V0QWRkcmVzc0Jvb2tzKCQpIOKGkiAoYW8kKSkKICAgYW5kIHNpZ25hbHM6CiAgIFtsaXN0XQotICAqICRjb2RlKEFkZHJlc3NCb29rQWRkZWQobykpCi0gICogJGNvZGUoQWRkcmVzc0Jvb2tSZW1vdmVkKG8pKQorICAqICRjb2RlKEFkZHJlc3NCb29rQWRkZWQobyQpKQorICAqICRjb2RlKEFkZHJlc3NCb29rUmVtb3ZlZChvJCkpCiAKICAgSWYgdGhlIG1hbmFnZXIgb2JqZWN0IGlzIGF0IHBhdGgKICAgJGNvZGUoL2NvbS9leGFtcGxlL015U2VydmljZTEvQWRkcmVzc0Jvb2tNYW5hZ2VyKSwgZWFjaCBhZGRyZXNzIGJvb2sgaXMgYQpAQCAtODAyLDggKzgwMiw4IEBACiBTZXJ2aWNlIGZpbGVzIG11c3QgYmUgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2XigJlzIHdlbGwta25vd24gbmFtZSwgZm9yIGV4YW1wbGUKIGZpbGUgJGZpbGUoY29tLmV4YW1wbGUuTXlTZXJ2aWNlMS5zZXJ2aWNlKSBmb3Igd2VsbC1rbm93biBuYW1lCiAkY29kZShjb20uZXhhbXBsZS5NeVNlcnZpY2UxKS4gRmlsZXMgbXVzdCBiZSBpbnN0YWxsZWQgaW4KLSRmaWxlKCR2YXIoJCQoZGF0YWRpcikpL2RidXMtMS9zZXJ2aWNlcykgZm9yIHRoZSBzZXNzaW9uIGJ1cyBhbmQKLSRmaWxlKCR2YXIoJCQoZGF0YWRpcikpL2RidXMtMS9zeXN0ZW0tc2VydmljZXMpIGZvciB0aGUgc3lzdGVtIGJ1cy4gTm90ZSwgaG93ZXZlciwKKyRmaWxlKCR2YXIoJCQoZGF0YWRpciQpKS9kYnVzLTEvc2VydmljZXMpIGZvciB0aGUgc2Vzc2lvbiBidXMgYW5kCiskZmlsZSgkdmFyKCQkKGRhdGFkaXIkKSkvZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcykgZm9yIHRoZSBzeXN0ZW0gYnVzLiBOb3RlLCBob3dldmVyLAogdGhhdCBzZXJ2aWNlcyBvbiB0aGUgc3lzdGVtIGJ1cyBhbG1vc3QgYWx3YXlzIG5lZWQgYQogJGxpbmtbPiNzZWN1cml0eS1wb2xpY2llc10oc2VjdXJpdHkgcG9saWN5KSBhcyB3ZWxsLgogCkBAIC04MjYsMTAgKzgyNiw4IEBACiBzZWN1cml0eSBwb2xpY3kgaW1wbGVtZW50YXRpb24uCiAKIEQtQnVzIHNlY3VyaXR5IHBvbGljaWVzIGFyZSB3cml0dGVuIGFzIFhNTCBmaWxlcyBpbgotJGZpbGUoJHZhcigkJChkYXRhZGlyKS9kYnVzLTEvc3lzdGVtLmQpKSwKLSRmaWxlKCR2YXIoJCQoZGF0YWRpcikvZGJ1cy0xL3Nlc3Npb24uZCkpLAotJGZpbGUoJHZhcigkJChzeXNjb25mZGlyKS9kYnVzLTEvc3lzdGVtLmQpKSBhbmQKLSRmaWxlKCR2YXIoJCQoc3lzY29uZmRpcikvZGJ1cy0xL3Nlc3Npb24uZCkpIGFuZCB1c2UgYW4gYWxsb3cvZGVueSBtb2RlbCwgd2hlcmUKKyRmaWxlKCR2YXIoJCQoc3lzY29uZmRpciQpL2RidXMtMS9zeXN0ZW0uZCkpIGFuZAorJGZpbGUoJHZhcigkJChzeXNjb25mZGlyJCkvZGJ1cy0xL3Nlc3Npb24uZCkpIGFuZCB1c2UgYW4gYWxsb3cvZGVueSBtb2RlbCwgd2hlcmUKIGVhY2ggbWVzc2FnZSAobWV0aG9kIGNhbGwsIHNpZ25hbCBlbWlzc2lvbiwgZXRjLikgY2FuIGJlIGFsbG93ZWQgb3IgZGVuaWVkCiBhY2NvcmRpbmcgdG8gdGhlIHN1bSBvZiBhbGwgcG9saWN5IHJ1bGVzIHdoaWNoIG1hdGNoIGl0LiBFYWNoICRjb2RlKDxhbGxvdz4pIG9yCiAkY29kZSg8ZGVueT4pIHJ1bGUgaW4gdGhlIHBvbGljeSBzaG91bGQgaGF2ZSB0aGUgJGNvZGUob3duKSwKQEAgLTgzOCwxMCArODM2LDcgQEAKIFdoZW4gZGVzaWduaW5nIGFuIEFQSSwgYmVhciBpbiBtaW5kIHRoZSBuZWVkIHRvIHdyaXRlIGFuZCBpbnN0YWxsIHN1Y2ggYQogc2VjdXJpdHkgcG9saWN5LCBhbmQgY29uc2lkZXIgc3BsaXR0aW5nIHVwIG1ldGhvZHMgb3IgcHJvdmlkaW5nIG1vcmUgcmVzdHJpY3RlZAogdmVyc2lvbnMgd2hpY2ggYWNjZXB0IGNvbnN0cmFpbmVkIHBhcmFtZXRlcnMsIHNvIHRoYXQgdGhleSBjYW4gYmUgZXhwb3NlZCB3aXRoCi1sZXNzIHJlc3RyaWN0aXZlIHNlY3VyaXR5IHBvbGljaWVzIGlmIG5lZWRlZCBieSBsZXNzIHRydXN0ZWQgY2xpZW50cy4gU2luY2UKLWRidXMtZGFlbW9uIDEuMTAsIHNlY3VyaXR5IHBvbGljaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8KLSRmaWxlKCR2YXIoJCQoZGF0YWRpcikpKSByYXRoZXIgdGhhbiAkKGZpbGUoJHZhcigkJChzeXNjb25mZGlyKSkpOyB0aGUgbGF0dGVyCi1pcyBpbnRlbmRlZCBmb3Igc3lzdGVtIGFkbWluaXN0YXRvcnMuCitsZXNzIHJlc3RyaWN0aXZlIHNlY3VyaXR5IHBvbGljaWVzIGlmIG5lZWRlZCBieSBsZXNzIHRydXN0ZWQgY2xpZW50cy4KIAogU2Vjb25kbHksIHRoZSBkZWZhdWx0IEQtQnVzIHNlY3VyaXR5IHBvbGljeSBmb3IgdGhlIHN5c3RlbSBidXMgaXMgcmVzdHJpY3RpdmUKIGVub3VnaCB0byBhbGxvdyBzZW5zaXRpdmUgZGF0YSwgc3VjaCBhcyBwYXNzd29yZHMsIHRvIGJlIHNhZmVseSBzZW50IG92ZXIgdGhlCmRpZmYgLS1naXQgYS9kb2MvZGJ1cy1kYWVtb24uMS54bWwuaW4gYi9kb2MvZGJ1cy1kYWVtb24uMS54bWwuaW4KaW5kZXggYjZjZGEyZi4uZGY2N2E5MCAxMDA2NDQKLS0tIGEvZG9jL2RidXMtZGFlbW9uLjEueG1sLmluCisrKyBiL2RvYy9kYnVzLWRhZW1vbi4xLnhtbC5pbgpAQCAtMjksOSArMjksNiBAQAogICAgIDxhcmcgY2hvaWNlPSdvcHQnPjxhcmcgY2hvaWNlPSdwbGFpbic+LS1wcmludC1hZGRyZXNzIDwvYXJnPjxhcmcgY2hvaWNlPSdvcHQnPjxyZXBsYWNlYWJsZT49REVTQ1JJUFRPUjwvcmVwbGFjZWFibGU+PC9hcmc+PC9hcmc+CiAgICAgPGFyZyBjaG9pY2U9J29wdCc+PGFyZyBjaG9pY2U9J3BsYWluJz4tLXByaW50LXBpZCA8L2FyZz48YXJnIGNob2ljZT0nb3B0Jz48cmVwbGFjZWFibGU+PURFU0NSSVBUT1I8L3JlcGxhY2VhYmxlPjwvYXJnPjwvYXJnPgogICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tZm9yayA8L2FyZz4KLSAgICA8YXJnIGNob2ljZT0nb3B0Jz4tLW5vc3lzbG9nIDwvYXJnPgotICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tc3lzbG9nIDwvYXJnPgotICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tc3lzbG9nLW9ubHkgPC9hcmc+CiAgICAgPHNici8+CiA8L2NtZHN5bm9wc2lzPgogPC9yZWZzeW5vcHNpc2Rpdj4KQEAgLTE0OCwxMCArMTQ1LDggQEAKICAgPHZhcmxpc3RlbnRyeT4KICAgPHRlcm0+PG9wdGlvbj4tLWFkZHJlc3NbPUFERFJFU1NdPC9vcHRpb24+PC90ZXJtPgogICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+U2V0IHRoZSBhZGRyZXNzIHRvIGxpc3RlbiBvbi4gVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoZSBhZGRyZXNzCi0gICAgICBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdmlhIHRoZQotICAgICAgPGxpdGVyYWw+Jmx0O2xpc3RlbiZndDs8L2xpdGVyYWw+IGRpcmVjdGl2ZS4KLSAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGRpcmVjdGl2ZSBmb3IgbW9yZSBkZXRhaWxzLjwvcGFyYT4KKzxwYXJhPlNldCB0aGUgYWRkcmVzcyB0byBsaXN0ZW4gb24uIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGUgYWRkcmVzcworY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLjwvcGFyYT4KICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAgIDx2YXJsaXN0ZW50cnk+CkBAIC0xNjksMzYgKzE2NCw2IEBACiAKICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgPHZhcmxpc3RlbnRyeT4KLSAgICA8dGVybT48b3B0aW9uPi0tc3lzbG9nPC9vcHRpb24+PC90ZXJtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPkZvcmNlIHRoZSBtZXNzYWdlIGJ1cyB0byB1c2UgdGhlIHN5c3RlbSBsb2cgZm9yIG1lc3NhZ2VzLAotICAgICAgICBpbiBhZGRpdGlvbiB0byB3cml0aW5nIHRvIHN0YW5kYXJkIGVycm9yLCBldmVuIGlmIHRoZSBjb25maWd1cmF0aW9uCi0gICAgICAgIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSB0aGF0IGl0IHNob3VsZC4gT24gVW5peCwgdGhpcyB1c2VzCi0gICAgICAgIHRoZSBzeXNsb2c7IG9uIFdpbmRvd3MsIHRoaXMgdXNlcyBPdXRwdXREZWJ1Z1N0cmluZygpLjwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L3Zhcmxpc3RlbnRyeT4KLQotICA8dmFybGlzdGVudHJ5PgotICAgIDx0ZXJtPjxvcHRpb24+LS1zeXNsb2ctb25seTwvb3B0aW9uPjwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT5Gb3JjZSB0aGUgbWVzc2FnZSBidXMgdG8gdXNlIHRoZSBzeXN0ZW0gbG9nIGZvciBtZXNzYWdlcywKLSAgICAgICAgYW5kIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBkdXBsaWNhdGUgdGhlbSB0byBzdGFuZGFyZCBlcnJvci4KLSAgICAgICAgT24gVW5peCwgdGhpcyB1c2VzIHRoZSBzeXNsb2c7IG9uIFdpbmRvd3MsIHRoaXMgdXNlcwotICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZygpLjwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L3Zhcmxpc3RlbnRyeT4KLQotICA8dmFybGlzdGVudHJ5PgotICAgIDx0ZXJtPjxvcHRpb24+LS1ub3N5c2xvZzwvb3B0aW9uPjwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT5Gb3JjZSB0aGUgbWVzc2FnZSBidXMgdG8gdXNlIG9ubHkgc3RhbmRhcmQgZXJyb3IgZm9yIG1lc3NhZ2VzLAotICAgICAgICBldmVuIGlmIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWVzIHRoYXQgaXQgc2hvdWxkIHVzZQotICAgICAgICB0aGUgc3lzdGVtIGxvZy48L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgPC92YXJsaXN0ZW50cnk+Ci0KIDwvdmFyaWFibGVsaXN0PgogPC9yZWZzZWN0MT4KIApAQCAtMjY3LDcgKzIzMiw3IEBACiBhbmQgdGhlIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHNldAogdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHNlc3Npb24gYnVzLiAgTGlrZXdpc2UsIGlmIHRoZSB0eXBlIG9mIHRoZQogbWVzc2FnZSBidXMgaXMgInN5c3RlbSIsIHRoZW4gdGhlIERCVVNfU1RBUlRFUl9CVVNfVFlQRSBlbnZpcm9ubWVudAotdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gInN5c3RlbSIgYW5kIHRoZSBEQlVTX1NZU1RFTV9CVVNfQUREUkVTUwordmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gInN5c3RlbSIgYW5kIHRoZSBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MKIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBzeXN0ZW0gYnVzCiAod2hpY2ggaXMgbm9ybWFsbHkgd2VsbCBrbm93biBhbnl3YXkpLjwvcGFyYT4KIApAQCAtMzYwLDkgKzMyNSw3IEBACiAKIDwvaXRlbWl6ZWRsaXN0PgogCi08cGFyYT5JZiBwcmVzZW50LCB0aGUgYnVzIGRhZW1vbiB3aWxsIGxvZyB0byBzeXNsb2cuIFRoZQotICAtLXN5c2xvZywgLS1zeXNsb2ctb25seSBhbmQgLS1ub3N5c2xvZyBjb21tYW5kLWxpbmUgb3B0aW9ucyB0YWtlIHByZWNlZGVuY2UKLSAgb3ZlciB0aGlzIHNldHRpbmcuPC9wYXJhPgorPHBhcmE+SWYgcHJlc2VudCwgdGhlIGJ1cyBkYWVtb24gd2lsbCBsb2cgdG8gc3lzbG9nLjwvcGFyYT4KIAogPGl0ZW1pemVkbGlzdCByZW1hcD0nVFAnPgogCkBAIC0zODYsMTMgKzM0OSw2IEBACiBlZmZlY3QgdW5sZXNzIHRoZSBBTk9OWU1PVVMgbWVjaGFuaXNtIGhhcyBhbHNvIGJlZW4gZW5hYmxlZCB1c2luZyB0aGUKIDxlbXBoYXNpcyByZW1hcD0nSSc+Jmx0O2F1dGgmZ3Q7PC9lbXBoYXNpcz4gZWxlbWVudCwgZGVzY3JpYmVkIGJlbG93LjwvcGFyYT4KIAotPHBhcmE+VXNpbmcgdGhpcyBkaXJlY3RpdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHdlbGwta25vd24KLSAgc3lzdGVtIGJ1cyBvciB0aGUgd2VsbC1rbm93biBzZXNzaW9uIGJ1cyB3aWxsIG1ha2UgdGhhdCBidXMgaW5zZWN1cmUKLSAgYW5kIHNob3VsZCBuZXZlciBiZSBkb25lLiBTaW1pbGFybHksIG9uIGN1c3RvbSBidXMgdHlwZXMsIHVzaW5nIHRoaXMKLSAgZGlyZWN0aXZlIHdpbGwgdXN1YWxseSBtYWtlIHRoZSBjdXN0b20gYnVzIGluc2VjdXJlLCB1bmxlc3MgaXRzCi0gIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYW5vbnltb3VzCi0gIHVzZXJzIGZyb20gY2F1c2luZyBkYW1hZ2Ugb3IgZXNjYWxhdGluZyBwcml2aWxlZ2VzLjwvcGFyYT4KLQogPGl0ZW1pemVkbGlzdCByZW1hcD0nVFAnPgogCiAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXMgcmVtYXA9J0knPiZsdDtsaXN0ZW4mZ3Q7PC9lbXBoYXNpcz48L3BhcmE+PC9saXN0aXRlbT4KQEAgLTQwNCw0NyArMzYwLDYgQEAKIGFkZHJlc3MgaXMgaW4gdGhlIHN0YW5kYXJkIEQtQnVzIGZvcm1hdCB0aGF0IGNvbnRhaW5zCiBhIHRyYW5zcG9ydCBuYW1lIHBsdXMgcG9zc2libGUgcGFyYW1ldGVycy9vcHRpb25zLjwvcGFyYT4KIAotPHBhcmE+T24gcGxhdGZvcm1zIG90aGVyIHRoYW4gV2luZG93cywgPGxpdGVyYWw+dW5peDwvbGl0ZXJhbD4tYmFzZWQKLSAgdHJhbnNwb3J0cyAoPGxpdGVyYWw+dW5peDwvbGl0ZXJhbD4sIDxsaXRlcmFsPnN5c3RlbWQ8L2xpdGVyYWw+LAotICA8bGl0ZXJhbD5sYXVuY2hkPC9saXRlcmFsPikgYXJlIHRoZSBkZWZhdWx0IGZvciBib3RoIHRoZSB3ZWxsLWtub3duCi0gIHN5c3RlbSBidXMgYW5kIHRoZSB3ZWxsLWtub3duIHNlc3Npb24gYnVzLCBhbmQgYXJlIHN0cm9uZ2x5Ci0gIHJlY29tbWVuZGVkLjwvcGFyYT4KLQotPHBhcmE+Ci0gIE9uIFdpbmRvd3MsIDxsaXRlcmFsPnVuaXg8L2xpdGVyYWw+LWJhc2VkIHRyYW5zcG9ydHMgYXJlIG5vdCBhdmFpbGFibGUsCi0gIHNvIFRDUC1iYXNlZCB0cmFuc3BvcnRzIG11c3QgYmUgdXNlZC4KLSAgU2ltaWxhciB0byByZW1vdGUgWDExLCB0aGUgPGxpdGVyYWw+dGNwPC9saXRlcmFsPiBhbmQKLSAgPGxpdGVyYWw+bm9uY2UtdGNwPC9saXRlcmFsPiB0cmFuc3BvcnRzIGhhdmUgbm8gaW50ZWdyaXR5IG9yCi0gIGNvbmZpZGVudGlhbGl0eSBwcm90ZWN0aW9uLCBzbyB0aGV5IHNob3VsZCBub3JtYWxseSBvbmx5IGJlCi0gIHVzZWQgYWNyb3NzIHRoZSBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UsIGZvciBleGFtcGxlIHVzaW5nIGFuCi0gIGFkZHJlc3MgbGlrZSA8bGl0ZXJhbD50Y3A6aG9zdD0xMjcuMC4wLjE8L2xpdGVyYWw+IG9yCi0gIDxsaXRlcmFsPm5vbmNlLXRjcDpob3N0PWxvY2FsaG9zdDwvbGl0ZXJhbD4uIEluIHBhcnRpY3VsYXIsCi0gIGNvbmZpZ3VyaW5nIHRoZSB3ZWxsLWtub3duIHN5c3RlbSBidXMgb3IgdGhlIHdlbGwta25vd24gc2Vzc2lvbgotICBidXMgdG8gbGlzdGVuIG9uIGEgbm9uLWxvb3BiYWNrIFRDUCBhZGRyZXNzIGlzIGluc2VjdXJlLgotPC9wYXJhPgotPHBhcmE+Ci0gIERldmVsb3BlcnMgYXJlIHNvbWV0aW1lcyB0ZW1wdGVkIHRvIHVzZSByZW1vdGUgVENQIGFzIGEgZGVidWdnaW5nCi0gIHRvb2wuIEhvd2V2ZXIsIGlmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBsZWZ0IGVuYWJsZWQgaW4gZmluaXNoZWQKLSAgcHJvZHVjdHMsIHRoZSByZXN1bHQgd2lsbCBiZSBkYW5nZXJvdXNseSBpbnNlY3VyZS4gSW5zdGVhZCBvZgotICB1c2luZyByZW1vdGUgVENQLCBkZXZlbG9wZXJzIHNob3VsZCA8dWxpbmsKLSAgICB1cmw9Imh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2RidXMvMjAxOC1BcHJpbC8wMTc0NDcuaHRtbCIKLSAgICA+cmVsYXkgY29ubmVjdGlvbnMgdmlhIFNlY3VyZSBTaGVsbCBvciBhIHNpbWlsYXIgcHJvdG9jb2w8L3VsaW5rPi4KLSAgPCEtLSBUT0RPOiBJZGVhbGx5IHNvbWVvbmUgd291bGQgd3JpdGUgYSBtb3JlIGZvcm1hbCBndWlkZSB0bwotICAgICAgIHJlbW90ZSBELUJ1cyBkZWJ1Z2dpbmcsIGFuZCB3ZSBjb3VsZCBsaW5rIHRvIHRoYXQgaW5zdGVhZCAtLT4KLTwvcGFyYT4KLTxwYXJhPgotICBSZW1vdGUgVENQIGNvbm5lY3Rpb25zIHdlcmUgaGlzdG9yaWNhbGx5IHNvbWV0aW1lcyB1c2VkIHRvIHNoYXJlCi0gIGEgc2luZ2xlIHNlc3Npb24gYnVzIGJldHdlZW4gbG9naW4gc2Vzc2lvbnMgb2YgdGhlIHNhbWUgdXNlciBvbgotICBkaWZmZXJlbnQgbWFjaGluZXMgd2l0aGluIGEgdHJ1c3RlZCBsb2NhbCBhcmVhIG5ldHdvcmssIGluCi0gIGNvbmp1bmN0aW9uIHdpdGggdW5lbmNyeXB0ZWQgcmVtb3RlIFgxMSwgYSBORlMtc2hhcmVkIGhvbWUKLSAgZGlyZWN0b3J5IGFuZCBOSVMgKFlQKSBhdXRoZW50aWNhdGlvbi4gVGhpcyBpcyBpbnNlY3VyZSBhZ2FpbnN0Ci0gIGFuIGF0dGFja2VyIG9uIHRoZSBzYW1lIExBTiBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgc3Ryb25nbHkKLSAgZGVwcmVjYXRlZDsgbW9yZSBzcGVjaWZpY2FsbHksIGl0IGlzIGluc2VjdXJlIGluIHRoZSBzYW1lIHdheXMKLSAgYW5kIGZvciB0aGUgc2FtZSByZWFzb25zIGFzIHVuZW5jcnlwdGVkIHJlbW90ZSBYMTEgYW5kIE5GU3YyL05GU3YzLgotICBUaGUgRC1CdXMgbWFpbnRhaW5lcnMKLSAgcmVjb21tZW5kIHVzaW5nIGEgc2VwYXJhdGUgc2Vzc2lvbiBidXMgcGVyICh1c2VyLCBtYWNoaW5lKSBwYWlyLAotICBvbmx5IGFjY2Vzc2libGUgZnJvbSB3aXRoaW4gdGhhdCBtYWNoaW5lLgotPC9wYXJhPgogCiA8cGFyYT5FeGFtcGxlOiAmbHQ7bGlzdGVuJmd0O3VuaXg6cGF0aD0vdG1wL2ZvbyZsdDsvbGlzdGVuJmd0OzwvcGFyYT4KIApAQCAtNTA0LDEwICs0MTksNiBAQAogJmx0O2F1dGgmZ3Q7IGVsZW1lbnRzLCBhbGwgdGhlIGxpc3RlZCBtZWNoYW5pc21zIGFyZSBhbGxvd2VkLiAgVGhlIG9yZGVyIGluCiB3aGljaCBtZWNoYW5pc21zIGFyZSBsaXN0ZWQgaXMgbm90IG1lYW5pbmdmdWwuPC9wYXJhPgogCi08cGFyYT5PbiBub24tV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcywgYWxsb3dpbmcgb25seSB0aGUKLSAgPGxpdGVyYWw+RVhURVJOQUw8L2xpdGVyYWw+IGF1dGhlbnRpY2F0aW9uCi0gIG1lY2hhbmlzbSBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlCi0gIHdlbGwta25vd24gc3lzdGVtIGJ1cyBhbmQgZm9yIHRoZSB3ZWxsLWtub3duIHNlc3Npb24gYnVzLjwvcGFyYT4KIAogPHBhcmE+RXhhbXBsZTogJmx0O2F1dGgmZ3Q7RVhURVJOQUwmbHQ7L2F1dGgmZ3Q7PC9wYXJhPgogCkBAIC01MjEsMjIgKzQzMiwxNSBAQAogCiA8L2l0ZW1pemVkbGlzdD4KIAotPHBhcmE+Ci0gIEFkZHMgYSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciAuc2VydmljZSBmaWxlcywgd2hpY2ggdGVsbCB0aGUKLSAgZGJ1cy1kYWVtb24gaG93IHRvIHN0YXJ0IGEgcHJvZ3JhbSB0byBwcm92aWRlIGEgcGFydGljdWxhciB3ZWxsLWtub3duCi0gIGJ1cyBuYW1lLiBTZWUgdGhlIEQtQnVzIFNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUKLSAgY29udGVudHMgb2YgLnNlcnZpY2UgZmlsZXMuCi08L3BhcmE+Cis8cGFyYT5BZGRzIGEgZGlyZWN0b3J5IHRvIHNjYW4gZm9yIC5zZXJ2aWNlIGZpbGVzLiBEaXJlY3RvcmllcyBhcmUKK3NjYW5uZWQgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgdG8gYXBwZWFyIGluIHRoZSBjb25maWcgZmlsZQorKHRoZSBmaXJzdCAuc2VydmljZSBmaWxlIGZvdW5kIHRoYXQgcHJvdmlkZXMgYSBwYXJ0aWN1bGFyCitzZXJ2aWNlIHdpbGwgYmUgdXNlZCkuPC9wYXJhPgogCi08cGFyYT4KLSAgSWYgYSBwYXJ0aWN1bGFyIHNlcnZpY2UgaXMgZm91bmQgaW4gbW9yZSB0aGFuIG9uZSAmbHQ7c2VydmljZWRpciZndDssCi0gIHRoZSBmaXJzdCBkaXJlY3RvcnkgbGlzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGFrZXMgcHJlY2VkZW5jZS4KLSAgSWYgdHdvIHNlcnZpY2UgZmlsZXMgcHJvdmlkaW5nIHRoZSBzYW1lIHdlbGwta25vd24gYnVzIG5hbWUgYXJlIGZvdW5kCi0gIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgaXQgaXMgYXJiaXRyYXJ5IHdoaWNoIG9uZSB3aWxsIGJlIGNob3NlbgotICAodGhpcyBjYW4gb25seSBoYXBwZW4gaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBzZXJ2aWNlIGZpbGVzIGRvZXMgbm90Ci0gIGhhdmUgdGhlIHJlY29tbWVuZGVkIG5hbWUsIHdoaWNoIGlzIGl0cyB3ZWxsLWtub3duIGJ1cyBuYW1lIGZvbGxvd2VkCi0gIGJ5ICIuc2VydmljZSIpLgotPC9wYXJhPgorCis8cGFyYT5TZXJ2aWNlIGZpbGVzIHRlbGwgdGhlIGJ1cyBob3cgdG8gYXV0b21hdGljYWxseSBzdGFydCBhIHByb2dyYW0uCitUaGV5IGFyZSBwcmltYXJpbHkgdXNlZCB3aXRoIHRoZSBwZXItdXNlci1zZXNzaW9uIGJ1cywKK25vdCB0aGUgc3lzdGVtd2lkZSBidXMuPC9wYXJhPgogCiA8aXRlbWl6ZWRsaXN0IHJlbWFwPSdUUCc+CiAKQEAgLTU0NSwxMjggKzQ0OSwxNyBAQAogCiA8L2l0ZW1pemVkbGlzdD4KIAotPHBhcmE+Ci0gICZsdDtzdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzLyZndDsgcmVxdWVzdHMgYSBzdGFuZGFyZCBzZXQgb2YKLSAgc2Vzc2lvbiBzZXJ2aWNlIGRpcmVjdG9yaWVzLiBJdHMgZWZmZWN0IGlzIHNpbWlsYXIgdG8gc3BlY2lmeWluZyBhIHNlcmllcwotICBvZiAmbHQ7c2VydmljZWRpci8mZ3Q7IGVsZW1lbnRzIGZvciBlYWNoIG9mIHRoZSBkYXRhIGRpcmVjdG9yaWVzLAotICBpbiB0aGUgb3JkZXIgZ2l2ZW4gaGVyZS4KLSAgSXQgaXMgbm90IGV4YWN0bHkgZXF1aXZhbGVudCwgYmVjYXVzZSB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5Ci0gIHRvIGRpc2FibGUgZGlyZWN0b3J5IG1vbml0b3Jpbmcgb3IgZW5mb3JjZSBzdHJpY3Qgc2VydmljZSBmaWxlIG5hbWluZwotICBmb3IgYSAmbHQ7c2VydmljZWRpci8mZ3Q7LgotPC9wYXJhPgorPHBhcmE+Jmx0O3N0YW5kYXJkX3Nlc3Npb25fc2VydmljZWRpcnMvJmd0OyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgYSBzZXJpZXMKK29mICZsdDtzZXJ2aWNlZGlyLyZndDsgZWxlbWVudHMgZm9yIGVhY2ggb2YgdGhlIGRhdGEgZGlyZWN0b3JpZXMgaW4gdGhlICJYREcKK0Jhc2UgRGlyZWN0b3J5IFNwZWNpZmljYXRpb24iIHdpdGggdGhlIHN1YmRpcmVjdG9yeSAiZGJ1cy0xL3NlcnZpY2VzIiwKK3NvIGZvciBleGFtcGxlICIvdXNyL3NoYXJlL2RidXMtMS9zZXJ2aWNlcyIgd291bGQgYmUgYW1vbmcgdGhlCitkaXJlY3RvcmllcyBzZWFyY2hlZC48L3BhcmE+CiAKLTxwYXJhPgotICBBcyB3aXRoICZsdDtzZXJ2aWNlZGlyLyZndDsgZWxlbWVudHMsIGlmIGEgcGFydGljdWxhciBzZXJ2aWNlIGlzIGZvdW5kCi0gIGluIG1vcmUgdGhhbiBvbmUgc2VydmljZSBkaXJlY3RvcnksIHRoZSBmaXJzdCBkaXJlY3RvcnkgdGFrZXMgcHJlY2VkZW5jZS4KLSAgSWYgdHdvIHNlcnZpY2UgZmlsZXMgcHJvdmlkaW5nIHRoZSBzYW1lIHdlbGwta25vd24gYnVzIG5hbWUgYXJlIGZvdW5kCi0gIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgaXQgaXMgYXJiaXRyYXJ5IHdoaWNoIG9uZSB3aWxsIGJlIGNob3NlbgotICAodGhpcyBjYW4gb25seSBoYXBwZW4gaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBzZXJ2aWNlIGZpbGVzIGRvZXMgbm90Ci0gIGhhdmUgdGhlIHJlY29tbWVuZGVkIG5hbWUsIHdoaWNoIGlzIGl0cyB3ZWxsLWtub3duIGJ1cyBuYW1lIGZvbGxvd2VkCi0gIGJ5ICIuc2VydmljZSIpLgotPC9wYXJhPgotCi08cGFyYT4KLSAgT24gVW5peCwgdGhlIHN0YW5kYXJkIHNlc3Npb24gc2VydmljZSBkaXJlY3RvcmllcyBhcmU6Ci0gIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz4kWERHX1JVTlRJTUVfRElSPC9lbXBoYXNpcz4vZGJ1cy0xL3NlcnZpY2VzLAotICAgICAgICBpZiBYREdfUlVOVElNRV9ESVIgaXMgc2V0IChzZWUgdGhlIFhERyBCYXNlIERpcmVjdG9yeQotICAgICAgICBTcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9mIFhER19SVU5USU1FX0RJUik6Ci0gICAgICAgIHRoaXMgbG9jYXRpb24gaXMgc3VpdGFibGUgZm9yIHRyYW5zaWVudCBzZXJ2aWNlcyBjcmVhdGVkIGF0IHJ1bnRpbWUKLSAgICAgICAgYnkgc3lzdGVtZCBnZW5lcmF0b3JzIChzZWUKLSAgICAgICAgPGNpdGVyZWZlbnRyeT4KLSAgICAgICAgICA8cmVmZW50cnl0aXRsZT5zeXN0ZW1kLmdlbmVyYXRvcjwvcmVmZW50cnl0aXRsZT4KLSAgICAgICAgICA8bWFudm9sbnVtPjc8L21hbnZvbG51bT4KLSAgICAgICAgPC9jaXRlcmVmZW50cnk+KSwKLSAgICAgICAgc2Vzc2lvbiBtYW5hZ2VycyBvciBvdGhlciBzZXNzaW9uIGluZnJhc3RydWN0dXJlLgotICAgICAgICBJdCBpcyBhbiBleHRlbnNpb24gcHJvdmlkZWQgYnkgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICBvZiBkYnVzLWRhZW1vbiwgYW5kIGlzIG5vdCBzdGFuZGFyZGl6ZWQgaW4gdGhlIEQtQnVzIFNwZWNpZmljYXRpb24uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVW5saWtlIHRoZSBvdGhlciBzdGFuZGFyZCBzZXNzaW9uIHNlcnZpY2UgZGlyZWN0b3JpZXMsIHRoaXMgZGlyZWN0b3J5Ci0gICAgICAgIGVuZm9yY2VzIHN0cmljdCBuYW1pbmcgZm9yIHRoZSBzZXJ2aWNlIGZpbGVzOiB0aGUgZmlsZW5hbWUgbXVzdCBiZQotICAgICAgICBleGFjdGx5IHRoZSB3ZWxsLWtub3duIGJ1cyBuYW1lIG9mIHRoZSBzZXJ2aWNlLCBmb2xsb3dlZCBieQotICAgICAgICAiLnNlcnZpY2UiLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsc28gdW5saWtlIHRoZSBvdGhlciBzdGFuZGFyZCBzZXNzaW9uIHNlcnZpY2UgZGlyZWN0b3JpZXMsIHRoaXMKLSAgICAgICAgZGlyZWN0b3J5IGlzIG5ldmVyIG1vbml0b3JlZCB3aXRoCi0gICAgICAgIDxjaXRlcmVmZW50cnk+Ci0gICAgICAgICAgPHJlZmVudHJ5dGl0bGU+aW5vdGlmeTwvcmVmZW50cnl0aXRsZT4KLSAgICAgICAgICA8bWFudm9sbnVtPjc8L21hbnZvbG51bT4KLSAgICAgICAgPC9jaXRlcmVmZW50cnk+Ci0gICAgICAgIG9yIHNpbWlsYXIgQVBJcy4gUHJvZ3JhbXMgdGhhdCBjcmVhdGUgc2VydmljZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeQotICAgICAgICB3aGlsZSBhIGRidXMtZGFlbW9uIGlzIHJ1bm5pbmcgYXJlIGV4cGVjdGVkIHRvIGNhbGwgdGhlIGRidXMtZGFlbW9uJ3MKLSAgICAgICAgUmVsb2FkQ29uZmlnKCkgbWV0aG9kIGFmdGVyIHRoZXkgaGF2ZSBtYWRlIGNoYW5nZXMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPiRYREdfREFUQV9IT01FPC9lbXBoYXNpcz4vZGJ1cy0xL3NlcnZpY2VzLAotICAgICAgICB3aGVyZSBYREdfREFUQV9IT01FIGRlZmF1bHRzIHRvIH4vLmxvY2FsL3NoYXJlCi0gICAgICAgIChzZWUgdGhlIFhERyBCYXNlIERpcmVjdG9yeSBTcGVjaWZpY2F0aW9uKTogdGhpcyBsb2NhdGlvbiBpcwotICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIEQtQnVzIFNwZWNpZmljYXRpb24sIGFuZCBpcyBzdWl0YWJsZSBmb3IgcGVyLXVzZXIsCi0gICAgICAgIGxvY2FsbHktaW5zdGFsbGVkIHNvZnR3YXJlLgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz5kaXJlY3Rvcnk8L2VtcGhhc2lzPi9kYnVzLTEvc2VydmljZXMgZm9yIGVhY2gKLSAgICAgICAgZGlyZWN0b3J5IGluIFhER19EQVRBX0RJUlMsIHdoZXJlIFhER19EQVRBX0RJUlMgZGVmYXVsdHMgdG8KLSAgICAgICAgL3Vzci9sb2NhbC9zaGFyZTovdXNyL3NoYXJlCi0gICAgICAgIChzZWUgdGhlIFhERyBCYXNlIERpcmVjdG9yeSBTcGVjaWZpY2F0aW9uKTogdGhlc2UgbG9jYXRpb25zIGFyZQotICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIEQtQnVzIFNwZWNpZmljYXRpb24uIFRoZSBkZWZhdWx0cyBhcmUgc3VpdGFibGUKLSAgICAgICAgZm9yIHNvZnR3YXJlIGluc3RhbGxlZCBsb2NhbGx5IGJ5IGEgc3lzdGVtIGFkbWluaXN0cmF0b3IKLSAgICAgICAgKC91c3IvbG9jYWwvc2hhcmUpIG9yIGZvciBzb2Z0d2FyZSBpbnN0YWxsZWQgZnJvbSBvcGVyYXRpbmcgc3lzdGVtCi0gICAgICAgIHBhY2thZ2VzICgvdXNyL3NoYXJlKS4gUGVyLXVzZXIgb3Igc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiB0aGF0Ci0gICAgICAgIHNldHMgdGhlIFhER19EQVRBX0RJUlMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGV4dGVuZCB0aGlzIHNlYXJjaAotICAgICAgICBwYXRoIHRvIGNvdmVyIGluc3RhbGxhdGlvbnMgaW4gb3RoZXIgbG9jYXRpb25zLCBmb3IgZXhhbXBsZQotICAgICAgICB+Ly5sb2NhbC9zaGFyZS9mbGF0cGFrL2V4cG9ydHMvc2hhcmUvIGFuZAotICAgICAgICAvdmFyL2xpYi9mbGF0cGFrL2V4cG9ydHMvc2hhcmUvIHdoZW4KLSAgICAgICAgPGNpdGVyZWZlbnRyeT4KLSAgICAgICAgICA8cmVmZW50cnl0aXRsZT5mbGF0cGFrPC9yZWZlbnRyeXRpdGxlPgotICAgICAgICAgIDxtYW52b2xudW0+MTwvbWFudm9sbnVtPgotICAgICAgICA8L2NpdGVyZWZlbnRyeT4KLSAgICAgICAgaXMgdXNlZC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+JHtkYXRhZGlyfTwvZW1waGFzaXM+L2RidXMtMS9zZXJ2aWNlcwotICAgICAgICBmb3IgdGhlIDxlbXBoYXNpcz4ke2RhdGFkaXJ9PC9lbXBoYXNpcz4gdGhhdCB3YXMgc3BlY2lmaWVkIHdoZW4KLSAgICAgICAgZGJ1cyB3YXMgY29tcGlsZWQsIHR5cGljYWxseSAvdXNyL3NoYXJlOiB0aGlzIGxvY2F0aW9uIGlzIGFuCi0gICAgICAgIGV4dGVuc2lvbiBwcm92aWRlZCBieSB0aGUgcmVmZXJlbmNlIGRidXMtZGFlbW9uIGltcGxlbWVudGF0aW9uLAotICAgICAgICBhbmQgaXMgc3VpdGFibGUgZm9yIHNvZnR3YXJlIHN0YWNrcyBpbnN0YWxsZWQgYWxvbmdzaWRlIGRidXMtZGFlbW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9wYXJhPgogCiA8cGFyYT5UaGUgIlhERyBCYXNlIERpcmVjdG9yeSBTcGVjaWZpY2F0aW9uIiBjYW4gYmUgZm91bmQgYXQKIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9TdGFuZGFyZHMvYmFzZWRpci1zcGVjJz5odHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU3RhbmRhcmRzL2Jhc2VkaXItc3BlYzwvdWxpbms+IGlmIGl0IGhhc24ndCBtb3ZlZCwKIG90aGVyd2lzZSB0cnkgeW91ciBmYXZvcml0ZSBzZWFyY2ggZW5naW5lLjwvcGFyYT4KIAotPHBhcmE+Ci0gIE9uIFdpbmRvd3MsIHRoZSBzdGFuZGFyZCBzZXNzaW9uIHNlcnZpY2UgZGlyZWN0b3JpZXMgYXJlOgotICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+JUNvbW1vblByb2dyYW1GaWxlcyU8L2VtcGhhc2lzPi9kYnVzLTEvc2VydmljZXMKLSAgICAgICAgaWYgJUNvbW1vblByb2dyYW1GaWxlcyUgaXMgc2V0OiB0aGlzIGxvY2F0aW9uIGlzIHN1aXRhYmxlIGZvcgotICAgICAgICBzeXN0ZW0td2lkZSBpbnN0YWxsZWQgc29mdHdhcmUgcGFja2FnZXMKLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBIHNoYXJlL2RidXMtMS9zZXJ2aWNlcyBkaXJlY3RvcnkgZm91bmQgaW4gdGhlIHNhbWUKLSAgICAgICAgZGlyZWN0b3J5IGhpZXJhcmNoeSAocHJlZml4KSBhcyB0aGUgZGJ1cy1kYWVtb246IHRoaXMgbG9jYXRpb24KLSAgICAgICAgaXMgc3VpdGFibGUgZm9yIHNvZnR3YXJlIHN0YWNrcyBpbnN0YWxsZWQgYWxvbmdzaWRlIGRidXMtZGFlbW9uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3BhcmE+Ci0KIAogPHBhcmE+VGhlICZsdDtzdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzLyZndDsgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgdG8gdGhlCiBwZXItdXNlci1zZXNzaW9uIGJ1cyBkYWVtb24gZGVmaW5lZCBpbgpAQCAtNjgxLDUzICs0NzQsOSBAQAogPC9pdGVtaXplZGxpc3Q+CiAKIDxwYXJhPiZsdDtzdGFuZGFyZF9zeXN0ZW1fc2VydmljZWRpcnMvJmd0OyBzcGVjaWZpZXMgdGhlIHN0YW5kYXJkIHN5c3RlbS13aWRlCi0gIGFjdGl2YXRpb24gZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIHNlcnZpY2UgZmlsZXMuCi0gIEFzIHdpdGggc2Vzc2lvbiBzZXJ2aWNlcywgdGhlIGZpcnN0IGRpcmVjdG9yeSBsaXN0ZWQgaGFzIGhpZ2hlc3QKLSAgcHJlY2VkZW5jZS48L3BhcmE+CithY3RpdmF0aW9uIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBzZXJ2aWNlIGZpbGVzLgorVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gQEVYUEFOREVEX0RBVEFESVJAL2RidXMtMS9zeXN0ZW0tc2VydmljZXMuPC9wYXJhPgogCi08cGFyYT4KLSAgT24gVW5peCwgdGhlIHN0YW5kYXJkIHNlc3Npb24gc2VydmljZSBkaXJlY3RvcmllcyBhcmU6Ci0gIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIC91c3IvbG9jYWwvc2hhcmUvZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlczogdGhpcyBsb2NhdGlvbiBpcwotICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIEQtQnVzIFNwZWNpZmljYXRpb24sIGFuZCBpcyBzdWl0YWJsZSBmb3IKLSAgICAgICAgc29mdHdhcmUgaW5zdGFsbGVkIGxvY2FsbHkgYnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgL3Vzci9zaGFyZS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzOiB0aGlzIGxvY2F0aW9uIGlzCi0gICAgICAgIHNwZWNpZmllZCBieSB0aGUgRC1CdXMgU3BlY2lmaWNhdGlvbiwgYW5kIGlzIHN1aXRhYmxlIGZvcgotICAgICAgICBzb2Z0d2FyZSBpbnN0YWxsZWQgYnkgb3BlcmF0aW5nIHN5c3RlbSBwYWNrYWdlcwotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz4ke2RhdGFkaXJ9PC9lbXBoYXNpcz4vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcwotICAgICAgICBmb3IgdGhlIDxlbXBoYXNpcz4ke2RhdGFkaXJ9PC9lbXBoYXNpcz4gdGhhdCB3YXMgc3BlY2lmaWVkIHdoZW4KLSAgICAgICAgZGJ1cyB3YXMgY29tcGlsZWQsIHR5cGljYWxseSAvdXNyL3NoYXJlOiB0aGlzIGxvY2F0aW9uIGlzIGFuCi0gICAgICAgIGV4dGVuc2lvbiBwcm92aWRlZCBieSB0aGUgcmVmZXJlbmNlIGRidXMtZGFlbW9uIGltcGxlbWVudGF0aW9uLAotICAgICAgICBhbmQgaXMgc3VpdGFibGUgZm9yIHNvZnR3YXJlIHN0YWNrcyBpbnN0YWxsZWQgYWxvbmdzaWRlIGRidXMtZGFlbW9uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgL2xpYi9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzOiB0aGlzIGxvY2F0aW9uIGlzCi0gICAgICAgIHNwZWNpZmllZCBieSB0aGUgRC1CdXMgU3BlY2lmaWNhdGlvbiwgYW5kIHdhcyBpbnRlbmRlZCBmb3IKLSAgICAgICAgc29mdHdhcmUgaW5zdGFsbGVkIGJ5IG9wZXJhdGluZyBzeXN0ZW0gcGFja2FnZXMgYW5kIHVzZWQgZHVyaW5nCi0gICAgICAgIGVhcmx5IGJvb3QgKGJ1dCBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLCBiZWNhdXNlCi0gICAgICAgIHRoZSByZWZlcmVuY2UgZGJ1cy1kYWVtb24gaXMgbm90IGRlc2lnbmVkIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcKLSAgICAgICAgZWFybHkgYm9vdCkKLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLQotPHBhcmE+Ci0gIE9uIFdpbmRvd3MsIHRoZXJlIGlzIG5vIHN0YW5kYXJkIHN5c3RlbSBidXMsIHNvIHRoZXJlIGFyZSBubyBzdGFuZGFyZAotICBzeXN0ZW0gYnVzIGRpcmVjdG9yaWVzIGVpdGhlci4KLTwvcGFyYT4KIAogPHBhcmE+VGhlICZsdDtzdGFuZGFyZF9zeXN0ZW1fc2VydmljZWRpcnMvJmd0OyBvcHRpb24gaXMgb25seSByZWxldmFudCB0byB0aGUKIHBlci1zeXN0ZW0gYnVzIGRhZW1vbiBkZWZpbmVkIGluCkBAIC04MzMsMTMgKzU4Miw5IEBACiBhbmQgcHJldmVudCB1bmV4cGVjdGVkIHRyYWZmaWMuPC9wYXJhPgogCiAKLTxwYXJhPgotICBDdXJyZW50bHksIHRoZSBzeXN0ZW0gYnVzIGhhcyBhIGRlZmF1bHQtZGVueSBwb2xpY3kgZm9yIHNlbmRpbmcgbWV0aG9kIGNhbGxzCi0gIGFuZCBvd25pbmcgYnVzIG5hbWVzLCBhbmQgYSBkZWZhdWx0LWFsbG93IHBvbGljeSBmb3IgcmVjZWl2aW5nIG1lc3NhZ2VzLAotICBzZW5kaW5nIHNpZ25hbHMsIGFuZCBzZW5kaW5nIGEgc2luZ2xlIHN1Y2Nlc3Mgb3IgZXJyb3IgcmVwbHkgZm9yIGVhY2gKLSAgbWV0aG9kIGNhbGwgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSA8bGl0ZXJhbD5OT19SRVBMWTwvbGl0ZXJhbD4gZmxhZy4KLSAgU2VuZGluZyBtb3JlIHRoYW4gdGhlIGV4cGVjdGVkIG51bWJlciBvZiByZXBsaWVzIGlzIG5vdCBhbGxvd2VkLgotPC9wYXJhPgorPHBhcmE+Q3VycmVudGx5LCB0aGUgc3lzdGVtIGJ1cyBoYXMgYSBkZWZhdWx0LWRlbnkgcG9saWN5IGZvciBzZW5kaW5nIG1ldGhvZCBjYWxscworYW5kIG93bmluZyBidXMgbmFtZXMuICBFdmVyeXRoaW5nIGVsc2UsIGluIHBhcnRpY3VsYXIgcmVwbHkgbWVzc2FnZXMsIHJlY2VpdmUKK2NoZWNrcywgYW5kIHNpZ25hbHMgaGFzIGEgZGVmYXVsdCBhbGxvdyBwb2xpY3kuPC9wYXJhPgogCiAKIDxwYXJhPkluIGdlbmVyYWwsIGl0IGlzIGJlc3QgdG8ga2VlcCBzeXN0ZW0gc2VydmljZXMgYXMgc21hbGwsIHRhcmdldGVkIHByb2dyYW1zIHdoaWNoCkBAIC04OTMsMzAgKzYzOCwyOSBAQAogCiA8cGFyYT5UaGUgcG9zc2libGUgYXR0cmlidXRlcyBvZiB0aGVzZSBlbGVtZW50cyBhcmU6PC9wYXJhPgogPGxpdGVyYWxsYXlvdXQgcmVtYXA9Jy5uZic+Ci0gICBzZW5kX2ludGVyZmFjZT0iaW50ZXJmYWNlX25hbWUiIHwgIioiCi0gICBzZW5kX21lbWJlcj0ibWV0aG9kX29yX3NpZ25hbF9uYW1lIiB8ICIqIgotICAgc2VuZF9lcnJvcj0iZXJyb3JfbmFtZSIgfCAiKiIKLSAgIHNlbmRfYnJvYWRjYXN0PSJ0cnVlIiB8ICJmYWxzZSIKLSAgIHNlbmRfZGVzdGluYXRpb249Im5hbWUiIHwgIioiCi0gICBzZW5kX3R5cGU9Im1ldGhvZF9jYWxsIiB8ICJtZXRob2RfcmV0dXJuIiB8ICJzaWduYWwiIHwgImVycm9yIiB8ICIqIgotICAgc2VuZF9wYXRoPSIvcGF0aC9uYW1lIiB8ICIqIgorICAgc2VuZF9pbnRlcmZhY2U9ImludGVyZmFjZV9uYW1lIgorICAgc2VuZF9tZW1iZXI9Im1ldGhvZF9vcl9zaWduYWxfbmFtZSIKKyAgIHNlbmRfZXJyb3I9ImVycm9yX25hbWUiCisgICBzZW5kX2Rlc3RpbmF0aW9uPSJuYW1lIgorICAgc2VuZF90eXBlPSJtZXRob2RfY2FsbCIgfCAibWV0aG9kX3JldHVybiIgfCAic2lnbmFsIiB8ICJlcnJvciIKKyAgIHNlbmRfcGF0aD0iL3BhdGgvbmFtZSIKIAotICAgcmVjZWl2ZV9pbnRlcmZhY2U9ImludGVyZmFjZV9uYW1lIiB8ICIqIgotICAgcmVjZWl2ZV9tZW1iZXI9Im1ldGhvZF9vcl9zaWduYWxfbmFtZSIgfCAiKiIKLSAgIHJlY2VpdmVfZXJyb3I9ImVycm9yX25hbWUiIHwgIioiCi0gICByZWNlaXZlX3NlbmRlcj0ibmFtZSIgfCAiKiIKLSAgIHJlY2VpdmVfdHlwZT0ibWV0aG9kX2NhbGwiIHwgIm1ldGhvZF9yZXR1cm4iIHwgInNpZ25hbCIgfCAiZXJyb3IiIHwgIioiCi0gICByZWNlaXZlX3BhdGg9Ii9wYXRoL25hbWUiIHwgIioiCisgICByZWNlaXZlX2ludGVyZmFjZT0iaW50ZXJmYWNlX25hbWUiCisgICByZWNlaXZlX21lbWJlcj0ibWV0aG9kX29yX3NpZ25hbF9uYW1lIgorICAgcmVjZWl2ZV9lcnJvcj0iZXJyb3JfbmFtZSIKKyAgIHJlY2VpdmVfc2VuZGVyPSJuYW1lIgorICAgcmVjZWl2ZV90eXBlPSJtZXRob2RfY2FsbCIgfCAibWV0aG9kX3JldHVybiIgfCAic2lnbmFsIiB8ICJlcnJvciIKKyAgIHJlY2VpdmVfcGF0aD0iL3BhdGgvbmFtZSIKIAogICAgc2VuZF9yZXF1ZXN0ZWRfcmVwbHk9InRydWUiIHwgImZhbHNlIgogICAgcmVjZWl2ZV9yZXF1ZXN0ZWRfcmVwbHk9InRydWUiIHwgImZhbHNlIgogCiAgICBlYXZlc2Ryb3A9InRydWUiIHwgImZhbHNlIgogCi0gICBvd249Im5hbWUiIHwgIioiCisgICBvd249Im5hbWUiCiAgICBvd25fcHJlZml4PSJuYW1lIgotICAgdXNlcj0idXNlcm5hbWUiIHwgIioiCi0gICBncm91cD0iZ3JvdXBuYW1lIiB8ICIqIgorICAgdXNlcj0idXNlcm5hbWUiCisgICBncm91cD0iZ3JvdXBuYW1lIgogPC9saXRlcmFsbGF5b3V0PiA8IS0tIC5maSAtLT4KIAogCkBAIC05MzQsNjggKzY3OCwxNCBAQAogcGFydGljdWxhciBhY3Rpb24uIElmIGl0IG1hdGNoZXMsIHRoZSBhY3Rpb24gaXMgZGVuaWVkICh1bmxlc3MgbGF0ZXIKIHJ1bGVzIGluIHRoZSBjb25maWcgZmlsZSBhbGxvdyBpdCkuPC9wYXJhPgogCi08cGFyYT4KLSAgUnVsZXMgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgPGxpdGVyYWw+c2VuZF88L2xpdGVyYWw+KiBmYW1pbHkgb2YgYXR0cmlidXRlcwotICBhcmUgY2hlY2tlZCBpbiBvcmRlciB3aGVuIGEgY29ubmVjdGlvbiBhdHRlbXB0cyB0byBzZW5kIGEgbWVzc2FnZS4gVGhlIGxhc3QKLSAgcnVsZSB0aGF0IG1hdGNoZXMgdGhlIG1lc3NhZ2UgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IG1heSBiZSBzZW50LgotICBUaGUgd2VsbC1rbm93biBzZXNzaW9uIGJ1cyBub3JtYWxseSBhbGxvd3Mgc2VuZGluZyBhbnkgbWVzc2FnZS4KLSAgVGhlIHdlbGwta25vd24gc3lzdGVtIGJ1cyBub3JtYWxseSBhbGxvd3Mgc2VuZGluZyBhbnkgc2lnbmFsLCBzZWxlY3RlZAotICBtZXRob2QgY2FsbHMgdG8gdGhlIDxjb21tYW5kPmRidXMtZGFlbW9uPC9jb21tYW5kPiwgYW5kIGV4YWN0bHkgb25lCi0gIHJlcGx5IHRvIGVhY2ggcHJldmlvdXNseS1zZW50IG1ldGhvZCBjYWxsIChlaXRoZXIgc3VjY2VzcyBvciBhbiBlcnJvcikuCi0gIEVpdGhlciBvZiB0aGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBjb25maWd1cmF0aW9uOyBvbiB0aGUgc3lzdGVtIGJ1cywKLSAgc2VydmljZXMgdGhhdCB3aWxsIHJlY2VpdmUgbWV0aG9kIGNhbGxzIG11c3QgaW5zdGFsbCBjb25maWd1cmF0aW9uIHRoYXQKLSAgYWxsb3dzIHRoZW0gdG8gZG8gc28sIHVzdWFsbHkgdmlhIHJ1bGVzIG9mIHRoZSBmb3JtCi0gIDxsaXRlcmFsPiZsdDtwb2xpY3kgY29udGV4dD0iZGVmYXVsdCImZ3Q7Jmx0O2FsbG93IHNlbmRfZGVzdGluYXRpb249IiZoZWxsaXA7Ii8mZ3Q7Jmx0O3BvbGljeSZndDs8L2xpdGVyYWw+LgotPC9wYXJhPgotCi08cGFyYT4KLSAgUnVsZXMgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgPGxpdGVyYWw+cmVjZWl2ZV88L2xpdGVyYWw+KiBmYW1pbHkgb2YKLSAgYXR0cmlidXRlcywgb3Igd2l0aCB0aGUgPGxpdGVyYWw+ZWF2ZXNkcm9wPC9saXRlcmFsPiBhdHRyaWJ1dGUgYW5kIG5vIG90aGVycywKLSAgYXJlIGNoZWNrZWQgZm9yIGVhY2ggcmVjaXBpZW50IG9mIGEgbWVzc2FnZSAodGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZQotICByZWNpcGllbnQgaWYgdGhlIG1lc3NhZ2UgaXMgYSBicm9hZGNhc3Qgb3IgYSBjb25uZWN0aW9uIGlzIGVhdmVzZHJvcHBpbmcpLgotICBUaGUgbGFzdCBydWxlIHRoYXQgbWF0Y2hlcyB0aGUgbWVzc2FnZSBkZXRlcm1pbmVzIHdoZXRoZXIgaXQgbWF5IGJlIHJlY2VpdmVkLgotICBUaGUgd2VsbC1rbm93biBzZXNzaW9uIGJ1cyBub3JtYWxseSBhbGxvd3MgcmVjZWl2aW5nIGFueSBtZXNzYWdlLCBpbmNsdWRpbmcKLSAgZWF2ZXNkcm9wcGluZy4gVGhlIHdlbGwta25vd24gc3lzdGVtIGJ1cyBub3JtYWxseSBhbGxvd3MgcmVjZWl2aW5nIGFueQotICBtZXNzYWdlIHRoYXQgd2FzIG5vdCBlYXZlc2Ryb3BwZWQgKGFueSB1bmljYXN0IG1lc3NhZ2UgYWRkcmVzc2VkIHRvIHRoZQotICByZWNpcGllbnQsIGFuZCBhbnkgYnJvYWRjYXN0IG1lc3NhZ2UpLgotPC9wYXJhPgotCi08cGFyYT4KLSAgVGhlIDxsaXRlcmFsPmVhdmVzZHJvcDwvbGl0ZXJhbD4sIDxsaXRlcmFsPm1pbl9mZHM8L2xpdGVyYWw+IGFuZAotICA8bGl0ZXJhbD5tYXhfZmRzPC9saXRlcmFsPiBhdHRyaWJ1dGVzIGFyZSBtb2RpZmllcnMgdGhhdCBjYW4gYmUgYXBwbGllZAotICB0byBlaXRoZXIgPGxpdGVyYWw+c2VuZF88L2xpdGVyYWw+KiBvciA8bGl0ZXJhbD5yZWNlaXZlXzwvbGl0ZXJhbD4qCi0gIHJ1bGVzLCBhbmQgYXJlIGRvY3VtZW50ZWQgYmVsb3cuCi08L3BhcmE+Ci0KIDxwYXJhPnNlbmRfZGVzdGluYXRpb24gYW5kIHJlY2VpdmVfc2VuZGVyIHJ1bGVzIG1lYW4gdGhhdCBtZXNzYWdlcyBtYXkgbm90IGJlCiBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gdGhlICpvd25lciogb2YgdGhlIGdpdmVuIG5hbWUsIG5vdCB0aGF0CiB0aGV5IG1heSBub3QgYmUgc2VudCAqdG8gdGhhdCBuYW1lKi4gVGhhdCBpcywgaWYgYSBjb25uZWN0aW9uCiBvd25zIHNlcnZpY2VzIEEsIEIsIEMsIGFuZCBzZW5kaW5nIHRvIEEgaXMgZGVuaWVkLCBzZW5kaW5nIHRvIEIgb3IgQwotd2lsbCBub3Qgd29yayBlaXRoZXIuIEFzIGEgc3BlY2lhbCBjYXNlLAotPGxpdGVyYWw+c2VuZF9kZXN0aW5hdGlvbj0iKiI8L2xpdGVyYWw+IG1hdGNoZXMgYW55IG1lc3NhZ2UKLSh3aGV0aGVyIGl0IGhhcyBhIGRlc3RpbmF0aW9uIHNwZWNpZmllZCBvciBub3QpLCBhbmQKLTxsaXRlcmFsPnJlY2VpdmVfc2VuZGVyPSIqIjwvbGl0ZXJhbD4gc2ltaWxhcmx5IG1hdGNoZXMgYW55IG1lc3NhZ2UuPC9wYXJhPgord2lsbCBub3Qgd29yayBlaXRoZXIuPC9wYXJhPgogCi08cGFyYT4KLSAgUnVsZXMgd2l0aCA8bGl0ZXJhbD5zZW5kX2Jyb2FkY2FzdD0idHJ1ZSI8L2xpdGVyYWw+IG1hdGNoIHNpZ25hbCBtZXNzYWdlcwotICB3aXRoIG5vIGRlc3RpbmF0aW9uIChicm9hZGNhc3RzKS4gUnVsZXMgd2l0aAotICA8bGl0ZXJhbD5zZW5kX2Jyb2FkY2FzdD0iZmFsc2UiPC9saXRlcmFsPiBhcmUgdGhlIGludmVyc2U6IHRoZXkgbWF0Y2ggYW55Ci0gIHVuaWNhc3QgZGVzdGluYXRpb24gKHVuaWNhc3Qgc2lnbmFscywgdG9nZXRoZXIgd2l0aCBhbGwgbWV0aG9kIGNhbGxzLCByZXBsaWVzCi0gIGFuZCBlcnJvcnMpIGJ1dCBkbyBub3QgbWF0Y2ggbWVzc2FnZXMgd2l0aCBubyBkZXN0aW5hdGlvbiAoYnJvYWRjYXN0cykuIFRoaXMKLSAgaXMgbm90IHRoZSBzYW1lIGFzIDxsaXRlcmFsPnNlbmRfZGVzdGluYXRpb249IioiPC9saXRlcmFsPiwgd2hpY2ggbWF0Y2hlcyBhbnkKLSAgc2VudCBtZXNzYWdlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFzIGEgZGVzdGluYXRpb24gb3Igbm90LgotPC9wYXJhPgotCi08cGFyYT4KLSAgVGhlIG90aGVyIDxsaXRlcmFsPnNlbmRfPC9saXRlcmFsPiogYW5kIDxsaXRlcmFsPnJlY2VpdmVfPC9saXRlcmFsPioKLSAgYXR0cmlidXRlcyBhcmUgcHVyZWx5IHRleHR1YWwvYnktdmFsdWUgbWF0Y2hlcyBhZ2FpbnN0IHRoZSBnaXZlbiBmaWVsZCBpbgotICB0aGUgbWVzc2FnZSBoZWFkZXIsIGV4Y2VwdCB0aGF0IGZvciB0aGUgYXR0cmlidXRlcyB3aGVyZSBpdCBpcyBhbGxvd2VkLAotICA8bGl0ZXJhbD4qPC9saXRlcmFsPiBtYXRjaGVzIGFueSBtZXNzYWdlICh3aGV0aGVyIGl0IGhhcyB0aGUgcmVsZXZhbnQKLSAgaGVhZGVyIGZpZWxkIG9yIG5vdCkuIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5zZW5kX2ludGVyZmFjZT0iKiI8L2xpdGVyYWw+Ci0gIG1hdGNoZXMgYW55IHNlbnQgbWVzc2FnZSwgZXZlbiBpZiBpdCBkb2VzIG5vdCBjb250YWluIGFuIGludGVyZmFjZSBoZWFkZXIKLSAgZmllbGQuIE1vcmUgY29tcGxleCBnbG9iIG1hdGNoaW5nIHN1Y2ggYXMgPGxpdGVyYWw+Zm9vLmJhci4qPC9saXRlcmFsPiBpcwotICBub3QgYWxsb3dlZC4KLTwvcGFyYT4KKzxwYXJhPlRoZSBvdGhlciBzZW5kXyogYW5kIHJlY2VpdmVfKiBhdHRyaWJ1dGVzIGFyZSBwdXJlbHkgdGV4dHVhbC9ieS12YWx1ZQorbWF0Y2hlcyBhZ2FpbnN0IHRoZSBnaXZlbiBmaWVsZCBpbiB0aGUgbWVzc2FnZSBoZWFkZXIuPC9wYXJhPgogCiA8cGFyYT4iRWF2ZXNkcm9wcGluZyIgb2NjdXJzIHdoZW4gYW4gYXBwbGljYXRpb24gcmVjZWl2ZXMgYSBtZXNzYWdlIHRoYXQKIHdhcyBleHBsaWNpdGx5IGFkZHJlc3NlZCB0byBhIG5hbWUgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IG93biwgb3IKQEAgLTEwMzAsNDQgKzcyMCwxNiBAQAogcmVxdWVzdGVkLiBbc2VuZHxyZWNlaXZlXV9yZXF1ZXN0ZWRfcmVwbHk9InRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBydWxlIGFwcGxpZXMKIGFsd2F5cywgcmVnYXJkbGVzcyBvZiBwZW5kaW5nIHJlcGx5IHN0YXRlLjwvcGFyYT4KIAotPHBhcmE+Ci0gIFRoZSA8bGl0ZXJhbD5taW5fZmRzPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+bWF4X2ZkczwvbGl0ZXJhbD4gYXR0cmlidXRlcwotICBtb2RpZnkgZWl0aGVyIDxsaXRlcmFsPnNlbmRfPC9saXRlcmFsPiogb3IgPGxpdGVyYWw+cmVjZWl2ZV88L2xpdGVyYWw+KgotICBydWxlcy4gQSBydWxlIHdpdGggdGhlIDxsaXRlcmFsPm1pbl9mZHM8L2xpdGVyYWw+IGF0dHJpYnV0ZSBvbmx5IG1hdGNoZXMKLSAgbWVzc2FnZXMgaWYgdGhleSBoYXZlIGF0IGxlYXN0IHRoYXQgbWFueSBVbml4IGZpbGUgZGVzY3JpcHRvcnMgYXR0YWNoZWQuCi0gIENvbnZlcnNlbHksIGEgcnVsZSB3aXRoIHRoZSA8bGl0ZXJhbD5tYXhfZmRzPC9saXRlcmFsPiBhdHRyaWJ1dGUgb25seQotICBtYXRjaGVzIG1lc3NhZ2VzIGlmIHRoZXkgaGF2ZSBubyBtb3JlIHRoYW4gdGhhdCBtYW55IGZpbGUgZGVzY3JpcHRvcnMKLSAgYXR0YWNoZWQuIEluIHByYWN0aWNlLCBydWxlcyB3aXRoIHRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBtb3N0IGNvbW1vbmx5Ci0gIHRha2UgdGhlIGZvcm0KLSAgPGxpdGVyYWw+Jmx0O2FsbG93IHNlbmRfZGVzdGluYXRpb249IiZoZWxsaXA7IiBtYXhfZmRzPSIwIi8mZ3Q7PC9saXRlcmFsPiwKLSAgPGxpdGVyYWw+Jmx0O2Rlbnkgc2VuZF9kZXN0aW5hdGlvbj0iJmhlbGxpcDsiIG1pbl9mZHM9IjEiLyZndDs8L2xpdGVyYWw+IG9yCi0gIDxsaXRlcmFsPiZsdDtkZW55IHJlY2VpdmVfc2VuZGVyPSIqIiBtaW5fZmRzPSIxIi8mZ3Q7PC9saXRlcmFsPi4KLTwvcGFyYT4KIAotPHBhcmE+Ci0gIFJ1bGVzIHdpdGggdGhlIDxsaXRlcmFsPnVzZXI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmdyb3VwPC9saXRlcmFsPgotICBhdHRyaWJ1dGUgYXJlIGNoZWNrZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBtZXNzYWdlIGJ1cyBpcwotICBlc3RhYmxpc2hlZCwgYW5kIGNvbnRyb2wgd2hldGhlciB0aGUgY29ubmVjdGlvbiBjYW4gY29udGludWUuCi0gIEVhY2ggb2YgdGhlc2UgYXR0cmlidXRlcyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIKLSAgYXR0cmlidXRlLiBBcyBhIHNwZWNpYWwgY2FzZSwgYm90aCA8bGl0ZXJhbD51c2VyPSIqIjwvbGl0ZXJhbD4gYW5kCi0gIDxsaXRlcmFsPmdyb3VwPSIqIjwvbGl0ZXJhbD4gbWF0Y2ggYW55IGNvbm5lY3Rpb24uIElmIHRoZXJlIGFyZQotICBubyBydWxlcyBvZiB0aGlzIGZvcm0sIHRoZSBkZWZhdWx0IGlzIHRvIGFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHNhbWUKLSAgdXNlciBJRCB0aGF0IG93bnMgdGhlIDxjb21tYW5kPmRidXMtZGFlbW9uPC9jb21tYW5kPiBwcm9jZXNzLiBUaGUgd2VsbC1rbm93bgotICBzZXNzaW9uIGJ1cyBub3JtYWxseSB1c2VzIHRoYXQgZGVmYXVsdCBiZWhhdmlvdXIsIHdoaWxlIHRoZSB3ZWxsLWtub3duCi0gIHN5c3RlbSBidXMgbm9ybWFsbHkgYWxsb3dzIGFueSBjb25uZWN0aW9uLgotPC9wYXJhPgorPHBhcmE+dXNlciBhbmQgZ3JvdXAgZGVuaWFscyBtZWFuIHRoYXQgdGhlIGdpdmVuIHVzZXIgb3IgZ3JvdXAgbWF5Citub3QgY29ubmVjdCB0byB0aGUgbWVzc2FnZSBidXMuPC9wYXJhPgogCi08cGFyYT4KLSAgUnVsZXMgd2l0aCB0aGUgPGxpdGVyYWw+b3duPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5vd25fcHJlZml4PC9saXRlcmFsPgotICBhdHRyaWJ1dGUgYXJlIGNoZWNrZWQgd2hlbiBhIGNvbm5lY3Rpb24gYXR0ZW1wdHMgdG8gb3duIGEgd2VsbC1rbm93biBidXMKLSAgbmFtZXMuIEFzIGEgc3BlY2lhbCBjYXNlLCA8bGl0ZXJhbD5vd249IioiPC9saXRlcmFsPiBtYXRjaGVzIGFueSB3ZWxsLWtub3duCi0gIGJ1cyBuYW1lLiBUaGUgd2VsbC1rbm93biBzZXNzaW9uIGJ1cyBub3JtYWxseSBhbGxvd3MgYW55IGNvbm5lY3Rpb24gdG8KLSAgb3duIGFueSBuYW1lLCB3aGlsZSB0aGUgd2VsbC1rbm93biBzeXN0ZW0gYnVzIG5vcm1hbGx5IGRvZXMgbm90IGFsbG93IGFueQotICBjb25uZWN0aW9uIHRvIG93biBhbnkgbmFtZSwgZXhjZXB0IHdoZXJlIGFsbG93ZWQgYnkgZnVydGhlciBjb25maWd1cmF0aW9uLgotICBTeXN0ZW0gc2VydmljZXMgdGhhdCB3aWxsIG93biBhIG5hbWUgbXVzdCBpbnN0YWxsIGNvbmZpZ3VyYXRpb24gdGhhdCBhbGxvd3MKLSAgdGhlbSB0byBkbyBzbywgdXN1YWxseSB2aWEgcnVsZXMgb2YgdGhlIGZvcm0KLSAgPGxpdGVyYWw+Jmx0O3BvbGljeSB1c2VyPSJzb21lLXN5c3RlbS11c2VyIiZndDsmbHQ7YWxsb3cgb3duPSImaGVsbGlwOyIvJmd0OyZsdDsvcG9saWN5Jmd0OzwvbGl0ZXJhbD4uCi08L3BhcmE+CisKKzxwYXJhPkZvciAibmFtZSIsICJ1c2VybmFtZSIsICJncm91cG5hbWUiLCBldGMuCit0aGUgY2hhcmFjdGVyICIqIiBjYW4gYmUgc3Vic3RpdHV0ZWQsIG1lYW5pbmcgImFueS4iIENvbXBsZXggZ2xvYnMKK2xpa2UgImZvby5iYXIuKiIgYXJlbid0IGFsbG93ZWQgZm9yIG5vdyBiZWNhdXNlIHRoZXknZCBiZSB3b3JrIHRvCitpbXBsZW1lbnQgYW5kIG1heWJlIGVuY291cmFnZSBzbG9wcHkgc2VjdXJpdHkgYW55d2F5LjwvcGFyYT4KKwogCiA8cGFyYT4mbHQ7YWxsb3cgb3duX3ByZWZpeD0iYS5iIi8mZ3Q7IGFsbG93cyB5b3UgdG8gb3duIHRoZSBuYW1lICJhLmIiIG9yIGFueQogbmFtZSB3aG9zZSBmaXJzdCBkb3Qtc2VwYXJhdGVkIGVsZW1lbnRzIGFyZSAiYS5iIjogaW4gcGFydGljdWxhciwKZGlmZiAtLWdpdCBhL2RvYy9kYnVzLWxhdW5jaC4xIGIvZG9jL2RidXMtbGF1bmNoLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYTNiZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9kYnVzLWxhdW5jaC4xCkBAIC0wLDAgKzEsMjExIEBACisuXCIgCisuXCIgZGJ1c1wtbGF1bmNoIG1hbnVhbCBwYWdlLgorLlwiIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuCisuXCIKKy5USCBkYnVzXC1sYXVuY2ggMQorLlNIIE5BTUUKK2RidXNcLWxhdW5jaCBcLSBVdGlsaXR5IHRvIHN0YXJ0IGEgbWVzc2FnZSBidXMgZnJvbSBhIHNoZWxsIHNjcmlwdAorLlNIIFNZTk9QU0lTCisuUFAKKy5CIGRidXNcLWxhdW5jaCBbXC1cLXZlcnNpb25dIFtcLVwtc2hcLXN5bnRheF0gW1wtXC1jc2hcLXN5bnRheF0gW1wtXC1hdXRvXC1zeW50YXhdIFtcLVwtZXhpdFwtd2l0aFwtc2Vzc2lvbl0gW1wtXC1hdXRvbGF1bmNoPU1BQ0hJTkVJRF0gW1wtXC1jb25maWdcLWZpbGU9RklMRU5BTUVdIFtQUk9HUkFNXSBbQVJHUy4uLl0KKworLlNIIERFU0NSSVBUSU9OCisKK1RoZSBcZklkYnVzXC1sYXVuY2hcZlAgY29tbWFuZCBpcyB1c2VkIHRvIHN0YXJ0IGEgc2Vzc2lvbiBidXMgCitpbnN0YW5jZSBvZiBcZklkYnVzXC1kYWVtb25cZlAgZnJvbSBhIHNoZWxsIHNjcmlwdC4KK0l0IHdvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCBmcm9tIGEgdXNlcidzIGxvZ2luCitzY3JpcHRzLiBVbmxpa2UgdGhlIGRhZW1vbiBpdHNlbGYsIFxmSWRidXNcLWxhdW5jaFxmUCBleGl0cywgc28KK2JhY2t0aWNrcyBvciB0aGUgJCgpIGNvbnN0cnVjdCBjYW4gYmUgdXNlZCB0byByZWFkIGluZm9ybWF0aW9uIGZyb20KK1xmSWRidXNcLWxhdW5jaFxmUC4KKworV2l0aCBubyBhcmd1bWVudHMsIFxmSWRidXNcLWxhdW5jaFxmUCB3aWxsIGxhdW5jaCBhIHNlc3Npb24gYnVzCitpbnN0YW5jZSBhbmQgcHJpbnQgdGhlIGFkZHJlc3MgYW5kIFBJRCBvZiB0aGF0IGluc3RhbmNlIHRvIHN0YW5kYXJkCitvdXRwdXQuCisKK1lvdSBtYXkgc3BlY2lmeSBhIHByb2dyYW0gdG8gYmUgcnVuOyBpbiB0aGlzIGNhc2UsIFxmSWRidXNcLWxhdW5jaFxmUAord2lsbCBsYXVuY2ggYSBzZXNzaW9uIGJ1cyBpbnN0YW5jZSwgc2V0IHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudAordmFyaWFibGVzIHNvIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbSBjYW4gZmluZCB0aGUgYnVzLCBhbmQgdGhlbiBleGVjdXRlIHRoZQorc3BlY2lmaWVkIHByb2dyYW0sIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuICBTZWUgYmVsb3cgZm9yCitleGFtcGxlcy4KKworSWYgeW91IGxhdW5jaCBhIHByb2dyYW0sIFxmSWRidXNcLWxhdW5jaFxmUCB3aWxsIG5vdCBwcmludCB0aGUKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgYnVzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworV2hlbiBcZklkYnVzXC1sYXVuY2hcZlAgcHJpbnRzIGJ1cyBpbmZvcm1hdGlvbiB0byBzdGFuZGFyZCBvdXRwdXQsIGJ5CitkZWZhdWx0IGl0IGlzIGluIGEgc2ltcGxlIGtleVwtdmFsdWUgcGFpcnMgZm9ybWF0LiBIb3dldmVyLCB5b3UgbWF5IAorcmVxdWVzdCBzZXZlcmFsIGFsdGVybmF0ZSBzeW50YXhlcyB1c2luZyB0aGUgXC1cLXNoXC1zeW50YXgsIFwtXC1jc2hcLXN5bnRheCwKK1wtXC1iaW5hcnlcLXN5bnRheCwgb3IKK1wtXC1hdXRvXC1zeW50YXggb3B0aW9ucy4gU2V2ZXJhbCBvZiB0aGVzZSBjYXVzZSBcZklkYnVzXC1sYXVuY2hcZlAgdG8gZW1pdCBzaGVsbCBjb2RlCit0byBzZXQgdXAgdGhlIGVudmlyb25tZW50LgorCitXaXRoIHRoZSBcLVwtYXV0b1wtc3ludGF4IG9wdGlvbiwgXGZJZGJ1c1wtbGF1bmNoXGZQIGxvb2tzIGF0IHRoZSB2YWx1ZQorb2YgdGhlIFNIRUxMIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGljaCBzaGVsbCBzeW50YXgKK3Nob3VsZCBiZSB1c2VkLiAgSWYgU0hFTEwgZW5kcyBpbiAiY3NoIiwgdGhlbiBjc2hcLWNvbXBhdGlibGUgY29kZSBpcworZW1pdHRlZDsgb3RoZXJ3aXNlIEJvdXJuZSBzaGVsbCBjb2RlIGlzIGVtaXR0ZWQuICBJbnN0ZWFkIG9mIHBhc3NpbmcKK1wtXC1hdXRvXC1zeW50YXgsIHlvdSBtYXkgZXhwbGljaXRseSBzcGVjaWZ5IGEgcGFydGljdWxhciBvbmUgYnkgdXNpbmcKK1wtXC1zaFwtc3ludGF4IGZvciBCb3VybmUgc3ludGF4LCBvciBcLVwtY3NoXC1zeW50YXggZm9yIGNzaCBzeW50YXguCitJbiBzY3JpcHRzLCBpdCdzIG1vcmUgcm9idXN0IHRvIGF2b2lkIFwtXC1hdXRvXC1zeW50YXggYW5kIHlvdSBob3BlZnVsbHkKK2tub3cgd2hpY2ggc2hlbGwgeW91ciBzY3JpcHQgaXMgd3JpdHRlbiBpbi4KKworLlBQCitTZWUgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cy8gZm9yIG1vcmUgaW5mb3JtYXRpb24KK2Fib3V0IERcLUJ1cy4gU2VlIGFsc28gdGhlIG1hbiBwYWdlIGZvciBcZklkYnVzXC1kYWVtb25cZlAuCisKKy5TSCBFWEFNUExFUworCitEaXN0cmlidXRpb25zIHJ1bm5pbmcKKy5CIGRidXNcLWxhdW5jaAorYXMgcGFydCBvZiBhIHN0YW5kYXJkIFggc2Vzc2lvbiBzaG91bGQgcnVuCisuQiAiZGJ1c1wtbGF1bmNoIFwtXC1leGl0XC13aXRoXC1zZXNzaW9uIgorYWZ0ZXIgdGhlIFggc2VydmVyIGhhcyBzdGFydGVkIGFuZCBiZWNvbWUgYXZhaWxhYmxlLCBhcyBhIHdyYXBwZXIgYXJvdW5kCit0aGUgIm1haW4iIFggY2xpZW50ICh0eXBpY2FsbHkgYSBzZXNzaW9uIG1hbmFnZXIgb3Igd2luZG93IG1hbmFnZXIpLCBhcyBpbgordGhlc2UgZXhhbXBsZXM6CisKKy5SUworLkIgImRidXNcLWxhdW5jaCBcLVwtZXhpdFwtd2l0aFwtc2Vzc2lvbiBnbm9tZVwtc2Vzc2lvbiIKKworLkIgImRidXNcLWxhdW5jaCBcLVwtZXhpdFwtd2l0aFwtc2Vzc2lvbiBvcGVuYm94IgorCisuQiAiZGJ1c1wtbGF1bmNoIFwtXC1leGl0XC13aXRoXC1zZXNzaW9uIH4vLnhzZXNzaW9uIgorLlJFCisKK0lmIHlvdXIgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGRvIHRoaXMsIHlvdSBjYW4gYWNoaWV2ZSBzaW1pbGFyIHJlc3VsdHMKK2J5IHJ1bm5pbmcgeW91ciBzZXNzaW9uIG9yIHdpbmRvdyBtYW5hZ2VyIGluIHRoZSBzYW1lIHdheSBpbiBhIHNjcmlwdAorcnVuIGJ5IHlvdXIgWCBzZXNzaW9uLCBzdWNoIGFzCisuQlIgfi8ueHNlc3Npb24gLAorLkIgfi8ueGluaXRyYworb3IKKy5CUiB+Ly5YY2xpZW50cyAuCisKK1RvIHN0YXJ0IGEgRC1CdXMgc2Vzc2lvbiB3aXRoaW4gYSB0ZXh0LW1vZGUgc2Vzc2lvbiwgeW91IGNhbiBydW4KK2RidXMtbGF1bmNoIGluIHRoZSBiYWNrZ3JvdW5kLiBGb3IgaW5zdGFuY2UsIGluIGEgc2gtY29tcGF0aWJsZSBzaGVsbDoKKworLm5mCisgICMjIHRlc3QgZm9yIGFuIGV4aXN0aW5nIGJ1cyBkYWVtb24sIGp1c3QgdG8gYmUgc2FmZQorICBpZiB0ZXN0IFwteiAiJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIgOyB0aGVuCisgICAgICAjIyBpZiBub3QgZm91bmQsIGxhdW5jaCBhIG5ldyBvbmUKKyAgICAgIGV2YWwgYGRidXNcLWxhdW5jaCBcLVwtc2hcLXN5bnRheGAKKyAgICAgIGVjaG8gIkRcLUJ1cyBwZXJcLXNlc3Npb24gZGFlbW9uIGFkZHJlc3MgaXM6ICREQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiCisgIGZpCisuZmkKK05vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIGRidXMtbGF1bmNoIHdpbGwgZXhpdCwgYW5kIGRidXMtZGFlbW9uIHdpbGwgbm90IGJlCit0ZXJtaW5hdGVkIGF1dG9tYXRpY2FsbHkgb24gbG9nb3V0LgorCisuU0ggQVVUT01BVElDIExBVU5DSElORworCisuUFAKK0lmIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyBpcyBub3Qgc2V0IGZvciBhIHByb2Nlc3MgdGhhdCB0cmllcyB0byB1c2UKK0RcLUJ1cywgYnkgZGVmYXVsdCB0aGUgcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8gaW52b2tlIGRidXNcLWxhdW5jaCB3aXRoCit0aGUgXC1cLWF1dG9sYXVuY2ggb3B0aW9uIHRvIHN0YXJ0IHVwIGEgbmV3IHNlc3Npb24gYnVzIG9yIGZpbmQgdGhlIAorZXhpc3RpbmcgYnVzIGFkZHJlc3Mgb24gdGhlIFggZGlzcGxheSBvciBpbiBhIGZpbGUgaW4KK34vLmRidXMvc2Vzc2lvblwtYnVzLworCisuUFAKK1doZW5ldmVyIGFuIGF1dG9sYXVuY2ggb2NjdXJzLCB0aGUgYXBwbGljYXRpb24gdGhhdCBoYWQgdG8KK3N0YXJ0IGEgbmV3IGJ1cyB3aWxsIGJlIGluIGl0cyBvd24gbGl0dGxlIHdvcmxkOyBpdCBjYW4gZWZmZWN0aXZlbHkKK2VuZCB1cCBzdGFydGluZyBhIHdob2xlIG5ldyBzZXNzaW9uIGlmIGl0IHRyaWVzIHRvIHVzZSBhIGxvdCBvZiAKK2J1cyBzZXJ2aWNlcy4gVGhpcyBjYW4gYmUgc3Vib3B0aW1hbCBvciBldmVuIHRvdGFsbHkgYnJva2VuLCBkZXBlbmRpbmcKK29uIHRoZSBhcHAgYW5kIHdoYXQgaXQgdHJpZXMgdG8gZG8uCisKKy5QUAorVGhlcmUgYXJlIHR3byBjb21tb24gcmVhc29ucyBmb3IgYXV0b2xhdW5jaC4gT25lIGlzIHNzaCB0byBhIHJlbW90ZQorbWFjaGluZS4gVGhlIGlkZWFsIGZpeCBmb3IgdGhhdCB3b3VsZCBiZSBmb3J3YXJkaW5nIG9mCitEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgaW4gdGhlIHNhbWUgd2F5IHRoYXQgRElTUExBWSBpcyBmb3J3YXJkZWQuCitJbiB0aGUgbWVhbnRpbWUsIHlvdSBjYW4gZWRpdCB0aGUgc2Vzc2lvbi5jb25mIGNvbmZpZyBmaWxlIHRvIAoraGF2ZSB5b3VyIHNlc3Npb24gYnVzIGxpc3RlbiBvbiBUQ1AsIGFuZCBtYW51YWxseSBzZXQKK0RCVVNfU0VTU0lPTl9CVVNfQUREUkVTUywgaWYgeW91IGxpa2UuCisKKy5QUAorVGhlIHNlY29uZCBjb21tb24gcmVhc29uIGZvciBhdXRvbGF1bmNoIGlzIGFuIHN1IHRvIGFub3RoZXIgdXNlciwgYW5kCitkaXNwbGF5IG9mIFggYXBwbGljYXRpb25zIHJ1bm5pbmcgYXMgdGhlIHNlY29uZCB1c2VyIG9uIHRoZSBkaXNwbGF5CitiZWxvbmdpbmcgdG8gdGhlIGZpcnN0IHVzZXIuIFBlcmhhcHMgdGhlIGlkZWFsIGZpeCBpbiB0aGlzIGNhc2UKK3dvdWxkIGJlIHRvIGFsbG93IHRoZSBzZWNvbmQgdXNlciB0byBjb25uZWN0IHRvIHRoZSBzZXNzaW9uIGJ1cyBvZiB0aGUKK2ZpcnN0IHVzZXIsIGp1c3QgYXMgdGhleSBjYW4gY29ubmVjdCB0byB0aGUgZmlyc3QgdXNlcidzIGRpc3BsYXkuCitIb3dldmVyLCBhIG1lY2hhbmlzbSBmb3IgdGhhdCBoYXMgbm90IGJlZW4gY29kZWQuCisKKy5QUAorWW91IGNhbiBhbHdheXMgYXZvaWQgYXV0b2xhdW5jaCBieSBtYW51YWxseSBzZXR0aW5nCitEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MuIEF1dG9sYXVuY2ggaGFwcGVucyBiZWNhdXNlIHRoZSBkZWZhdWx0CithZGRyZXNzIGlmIG5vbmUgaXMgc2V0IGlzICJhdXRvbGF1bmNoOiIsIHNvIGlmIGFueSBvdGhlciBhZGRyZXNzIGlzCitzZXQgdGhlcmUgd2lsbCBiZSBubyBhdXRvbGF1bmNoLiBZb3UgY2FuIGhvd2V2ZXIgaW5jbHVkZSBhdXRvbGF1bmNoIGluCithbiBleHBsaWNpdCBzZXNzaW9uIGJ1cyBhZGRyZXNzIGFzIGEgZmFsbGJhY2ssIGZvciBleGFtcGxlCitEQlVTX1NFU1NJT05fQlVTX0FERFJFU1M9InNvbWV0aGluZzosYXV0b2xhdW5jaDoiIFwtIGluIHRoYXQgY2FzZSBpZgordGhlIGZpcnN0IGFkZHJlc3MgZG9lc24ndCB3b3JrLCBwcm9jZXNzZXMgd2lsbCBhdXRvbGF1bmNoLiAoVGhlIGJ1cworYWRkcmVzcyB2YXJpYWJsZSBjb250YWlucyBhIGNvbW1hXC1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRyZXNzZXMgdG8gdHJ5LikKKworLlBQCitUaGUgXC1cLWF1dG9sYXVuY2ggb3B0aW9uIGlzIGNvbnNpZGVyZWQgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24KK2RldGFpbCBvZiBsaWJkYnVzLCBhbmQgaW4gZmFjdCB0aGVyZSBhcmUgcGxhbnMgdG8gY2hhbmdlIGl0LiBUaGVyZSdzCitubyByZWFsIHJlYXNvbiB0byB1c2UgaXQgb3V0c2lkZSBvZiB0aGUgbGliZGJ1cyBpbXBsZW1lbnRhdGlvbiBhbnlob3cuCisKKy5TSCBPUFRJT05TCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5UUAorLkkgIlwtXC1hdXRvXC1zeW50YXgiCitDaG9vc2UgXC1cLWNzaFwtc3ludGF4IG9yIFwtXC1zaFwtc3ludGF4IGJhc2VkIG9uIHRoZSBTSEVMTCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworLkkgIlwtXC1iaW5hcnlcLXN5bnRheCIKK1dyaXRlIHRvIHN0ZG91dCBhIG51bFwtdGVybWluYXRlZCBidXMgYWRkcmVzcywgdGhlbiB0aGUgYnVzIFBJRCBhcyBhCitiaW5hcnkgaW50ZWdlciBvZiBzaXplIHNpemVvZihwaWRfdCksIHRoZW4gdGhlIGJ1cyBYIHdpbmRvdyBJRCBhcyBhCitiaW5hcnkgaW50ZWdlciBvZiBzaXplIHNpemVvZihsb25nKS4gSW50ZWdlcnMgYXJlIGluIHRoZSBtYWNoaW5lJ3MKK2J5dGUgb3JkZXIsIG5vdCBuZXR3b3JrIGJ5dGUgb3JkZXIgb3IgYW55IG90aGVyIGNhbm9uaWNhbCBieXRlIG9yZGVyLgorCisuVFAKKy5JICJcLVwtY2xvc2VcLXN0ZGVyciIKK0Nsb3NlIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgc3RyZWFtIGJlZm9yZSBzdGFydGluZyB0aGUgRFwtQnVzCitkYWVtb24uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNhcHR1cmUgZGJ1c1wtbGF1bmNoIGVycm9yCittZXNzYWdlcyBidXQgeW91IGRvbid0IHdhbnQgZGJ1c1wtZGFlbW9uIHRvIGtlZXAgdGhlIHN0cmVhbSBvcGVuIHRvCit5b3VyIGFwcGxpY2F0aW9uLgorCisuVFAKKy5JICJcLVwtY29uZmlnXC1maWxlPUZJTEVOQU1FIgorUGFzcyBcLVwtY29uZmlnXC1maWxlPUZJTEVOQU1FIHRvIHRoZSBidXMgZGFlbW9uLCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgCit0aGUgXC1cLXNlc3Npb24gYXJndW1lbnQuIFNlZSB0aGUgbWFuIHBhZ2UgZm9yIGRidXNcLWRhZW1vbgorCisuVFAKKy5JICJcLVwtY3NoXC1zeW50YXgiCitFbWl0IGNzaCBjb21wYXRpYmxlIGNvZGUgdG8gc2V0IHVwIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworLlRQCisuSSAiXC1cLWV4aXRcLXdpdGhcLXNlc3Npb24iCitJZiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZCwgYSBwZXJzaXN0ZW50ICJiYWJ5c2l0dGVyIiBwcm9jZXNzIHdpbGwgYmUgCitjcmVhdGVkIHRoYXQgd2F0Y2hlcyBzdGRpbiBmb3IgSFVQIGFuZCB0cmllcyB0byBjb25uZWN0IHRvIHRoZSBYCitzZXJ2ZXIuIElmIHRoaXMgcHJvY2VzcyBnZXRzIGEgSFVQIG9uIHN0ZGluIG9yIGxvc2VzIGl0cyBYIGNvbm5lY3Rpb24sCitpdCBraWxscyB0aGUgbWVzc2FnZSBidXMgZGFlbW9uLgorCisuVFAKKy5JICJcLVwtYXV0b2xhdW5jaD1NQUNISU5FSUQiCitUaGlzIG9wdGlvbiBpbXBsaWVzIHRoYXQgXGZJZGJ1c1wtbGF1bmNoXGZQIHNob3VsZCBzY2FuIGZvciBhCitwcmV2aW91c2x5XC1zdGFydGVkIHNlc3Npb24gYW5kIHJldXNlIHRoZSB2YWx1ZXMgZm91bmQgdGhlcmUuIElmIG5vCitzZXNzaW9uIGlzIGZvdW5kLCBpdCB3aWxsIHN0YXJ0IGEgbmV3IHNlc3Npb24uIFRoZQorXC1cLWV4aXRcLXdpdGhcLXNlc3Npb24gb3B0aW9uIGlzIGltcGxpZWQgaWYgXC1cLWF1dG9sYXVuY2ggaXMgZ2l2ZW4uCitUaGlzIG9wdGlvbiBpcyBmb3IgdGhlIGV4Y2x1c2l2ZSB1c2Ugb2YgbGliZGJ1cywgeW91IGRvIG5vdCB3YW50IHRvCit1c2UgaXQgbWFudWFsbHkuIEl0IG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKworLlRQCisuSSAiXC1cLXNoXC1zeW50YXgiCitFbWl0IEJvdXJuZVwtc2hlbGwgY29tcGF0aWJsZSBjb2RlIHRvIHNldCB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKy5UUAorLkkgIlwtXC12ZXJzaW9uIgorUHJpbnQgdGhlIHZlcnNpb24gb2YgZGJ1c1wtbGF1bmNoCisKKy5TSCBOT1RFUworCitJZiB5b3UgcnVuCisuQiAiZGJ1c1wtbGF1bmNoIG15YXBwIgorKHdpdGggYW55IG90aGVyIG9wdGlvbnMpLCBkYnVzXC1kYWVtb24gd2lsbAorLkkgbm90CitleGl0IHdoZW4KKy5CIG15YXBwCit0ZXJtaW5hdGVzOiB0aGlzIGlzIGJlY2F1c2UKKy5CIG15YXBwCitpcyBhc3N1bWVkIHRvIGJlIHBhcnQgb2YgYSBsYXJnZXIgc2Vzc2lvbiwgcmF0aGVyIHRoYW4gYSBzZXNzaW9uIGluIGl0cworb3duIHJpZ2h0LgorCisuU0ggQVVUSE9SCitTZWUgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cy9kb2MvQVVUSE9SUworCisuU0ggQlVHUworUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIERcLUJ1cyBtYWlsaW5nIGxpc3Qgb3IgYnVnIHRyYWNrZXIsCitzZWUgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cy8KZGlmZiAtLWdpdCBhL2RvYy9kYnVzLWxhdW5jaC4xLnhtbC5pbiBiL2RvYy9kYnVzLWxhdW5jaC4xLnhtbC5pbgppbmRleCAyZmNlYTAzLi41MTM1ZDljIDEwMDY0NAotLS0gYS9kb2MvZGJ1cy1sYXVuY2guMS54bWwuaW4KKysrIGIvZG9jL2RidXMtbGF1bmNoLjEueG1sLmluCkBAIC0yOSw3ICsyOSw2IEBACiAgICAgPGFyZyBjaG9pY2U9J29wdCc+LS1iaW5hcnktc3ludGF4IDwvYXJnPgogICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tY2xvc2Utc3RkZXJyIDwvYXJnPgogICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tZXhpdC13aXRoLXNlc3Npb24gPC9hcmc+Ci0gICAgPGFyZyBjaG9pY2U9J29wdCc+LS1leGl0LXdpdGgteDExIDwvYXJnPgogICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tYXV0b2xhdW5jaD08cmVwbGFjZWFibGU+TUFDSElORUlEPC9yZXBsYWNlYWJsZT48L2FyZz4KICAgICA8YXJnIGNob2ljZT0nb3B0Jz4tLWNvbmZpZy1maWxlPTxyZXBsYWNlYWJsZT5GSUxFTkFNRTwvcmVwbGFjZWFibGU+PC9hcmc+CiAgICAgPGFyZyBjaG9pY2U9J29wdCc+PHJlcGxhY2VhYmxlPlBST0dSQU08L3JlcGxhY2VhYmxlPjwvYXJnPgpAQCAtMjE3LDM1ICsyMTYsMTYgQEAKIAogICA8L2xpc3RpdGVtPgogICA8L3Zhcmxpc3RlbnRyeT4KLQogICA8dmFybGlzdGVudHJ5PgotICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LXdpdGgteDExPC9vcHRpb24+PC90ZXJtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPklmIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBhIHBlcnNpc3RlbnQgImJhYnlzaXR0ZXIiIHByb2Nlc3MKLSAgICAgICAgd2lsbCBiZSBjcmVhdGVkLCBhbmQgd2lsbCBjb25uZWN0IHRvIHRoZSBYIHNlcnZlci4gSWYgaXQgY2Fubm90Ci0gICAgICAgIGRvIHNvLCBsYXVuY2hpbmcgZmFpbHMuIElmIHRoZSAiYmFieXNpdHRlciIgcHJvY2VzcyBsb3NlcyBpdHMKLSAgICAgICAgWCBjb25uZWN0aW9uLCBpdCBraWxscyB0aGUgbWVzc2FnZSBidXMgZGFlbW9uLCBkaXNjb25uZWN0aW5nCi0gICAgICAgIGFsbCBvZiBpdHMgY2xpZW50cyAod2hpY2ggc2hvdWxkIGV4aXQgaW4gcmVzcG9uc2UpLiBUaGlzIGF2b2lkcwotICAgICAgICBoYXZpbmcgbGVmdG92ZXIgZGFlbW9uIHByb2Nlc3NlcyBmcm9tIGEgdXNlciBYIHNlc3Npb24sIGFmdGVyCi0gICAgICAgIHRoZSBYIHNlc3Npb24gaGFzIGVuZGVkLjwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtd2l0aC1zZXNzaW9uPC9vcHRpb24+PC90ZXJtPgorICA8bGlzdGl0ZW0+Cis8cGFyYT5JZiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZCwgYSBwZXJzaXN0ZW50ICJiYWJ5c2l0dGVyIiBwcm9jZXNzIHdpbGwgYmUKK2NyZWF0ZWQgdGhhdCB3YXRjaGVzIHN0ZGluIGZvciBIVVAgYW5kIHRyaWVzIHRvIGNvbm5lY3QgdG8gdGhlIFgKK3NlcnZlci4gSWYgdGhpcyBwcm9jZXNzIGdldHMgYSBIVVAgb24gc3RkaW4gb3IgbG9zZXMgaXRzIFggY29ubmVjdGlvbiwKK2l0IGtpbGxzIHRoZSBtZXNzYWdlIGJ1cyBkYWVtb24uPC9wYXJhPgogCi0gIDx2YXJsaXN0ZW50cnk+Ci0gICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtd2l0aC1zZXNzaW9uPC9vcHRpb24+PC90ZXJtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZCwgYSBwZXJzaXN0ZW50ICJiYWJ5c2l0dGVyIiBwcm9jZXNzIHdpbGwKLSAgICAgICAgYmUgY3JlYXRlZCwgYXMgaWYgZm9yIC0tZXhpdC13aXRoLXgxMS4gSWYgaXQgY2Fubm90IGNvbm5lY3QgdG8KLSAgICAgICAgdGhlIFggc2VydmVyLCBpdCB3aWxsIG1vbml0b3IgdGhlIHRlcm1pbmFsIGZyb20gd2hpY2ggZGJ1cy1sYXVuY2gKLSAgICAgICAgd2FzIHN0YXJ0ZWQgaW5zdGVhZCwgYW5kIGlmIGl0IGdldHMgYSBIVVAgb24gc3RkaW4sIHRoZSBtZXNzYWdlCi0gICAgICAgIGJ1cyBkYWVtb24gd2lsbCBiZSBraWxsZWQuIFRoaXMgb3B0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCwgc2luY2UKLSAgICAgICAgaXQgd2lsbCBjb25zdW1lIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsIHdoZXJlIGl0IHdhcyBzdGFydGVkOwotICAgICAgICBpdCBpcyBtYWlubHkgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+CisgIDwvbGlzdGl0ZW0+CiAgIDwvdmFybGlzdGVudHJ5PgotCiAgIDx2YXJsaXN0ZW50cnk+CiAgIDx0ZXJtPjxvcHRpb24+LS1hdXRvbGF1bmNoPU1BQ0hJTkVJRDwvb3B0aW9uPjwvdGVybT4KICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvZG9jL2RidXMtbW9uaXRvci4xIGIvZG9jL2RidXMtbW9uaXRvci4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODJiOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZGJ1cy1tb25pdG9yLjEKQEAgLTAsMCArMSw3OCBAQAorLlwiIAorLlwiIGRidXNcLW1vbml0b3IgbWFudWFsIHBhZ2UuCisuXCIgQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4KKy5cIgorLlRIIGRidXNcLW1vbml0b3IgMQorLlNIIE5BTUUKK2RidXNcLW1vbml0b3IgXC0gZGVidWcgcHJvYmUgdG8gcHJpbnQgbWVzc2FnZSBidXMgbWVzc2FnZXMKKy5TSCBTWU5PUFNJUworLlBQCisuQiBkYnVzXC1tb25pdG9yCitbXC1cLXN5c3RlbSB8IFwtXC1zZXNzaW9uIHwgXC1cLWFkZHJlc3MgQUREUkVTU10gW1wtXC1wcm9maWxlIHwgXC1cLW1vbml0b3JdCitbd2F0Y2ggZXhwcmVzc2lvbnNdCisKKy5TSCBERVNDUklQVElPTgorCitUaGUgXGZJZGJ1c1wtbW9uaXRvclxmUCBjb21tYW5kIGlzIHVzZWQgdG8gbW9uaXRvciBtZXNzYWdlcyBnb2luZwordGhyb3VnaCBhIERcLUJ1cyBtZXNzYWdlIGJ1cy4gIFNlZQoraHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBiaWcgcGljdHVyZS4KKworLlBQCitUaGVyZSBhcmUgdHdvIHdlbGxcLWtub3duIG1lc3NhZ2UgYnVzZXM6IHRoZSBzeXN0ZW13aWRlIG1lc3NhZ2UgYnVzCisoaW5zdGFsbGVkIG9uIG1hbnkgc3lzdGVtcyBhcyB0aGUgIm1lc3NhZ2VidXMiIHNlcnZpY2UpIGFuZCB0aGUKK3BlclwtdXNlclwtbG9naW5cLXNlc3Npb24gbWVzc2FnZSBidXMgKHN0YXJ0ZWQgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGluKS4KK1RoZSBcLVwtc3lzdGVtIGFuZCBcLVwtc2Vzc2lvbiBvcHRpb25zIGRpcmVjdCBcZklkYnVzXC1tb25pdG9yXGZQIHRvCittb25pdG9yIHRoZSBzeXN0ZW0gb3Igc2Vzc2lvbiBidXNlcyByZXNwZWN0aXZlbHkuICBJZiBuZWl0aGVyIGlzCitzcGVjaWZpZWQsIFxmSWRidXNcLW1vbml0b3JcZlAgbW9uaXRvcnMgdGhlIHNlc3Npb24gYnVzLgorCisuUFAKK1xmSWRidXNcLW1vbml0b3JcZlAgaGFzIHR3byBkaWZmZXJlbnQgb3V0cHV0IG1vZGVzLCB0aGUgJ2NsYXNzaWMnXC1zdHlsZQorbW9uaXRvcmluZyBtb2RlIGFuZCBwcm9maWxpbmcgbW9kZS4gVGhlIHByb2ZpbGluZyBmb3JtYXQgaXMgYSBjb21wYWN0Citmb3JtYXQgd2l0aCBhIHNpbmdsZSBsaW5lIHBlciBtZXNzYWdlIGFuZCBtaWNyb3NlY29uZFwtcmVzb2x1dGlvbiB0aW1pbmcKK2luZm9ybWF0aW9uLiBUaGUgXC1cLXByb2ZpbGUgYW5kIFwtXC1tb25pdG9yIG9wdGlvbnMgc2VsZWN0IHRoZSBwcm9maWxpbmcKK2FuZCBtb25pdG9yaW5nIG91dHB1dCBmb3JtYXQgcmVzcGVjdGl2ZWx5LiBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwKK1xmSWRidXNcLW1vbml0b3JcZlAgdXNlcyB0aGUgbW9uaXRvcmluZyBvdXRwdXQgZm9ybWF0LgorCisuUFAKK0luIG9yZGVyIHRvIGdldCBcZklkYnVzXC1tb25pdG9yXGZQIHRvIHNlZSB0aGUgbWVzc2FnZXMgeW91IGFyZSBpbnRlcmVzdGVkCitpbiwgeW91IHNob3VsZCBzcGVjaWZ5IGEgc2V0IG9mIHdhdGNoIGV4cHJlc3Npb25zIGFzIHlvdSB3b3VsZCBleHBlY3QgdG8KK2JlIHBhc3NlZCB0byB0aGUgXGZJZGJ1c19idXNfYWRkX21hdGNoXGZQIGZ1bmN0aW9uLgorCisuUFAgCitUaGUgbWVzc2FnZSBidXMgY29uZmlndXJhdGlvbiBtYXkga2VlcCBcZklkYnVzXC1tb25pdG9yXGZQIGZyb20gc2VlaW5nCithbGwgbWVzc2FnZXMsIGVzcGVjaWFsbHkgaWYgeW91IHJ1biB0aGUgbW9uaXRvciBhcyBhIG5vblwtcm9vdCB1c2VyLgorCisuU0ggT1BUSU9OUworLlRQCisuSSAiXC1cLXN5c3RlbSIKK01vbml0b3IgdGhlIHN5c3RlbSBtZXNzYWdlIGJ1cy4KKy5UUAorLkkgIlwtXC1zZXNzaW9uIgorTW9uaXRvciB0aGUgc2Vzc2lvbiBtZXNzYWdlIGJ1cy4gIChUaGlzIGlzIHRoZSBkZWZhdWx0LikKKy5UUAorLkkgIlwtXC1hZGRyZXNzIEFERFJFU1MiCitNb25pdG9yIGFuIGFyYml0cmFyeSBtZXNzYWdlIGJ1cyBnaXZlbiBhdCBBRERSRVNTLgorLlRQCisuSSAiXC1cLXByb2ZpbGUiCitVc2UgdGhlIHByb2ZpbGluZyBvdXRwdXQgZm9ybWF0LgorLlRQCisuSSAiXC1cLW1vbml0b3IiCitVc2UgdGhlIG1vbml0b3Jpbmcgb3V0cHV0IGZvcm1hdC4gIChUaGlzIGlzIHRoZSBkZWZhdWx0LikKKworLlNIIEVYQU1QTEUKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiB1c2luZyBkYnVzXC1tb25pdG9yIHRvIHdhdGNoIGZvciB0aGUgZ25vbWUgdHlwaW5nCittb25pdG9yIHRvIHNheSB0aGluZ3MKKy5uZgorCisgIGRidXNcLW1vbml0b3IgInR5cGU9J3NpZ25hbCcsc2VuZGVyPSdvcmcuZ25vbWUuVHlwaW5nTW9uaXRvcicsaW50ZXJmYWNlPSdvcmcuZ25vbWUuVHlwaW5nTW9uaXRvciciCisKKy5maQorCisuU0ggQVVUSE9SCitkYnVzXC1tb25pdG9yIHdhcyB3cml0dGVuIGJ5IFBoaWxpcCBCbHVuZGVsbC4KK1RoZSBwcm9maWxpbmcgb3V0cHV0IG1vZGUgd2FzIGFkZGVkIGJ5IE9sbGkgU2FsbGkuCisKKy5TSCBCVUdTCitQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byB0aGUgRFwtQnVzIG1haWxpbmcgbGlzdCBvciBidWcgdHJhY2tlciwKK3NlZSBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kYnVzLwpkaWZmIC0tZ2l0IGEvZG9jL2RidXMtc2VuZC4xIGIvZG9jL2RidXMtc2VuZC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWE2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvZGJ1cy1zZW5kLjEKQEAgLTAsMCArMSwxMDkgQEAKKy5cIiAKKy5cIiBkYnVzXC1zZW5kIG1hbnVhbCBwYWdlLgorLlwiIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuCisuXCIKKy5USCBkYnVzXC1zZW5kIDEKKy5TSCBOQU1FCitkYnVzXC1zZW5kIFwtIFNlbmQgYSBtZXNzYWdlIHRvIGEgbWVzc2FnZSBidXMKKy5TSCBTWU5PUFNJUworLlBQCisuQiBkYnVzXC1zZW5kCitbXGZCXC1cLXN5c3RlbVxmUCB8IFxmQlwtXC1zZXNzaW9uXGZQXQorW1xmQlwtXC1kZXN0PVxmSU5BTUVcZlBdCitbXGZCXC1cLXByaW50XC1yZXBseVxmUFtcZkI9bGl0ZXJhbFxmUF1dCitbXGZCXC1cLXJlcGx5XC10aW1lb3V0PVxmSU1TRUNcZlBdCitbXGZCXC1cLXR5cGU9XGZJVFlQRVxmUF0KK1xmSU9CSkVDVF9QQVRIXGZQIFxmSUlOVEVSRkFDRVxmQi5cZklNRU1CRVJcZlAgW1xmSUNPTlRFTlRTXGZQIC4uLl0KKworLlNIIERFU0NSSVBUSU9OCisKK1RoZSBcZklkYnVzXC1zZW5kXGZQIGNvbW1hbmQgaXMgdXNlZCB0byBzZW5kIGEgbWVzc2FnZSB0byBhIERcLUJ1cyBtZXNzYWdlCitidXMuIFNlZSBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9kYnVzLyBmb3IgbW9yZSAKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBiaWcgcGljdHVyZS4KKworLlBQCitUaGVyZSBhcmUgdHdvIHdlbGxcLWtub3duIG1lc3NhZ2UgYnVzZXM6IHRoZSBzeXN0ZW13aWRlIG1lc3NhZ2UgYnVzIAorKGluc3RhbGxlZCBvbiBtYW55IHN5c3RlbXMgYXMgdGhlICJtZXNzYWdlYnVzIiBzZXJ2aWNlKSBhbmQgdGhlIAorcGVyXC11c2VyXC1sb2dpblwtc2Vzc2lvbiBtZXNzYWdlIGJ1cyAoc3RhcnRlZCBlYWNoIHRpbWUgYSB1c2VyIGxvZ3MgaW4pLgorVGhlIFxmQlwtXC1zeXN0ZW1cZlAgYW5kIFxmQlwtXC1zZXNzaW9uXGZQIG9wdGlvbnMgZGlyZWN0CitcZkJkYnVzXC1zZW5kXGZQIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHN5c3RlbSBvciBzZXNzaW9uIGJ1c2VzIHJlc3BlY3RpdmVseS4KK0lmIG5laXRoZXIgaXMgc3BlY2lmaWVkLCBcZkJkYnVzXC1zZW5kXGZQIHNlbmRzIHRvIHRoZSBzZXNzaW9uIGJ1cy4KKworLlBQIAorTmVhcmx5IGFsbCB1c2VzIG9mIFxmQmRidXNcLXNlbmRcZlAgbXVzdCBwcm92aWRlIHRoZSBcZkJcLVwtZGVzdFxmUCBhcmd1bWVudAord2hpY2ggaXMgdGhlIG5hbWUgb2YgYSBjb25uZWN0aW9uIG9uIHRoZSBidXMgdG8gc2VuZCB0aGUgbWVzc2FnZSB0by4gSWYKK1xmQlwtXC1kZXN0XGZQIGlzIG9taXR0ZWQsIG5vIGRlc3RpbmF0aW9uIGlzIHNldC4KKworLlBQCitUaGUgb2JqZWN0IHBhdGggYW5kIHRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIHRvIHNlbmQgbXVzdCBhbHdheXMgYmUKK3NwZWNpZmllZC4gRm9sbG93aW5nIGFyZ3VtZW50cywgaWYgYW55LCBhcmUgdGhlIG1lc3NhZ2UgY29udGVudHMKKyhtZXNzYWdlIGFyZ3VtZW50cykuICBUaGVzZSBhcmUgZ2l2ZW4gYXMgdHlwZVwtc3BlY2lmaWVkIHZhbHVlcyBhbmQgCittYXkgaW5jbHVkZSBjb250YWluZXJzIChhcnJheXMsIGRpY3RzLCBhbmQgdmFyaWFudHMpIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworLm5mCis8Y29udGVudHM+ICAgOjo9IDxpdGVtPiB8IDxjb250YWluZXI+IFsgPGl0ZW0+IHwgPGNvbnRhaW5lcj4uLi5dCis8aXRlbT4gICAgICAgOjo9IDx0eXBlPjo8dmFsdWU+Cis8Y29udGFpbmVyPiAgOjo9IDxhcnJheT4gfCA8ZGljdD4gfCA8dmFyaWFudD4KKzxhcnJheT4gICAgICA6Oj0gYXJyYXk6PHR5cGU+Ojx2YWx1ZT5bLDx2YWx1ZT4uLi5dIAorPGRpY3Q+ICAgICAgIDo6PSBkaWN0Ojx0eXBlPjo8dHlwZT46PGtleT4sPHZhbHVlPlssPGtleT4sPHZhbHVlPi4uLl0KKzx2YXJpYW50PiAgICA6Oj0gdmFyaWFudDo8dHlwZT46PHZhbHVlPgorPHR5cGU+ICAgICAgIDo6PSBzdHJpbmcgfCBpbnQxNiB8IHVpbnQgMTYgfCBpbnQzMiB8IHVpbnQzMiB8IGludDY0IHwgdWludDY0IHwgZG91YmxlIHwgYnl0ZSB8IGJvb2xlYW4gfCBvYmpwYXRoCisuZmkKKworRFwtQnVzIHN1cHBvcnRzIG1vcmUgdHlwZXMgdGhhbiB0aGVzZSwgYnV0IFxmQmRidXNcLXNlbmRcZlAgY3VycmVudGx5Citkb2VzIG5vdC4gIEFsc28sIFxmQmRidXNcLXNlbmRcZlAgZG9lcyBub3QgcGVybWl0IGVtcHR5IGNvbnRhaW5lcnMKK29yIG5lc3RlZCBjb250YWluZXJzIChlLmcuIGFycmF5cyBvZiB2YXJpYW50cykuCisKKy5QUAorSGVyZSBpcyBhbiBleGFtcGxlIGludm9jYXRpb246CisubmYKKworICBkYnVzXC1zZW5kIFwtXC1kZXN0PW9yZy5mcmVlZGVza3RvcC5FeGFtcGxlTmFtZSAgICAgICAgICAgICAgIFxcCisgICAgICAgICAgICAvb3JnL2ZyZWVkZXNrdG9wL3NhbXBsZS9vYmplY3QvbmFtZSAgICAgICAgICAgICAgXFwKKyAgICAgICAgICAgIG9yZy5mcmVlZGVza3RvcC5FeGFtcGxlSW50ZXJmYWNlLkV4YW1wbGVNZXRob2QgICBcXAorICAgICAgICAgICAgaW50MzI6NDcgc3RyaW5nOidoZWxsbyB3b3JsZCcgZG91YmxlOjY1LjMyICAgICAgIFxcCisgICAgICAgICAgICBhcnJheTpzdHJpbmc6IjFzdCBpdGVtIiwibmV4dCBpdGVtIiwibGFzdCBpdGVtIiAgXFwKKyAgICAgICAgICAgIGRpY3Q6c3RyaW5nOmludDMyOiJvbmUiLDEsInR3byIsMiwidGhyZWUiLDMgICAgICBcXAorICAgICAgICAgICAgdmFyaWFudDppbnQzMjpcLTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXAorICAgICAgICAgICAgb2JqcGF0aDovb3JnL2ZyZWVkZXNrdG9wL3NhbXBsZS9vYmplY3QvbmFtZSAKKworLmZpCisKK05vdGUgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHNlcGFyYXRlZCBmcm9tIGEgbWV0aG9kIG9yIHNpZ25hbCAKK25hbWUgYnkgYSBkb3QsIHRob3VnaCBpbiB0aGUgYWN0dWFsIHByb3RvY29sIHRoZSBpbnRlcmZhY2UKK2FuZCB0aGUgaW50ZXJmYWNlIG1lbWJlciBhcmUgc2VwYXJhdGUgZmllbGRzLgorCisuU0ggT1BUSU9OUworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuVFAKKy5CSSBcLVwtZGVzdD0gTkFNRQorU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvbiB0byByZWNlaXZlIHRoZSBtZXNzYWdlLgorLlRQCisuQiAiXC1cLXByaW50XC1yZXBseSIKK0Jsb2NrIGZvciBhIHJlcGx5IHRvIHRoZSBtZXNzYWdlIHNlbnQsIGFuZCBwcmludCBhbnkgcmVwbHkgcmVjZWl2ZWQKK2luIGEgaHVtYW4tcmVhZGFibGUgZm9ybS4KKy5UUAorLkIgIlwtXC1wcmludFwtcmVwbHk9bGl0ZXJhbCIKK0Jsb2NrIGZvciBhIHJlcGx5IHRvIHRoZSBtZXNzYWdlIHNlbnQsIGFuZCBwcmludCB0aGUgYm9keSBvZiB0aGUKK3JlcGx5LiBJZiB0aGUgcmVwbHkgaXMgYW4gb2JqZWN0IHBhdGggb3IgYSBzdHJpbmcsIGl0IGlzIHByaW50ZWQKK2xpdGVyYWxseSwgd2l0aCBubyBwdW5jdHVhdGlvbiwgZXNjYXBlIGNoYXJhY3RlcnMgZXRjLgorLlRQCisuQkkgXC1cLXJlcGx5XC10aW1lb3V0PSBNU0VDCitXYWl0IGZvciBhIHJlcGx5IGZvciB1cCB0byBcZklNU0VDXGZQIG1pbGxpc2Vjb25kcy4KK1RoZSBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uXChoeWRlZmluZWQsIHR5cGljYWxseSAyNSBzZWNvbmRzLgorLlRQCisuQiAiXC1cLXN5c3RlbSIKK1NlbmQgdG8gdGhlIHN5c3RlbSBtZXNzYWdlIGJ1cy4KKy5UUAorLkIgIlwtXC1zZXNzaW9uIgorU2VuZCB0byB0aGUgc2Vzc2lvbiBtZXNzYWdlIGJ1cy4gIChUaGlzIGlzIHRoZSBkZWZhdWx0LikKKy5UUAorLkJJIFwtXC10eXBlPSBUWVBFCitTcGVjaWZ5IFxmQm1ldGhvZF9jYWxsXGZQIG9yIFxmQnNpZ25hbFxmUCAoZGVmYXVsdHMgdG8gIlxmQnNpZ25hbFxmUCIpLgorCisuU0ggQVVUSE9SCitkYnVzXC1zZW5kIHdhcyB3cml0dGVuIGJ5IFBoaWxpcCBCbHVuZGVsbC4KKworLlNIIEJVR1MKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIHRoZSBEXC1CdXMgbWFpbGluZyBsaXN0IG9yIGJ1ZyB0cmFja2VyLAorc2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvCmRpZmYgLS1naXQgYS9kb2MvZGJ1cy1zZW5kLjEueG1sLmluIGIvZG9jL2RidXMtc2VuZC4xLnhtbC5pbgppbmRleCAzNGM0Yjk5Li44YzFiYmVhIDEwMDY0NAotLS0gYS9kb2MvZGJ1cy1zZW5kLjEueG1sLmluCisrKyBiL2RvYy9kYnVzLXNlbmQuMS54bWwuaW4KQEAgLTIxLDcgKzIxLDggQEAKIDxyZWZzeW5vcHNpc2RpdiBpZD0nc3lub3BzaXMnPgogPGNtZHN5bm9wc2lzPgogICA8Y29tbWFuZD5kYnVzLXNlbmQ8L2NvbW1hbmQ+Ci0gIDxncm91cCBjaG9pY2U9J29wdCc+PGFyZyBjaG9pY2U9J3BsYWluJz4tLXN5c3RlbSA8L2FyZz48YXJnIGNob2ljZT0ncGxhaW4nPi0tc2Vzc2lvbiA8L2FyZz48YXJnIGNob2ljZT0ncGxhaW4nPi0tYnVzPTxyZXBsYWNlYWJsZT5BRERSRVNTPC9yZXBsYWNlYWJsZT48L2FyZz48YXJnIGNob2ljZT0ncGxhaW4nPi0tcGVlcj08cmVwbGFjZWFibGU+QUREUkVTUzwvcmVwbGFjZWFibGU+PC9hcmc+PC9ncm91cD4KKyAgICA8Z3JvdXAgY2hvaWNlPSdvcHQnPjxhcmcgY2hvaWNlPSdwbGFpbic+LS1zeXN0ZW0gPC9hcmc+PGFyZyBjaG9pY2U9J3BsYWluJz4tLXNlc3Npb24gPC9hcmc+PGFyZyBjaG9pY2U9J3BsYWluJz4tLWFkZHJlc3M9PHJlcGxhY2VhYmxlPkFERFJFU1M8L3JlcGxhY2VhYmxlPjwvYXJnPjwvZ3JvdXA+CisgICAgPGFyZyBjaG9pY2U9J29wdCc+LS1zZW5kZXI9PHJlcGxhY2VhYmxlPk5BTUU8L3JlcGxhY2VhYmxlPjwvYXJnPgogICAgIDxhcmcgY2hvaWNlPSdvcHQnPi0tZGVzdD08cmVwbGFjZWFibGU+TkFNRTwvcmVwbGFjZWFibGU+PC9hcmc+CiAgICAgPGFyZyBjaG9pY2U9J29wdCc+PGFyZyBjaG9pY2U9J3BsYWluJz4tLXByaW50LXJlcGx5IDwvYXJnPjxhcmcgY2hvaWNlPSdvcHQnPjxyZXBsYWNlYWJsZT49bGl0ZXJhbDwvcmVwbGFjZWFibGU+PC9hcmc+PC9hcmc+CiAgICAgPGFyZyBjaG9pY2U9J29wdCc+LS1yZXBseS10aW1lb3V0PTxyZXBsYWNlYWJsZT5NU0VDPC9yZXBsYWNlYWJsZT48L2FyZz4KQEAgLTY1LDcgKzY2LDcgQEAKICZsdDthcnJheSZndDsgICAgICA6Oj0gYXJyYXk6Jmx0O3R5cGUmZ3Q7OiZsdDt2YWx1ZSZndDtbLCZsdDt2YWx1ZSZndDsuLi5dCiAmbHQ7ZGljdCZndDsgICAgICAgOjo9IGRpY3Q6Jmx0O3R5cGUmZ3Q7OiZsdDt0eXBlJmd0OzombHQ7a2V5Jmd0OywmbHQ7dmFsdWUmZ3Q7WywmbHQ7a2V5Jmd0OywmbHQ7dmFsdWUmZ3Q7Li4uXQogJmx0O3ZhcmlhbnQmZ3Q7ICAgIDo6PSB2YXJpYW50OiZsdDt0eXBlJmd0OzombHQ7dmFsdWUmZ3Q7Ci0mbHQ7dHlwZSZndDsgICAgICAgOjo9IHN0cmluZyB8IGludDE2IHwgdWludDE2IHwgaW50MzIgfCB1aW50MzIgfCBpbnQ2NCB8IHVpbnQ2NCB8IGRvdWJsZSB8IGJ5dGUgfCBib29sZWFuIHwgb2JqcGF0aAorJmx0O3R5cGUmZ3Q7ICAgICAgIDo6PSBzdHJpbmcgfCBpbnQxNiB8IHVpbnQgMTYgfCBpbnQzMiB8IHVpbnQzMiB8IGludDY0IHwgdWludDY0IHwgZG91YmxlIHwgYnl0ZSB8IGJvb2xlYW4gfCBvYmpwYXRoCiA8L2xpdGVyYWxsYXlvdXQ+IDwhLS0gLmZpIC0tPgogCiA8cGFyYT5ELUJ1cyBzdXBwb3J0cyBtb3JlIHR5cGVzIHRoYW4gdGhlc2UsIGJ1dCA8Y29tbWFuZD5kYnVzLXNlbmQ8L2NvbW1hbmQ+IGN1cnJlbnRseQpAQCAtMTM3LDE1ICsxMzgsMTUgQEAKICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAgIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxvcHRpb24+LS1idXM9PC9vcHRpb24+PHJlcGxhY2VhYmxlPkFERFJFU1M8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgPHRlcm0+PG9wdGlvbj4tLWFkZHJlc3M9PC9vcHRpb24+PHJlcGxhY2VhYmxlPkFERFJFU1M8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgPGxpc3RpdGVtPgotPHBhcmE+UmVnaXN0ZXIgb24gYSBtZXNzYWdlIGJ1cyBhdCA8cmVwbGFjZWFibGU+QUREUkVTUzwvcmVwbGFjZWFibGU+LCB0eXBpY2FsbHkgYSA8Y29tbWFuZD5kYnVzLWRhZW1vbjwvY29tbWFuZD4uPC9wYXJhPgorPHBhcmE+U2VuZCB0byA8cmVwbGFjZWFibGU+QUREUkVTUzwvcmVwbGFjZWFibGU+LjwvcGFyYT4KICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiAgIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxvcHRpb24+LS1wZWVyPTwvb3B0aW9uPjxyZXBsYWNlYWJsZT5BRERSRVNTPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgIDx0ZXJtPjxvcHRpb24+LS1zZW5kZXI9PC9vcHRpb24+PHJlcGxhY2VhYmxlPk5BTUU8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgPGxpc3RpdGVtPgotPHBhcmE+U2VuZCB0byBhIG5vbi1tZXNzYWdlLWJ1cyBELUJ1cyBzZXJ2ZXIgYXQgPHJlcGxhY2VhYmxlPkFERFJFU1M8L3JlcGxhY2VhYmxlPi4gSW4gdGhpcyBjYXNlIDxjb21tYW5kPmRidXMtc2VuZDwvY29tbWFuZD4gd2lsbCBub3QgY2FsbCB0aGUgPGxpdGVyYWw+SGVsbG88L2xpdGVyYWw+IG1ldGhvZC48L3BhcmE+Cis8cGFyYT5SZXF1ZXN0IG93bmVyc2hpcCBvZiBuYW1lIDxyZXBsYWNlYWJsZT5OQU1FPC9yZXBsYWNlYWJsZT4gYmVmb3JlIHNlbmRpbmcgbWVzc2FnZS48L3BhcmE+CiAgIDwvbGlzdGl0ZW0+CiAgIDwvdmFybGlzdGVudHJ5PgogICA8dmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL2RidXMtc3BlY2lmaWNhdGlvbi54bWwgYi9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbAppbmRleCBjMzNmMGEwLi4xZTBmZTIwIDEwMDY0NAotLS0gYS9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbAorKysgYi9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLnhtbApAQCAtNiw4ICs2LDggQEAKIDxhcnRpY2xlIGlkPSJpbmRleCI+CiAgIDxhcnRpY2xlaW5mbz4KICAgICA8dGl0bGU+RC1CdXMgU3BlY2lmaWNhdGlvbjwvdGl0bGU+Ci0gICAgPHJlbGVhc2VpbmZvPlZlcnNpb24gMC4zMjwvcmVsZWFzZWluZm8+Ci0gICAgPGRhdGU+KG5vdCB5ZXQgcmVsZWFzZWQpPC9kYXRlPgorICAgIDxyZWxlYXNlaW5mbz5WZXJzaW9uIDAuMjY8L3JlbGVhc2VpbmZvPgorICAgIDxkYXRlPjIwMTUtMDItMTk8L2RhdGU+CiAgICAgPGF1dGhvcmdyb3VwPgogICAgICAgPGF1dGhvcj4KICAgICAgICAgPGZpcnN0bmFtZT5IYXZvYzwvZmlyc3RuYW1lPgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICA8YWZmaWxpYXRpb24+CiAgICAgICAgICAgPG9yZ25hbWU+Q29sbGFib3JhIEx0ZC48L29yZ25hbWU+CiAgICAgICAgICAgPGFkZHJlc3M+Ci0gICAgICAgICAgICA8ZW1haWw+c21jdkBjb2xsYWJvcmEuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDxlbWFpbD5zaW1vbi5tY3ZpdHRpZUBjb2xsYWJvcmEuY28udWs8L2VtYWlsPgogICAgICAgICAgIDwvYWRkcmVzcz4KICAgICAgICAgPC9hZmZpbGlhdGlvbj4KICAgICAgIDwvYXV0aG9yPgpAQCAtNzEsNzggKzcxLDYgQEAKICAgICA8L2F1dGhvcmdyb3VwPgogICAgPHJldmhpc3Rvcnk+CiAgICAgIDxyZXZpc2lvbj4KLSAgICAgICA8cmV2bnVtYmVyPmxhdGVzdDwvcmV2bnVtYmVyPgotICAgICAgIDxkYXRlPihub3QgeWV0IHJlbGVhc2VkKTwvZGF0ZT4KLSAgICAgICA8YXV0aG9yaW5pdGlhbHM+bi9hPC9hdXRob3Jpbml0aWFscz4KLSAgICAgICA8cmV2cmVtYXJrPgotICAgICAgICAgU2VlIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9kYnVzL2RidXMvbG9nL2RvYy9kYnVzLXNwZWNpZmljYXRpb24ueG1sJz5jb21taXQgbG9nPC91bGluaz4KLSAgICAgICA8L3JldnJlbWFyaz4KLSAgICAgPC9yZXZpc2lvbj4KLSAgICAgPHJldmlzaW9uPgotICAgICAgIDxyZXZudW1iZXI+MC4zMTwvcmV2bnVtYmVyPgotICAgICAgIDxkYXRlPjIwMTctMDYtMjk8L2RhdGU+Ci0gICAgICAgPGF1dGhvcmluaXRpYWxzPnNtY3YsIFRHPC9hdXRob3Jpbml0aWFscz4KLSAgICAgICA8cmV2ZGVzY3JpcHRpb24+Ci0gICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+RG9uJ3QgcmVxdWlyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBzZWFyY2gKLSAgICAgICAgICAgICAgIHBhdGhzIHRvIGJlIGxvd2VzdCBwcmlvcml0eTwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+Q29ycmVjdCByZWdleCBzeW50YXggZm9yIG9wdGlvbmFsbHktZXNjYXBlZAotICAgICAgICAgICAgICAgYnl0ZXMgaW4gYWRkcmVzc2VzIHNvIGl0IGluY2x1ZGVzIGh5cGhlbi1taW51cywgZm9yd2FyZCBzbGFzaAotICAgICAgICAgICAgICAgYW5kIHVuZGVyc2NvcmUgYXMgaW50ZW5kZWQ8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkRlc2NyaWJlIGFsbCBtZXNzYWdlIGJ1cyBtZXRob2RzIGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICBzZWN0aW9uPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5DbGFyaWZ5IHRoZSBjb3JyZWN0IG9iamVjdCBwYXRoIGZvciBtZXRob2QgY2FsbHMKLSAgICAgICAgICAgICAgIHRvIHRoZSBtZXNzYWdlIGJ1czwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+RG9jdW1lbnQgdGhhdCB0aGUgbWVzc2FnZSBidXMgaW1wbGVtZW50cwotICAgICAgICAgICAgICAgSW50cm9zcGVjdGFibGUsIFBlZXIgYW5kIFByb3BlcnRpZXM8L3NpbXBhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgPGxpc3RpdGVtPjxzaW1wYXJhPkFkZCBuZXcgRmVhdHVyZXMgYW5kIEludGVyZmFjZXMgcHJvcGVydGllcyBmb3IKLSAgICAgICAgICAgICAgIG1lc3NhZ2UgYnVzIGZlYXR1cmUtZGlzY292ZXJ5PC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgIDxsaXN0aXRlbT48c2ltcGFyYT5BZGQgdW5peDpkaXI9Li4uLCB3aGljaCByZXNlbWJsZXMKLSAgICAgICAgICAgICAgIHVuaXg6dG1wZGlyPS4uLiBidXQgbmV2ZXIgdXNlcyBhYnN0cmFjdAotICAgICAgICAgICAgICAgc29ja2V0czwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+RG9uJ3QgcmVxdWlyZSBlYXZlc2Ryb3A9J3RydWUnIHRvIGJlIGFjY2VwdGVkCi0gICAgICAgICAgICAgICBmcm9tIGNvbm5lY3Rpb25zIG5vdCBzdWZmaWNpZW50bHkgcHJpdmlsZWdlZCB0byB1c2UgaXQKLSAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseTwvc2ltcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICA8bGlzdGl0ZW0+PHNpbXBhcmE+Rm9ybWFsbHkgZGVwcmVjYXRlIGVhdmVzZHJvcHBpbmcgaW4gZmF2b3VyIG9mCi0gICAgICAgICAgICAgICBCZWNvbWVNb25pdG9yPC9zaW1wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICA8L3JldmRlc2NyaXB0aW9uPgotICAgICA8L3JldmlzaW9uPgotICAgICA8cmV2aXNpb24+Ci0gICAgICAgPHJldm51bWJlcj4wLjMwPC9yZXZudW1iZXI+Ci0gICAgICAgPGRhdGU+MjAxNi0xMS0yODwvZGF0ZT4KLSAgICAgICA8YXV0aG9yaW5pdGlhbHM+c21jdiwgUFc8L2F1dGhvcmluaXRpYWxzPgotICAgICAgIDxyZXZyZW1hcms+Ci0gICAgICAgICBEZWZpbmUgdGhlIGphcmdvbiB0ZXJtcyBzZXJ2aWNlIGFjdGl2YXRpb24gYW5kIGF1dG8tc3RhcnRpbmcgbW9yZQotICAgICAgICAgY2xlYXJseS4gRG9jdW1lbnQgdGhlIFN5c3RlbWRTZXJ2aWNlIGtleSBpbiBzZXJ2aWNlIGZpbGVzLgotICAgICAgICAgRG9jdW1lbnQgaG93IEFwcEFybW9yIGludGVyYWN0cyB3aXRoIHNlcnZpY2UgYWN0aXZhdGlvbiwgYW5kIHRoZQotICAgICAgICAgbmV3IEFzc3VtZWRBcHBBcm1vckxhYmVsIGtleSBpbiBzZXJ2aWNlIGZpbGVzIChkYnVzLWRhZW1vbiAxLjExLjgpLgotICAgICAgICAgQ2xhcmlmeSBpbnRlbmRlZCBiZWhhdmlvdXIgb2YgUHJvcGVydGllcy5HZXRBbGwuCi0gICAgICAgICBVc2UgdmVyc2lvbmVkIGludGVyZmFjZSBhbmQgYnVzIG5hbWVzIGluIG1vc3QgZXhhbXBsZXMuCi0gICAgICAgPC9yZXZyZW1hcms+Ci0gICAgIDwvcmV2aXNpb24+Ci0gICAgIDxyZXZpc2lvbj4KLSAgICAgICA8cmV2bnVtYmVyPjAuMjk8L3Jldm51bWJlcj4KLSAgICAgICA8ZGF0ZT4yMDE2LTEwLTEwPC9kYXRlPgotICAgICAgIDxhdXRob3Jpbml0aWFscz5QVzwvYXV0aG9yaW5pdGlhbHM+Ci0gICAgICAgPHJldnJlbWFyaz4KLSAgICAgICAgIEludHJvc3BlY3Rpb24gYXJndW1lbnRzIG1heSBjb250YWluIGFubm90YXRpb25zOyByZWNvbW1lbmQgYWdhaW5zdAotICAgICAgICAgdXNpbmcgdGhlIG9iamVjdCBwYXRoICcvJwotICAgICAgIDwvcmV2cmVtYXJrPgotICAgICA8L3JldmlzaW9uPgotICAgICA8cmV2aXNpb24+Ci0gICAgICAgPHJldm51bWJlcj4wLjI4PC9yZXZudW1iZXI+Ci0gICAgICAgPGRhdGU+MjAxNi0wOC0xNTwvZGF0ZT4KLSAgICAgICA8YXV0aG9yaW5pdGlhbHM+UFc8L2F1dGhvcmluaXRpYWxzPgotICAgICAgIDxyZXZyZW1hcms+Q2xhcmlmeSBzZXJpYWxpemF0aW9uPC9yZXZyZW1hcms+Ci0gICAgIDwvcmV2aXNpb24+Ci0gICAgIDxyZXZpc2lvbj4KLSAgICAgICA8cmV2bnVtYmVyPjAuMjc8L3Jldm51bWJlcj4KLSAgICAgICA8ZGF0ZT4yMDE1LTEyLTAyPC9kYXRlPgotICAgICAgIDxhdXRob3Jpbml0aWFscz5MVTwvYXV0aG9yaW5pdGlhbHM+Ci0gICAgICAgPHJldnJlbWFyaz5TZXJ2aWNlcyBzaG91bGQgbm90IHNlbmQgdW53YW50ZWQgcmVwbGllczwvcmV2cmVtYXJrPgotICAgICA8L3JldmlzaW9uPgotICAgICA8cmV2aXNpb24+CiAgICAgICAgPHJldm51bWJlcj4wLjI2PC9yZXZudW1iZXI+CiAgICAgICAgPGRhdGU+MjAxNS0wMi0xOTwvZGF0ZT4KICAgICAgICA8YXV0aG9yaW5pdGlhbHM+c21jdiwgcmg8L2F1dGhvcmluaXRpYWxzPgpAQCAtMzQxLDEzICsyNjksMTMgQEAKICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQSAic2Vzc2lvbiBidXMiIHVzZWQgdG8gaW1wbGVtZW50IGRlc2t0b3AgZW52aXJvbm1lbnRzIHN1Y2ggYXMKKyAgICAgICAgICAgIEEgInNlc3Npb24gYnVzIiB1c2VkIHRvIGltcGxlbWVudCBkZXNrdG9wIGVudmlyb25tZW50cyBzdWNoIGFzIAogICAgICAgICAgICAgR05PTUUgYW5kIEtERS4KICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgIEQtQnVzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhIGdlbmVyaWMgSVBDIHN5c3RlbSBmb3IgYW55IHBvc3NpYmxlCi0gICAgICBhcHBsaWNhdGlvbiwgYW5kIGludGVudGlvbmFsbHkgb21pdHMgbWFueSBmZWF0dXJlcyBmb3VuZCBpbiBvdGhlcgorICAgICAgRC1CdXMgaXMgbm90IGludGVuZGVkIHRvIGJlIGEgZ2VuZXJpYyBJUEMgc3lzdGVtIGZvciBhbnkgcG9zc2libGUgCisgICAgICBhcHBsaWNhdGlvbiwgYW5kIGludGVudGlvbmFsbHkgb21pdHMgbWFueSBmZWF0dXJlcyBmb3VuZCBpbiBvdGhlciAKICAgICAgIElQQyBzeXN0ZW1zIGZvciB0aGlzIHJlYXNvbi4KICAgICA8L3BhcmE+CiAKQEAgLTM1NSw3ICsyODMsNyBAQAogICAgICAgQXQgdGhlIHNhbWUgdGltZSwgdGhlIGJ1cyBkYWVtb25zIG9mZmVyIGEgbnVtYmVyIG9mIGZlYXR1cmVzIG5vdCBmb3VuZCBpbgogICAgICAgb3RoZXIgSVBDIHN5c3RlbXMsIHN1Y2ggYXMgc2luZ2xlLW93bmVyICJidXMgbmFtZXMiIChzaW1pbGFyIHRvIFgKICAgICAgIHNlbGVjdGlvbnMpLCBvbi1kZW1hbmQgc3RhcnR1cCBvZiBzZXJ2aWNlcywgYW5kIHNlY3VyaXR5IHBvbGljaWVzLgotICAgICAgSW4gbWFueSB3YXlzLCB0aGVzZSBmZWF0dXJlcyBhcmUgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgZGV2ZWxvcGluZworICAgICAgSW4gbWFueSB3YXlzLCB0aGVzZSBmZWF0dXJlcyBhcmUgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgZGV2ZWxvcGluZyAKICAgICAgIEQtQnVzOyBvdGhlciBzeXN0ZW1zIHdvdWxkIGhhdmUgc3VmZmljZWQgaWYgSVBDIHdlcmUgdGhlIG9ubHkgZ29hbC4KICAgICA8L3BhcmE+CiAKQEAgLTM4NiwxNyArMzE0LDE3IEBACiAgICAgICAgIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbidzIGJlaGF2aW9yLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIFVudGlsIHRoaXMgd29yayBpcyBjb21wbGV0ZSwgYW55IGF0dGVtcHQgdG8gcmVpbXBsZW1lbnQgRC1CdXMgd2lsbAorICAgICAgICBVbnRpbCB0aGlzIHdvcmsgaXMgY29tcGxldGUsIGFueSBhdHRlbXB0IHRvIHJlaW1wbGVtZW50IEQtQnVzIHdpbGwgCiAgICAgICAgIHByb2JhYmx5IHJlcXVpcmUgbG9va2luZyBhdCB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGFuZC9vciBhc2tpbmcKLSAgICAgICAgcXVlc3Rpb25zIG9uIHRoZSBELUJ1cyBtYWlsaW5nIGxpc3QgYWJvdXQgaW50ZW5kZWQgYmVoYXZpb3IuCisgICAgICAgIHF1ZXN0aW9ucyBvbiB0aGUgRC1CdXMgbWFpbGluZyBsaXN0IGFib3V0IGludGVuZGVkIGJlaGF2aW9yLiAKICAgICAgICAgUXVlc3Rpb25zIG9uIHRoZSBsaXN0IGFyZSB2ZXJ5IHdlbGNvbWUuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KLSAgICAgICAgTm9uZXRoZWxlc3MsIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGJlIGEgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGFuZCBpcworICAgICAgICBOb25ldGhlbGVzcywgdGhpcyBkb2N1bWVudCBzaG91bGQgYmUgYSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQgYW5kIGlzIAogICAgICAgICB0byBvdXIga25vd2xlZGdlIGFjY3VyYXRlLCB0aG91Z2ggaW5jb21wbGV0ZS4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgotCisgICAgCiAgIDwvc2VjdDE+CiAKICAgPHNlY3QxIGlkPSJ0eXBlLXN5c3RlbSI+CkBAIC00NzcsNyArNDA1LDcgQEAKIAogICAgICAgPHBhcmE+CiAgICAgICAgIEFzIGEgc2ltcGxlIGV4YW1wbGUsIHRoZSB0eXBlIGNvZGUgZm9yIDMyLWJpdCBpbnRlZ2VyICg8bGl0ZXJhbD5JTlQzMjwvbGl0ZXJhbD4pIGlzCi0gICAgICAgIHRoZSBBU0NJSSBjaGFyYWN0ZXIgJ2knLiBTbyB0aGUgc2lnbmF0dXJlIGZvciBhIGJsb2NrIG9mIHZhbHVlcworICAgICAgICB0aGUgQVNDSUkgY2hhcmFjdGVyICdpJy4gU28gdGhlIHNpZ25hdHVyZSBmb3IgYSBibG9jayBvZiB2YWx1ZXMgCiAgICAgICAgIGNvbnRhaW5pbmcgYSBzaW5nbGUgPGxpdGVyYWw+SU5UMzI8L2xpdGVyYWw+IHdvdWxkIGJlOgogICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgImkiCkBAIC00ODUsNyArNDEzLDcgQEAKICAgICAgICAgQSBibG9jayBvZiB2YWx1ZXMgY29udGFpbmluZyB0d28gPGxpdGVyYWw+SU5UMzI8L2xpdGVyYWw+IHdvdWxkIGhhdmUgdGhpcyBzaWduYXR1cmU6CiAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAiaWkiCi0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+ICAgICAgICAKICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+CkBAIC02NDcsMTUgKzU3NSw2IEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICBVc2luZyBhbiBvYmplY3QgcGF0aCBvZiA8bGl0ZXJhbD4vPC9saXRlcmFsPiBpcyBhbGxvd2VkLCBidXQKLSAgICAgICAgICByZWNvbW1lbmRlZCBhZ2FpbnN0LCBhcyBpdCBtYWtlcyB2ZXJzaW9uaW5nIG9mIGludGVyZmFjZXMgaGFyZC4gQW55Ci0gICAgICAgICAgc2lnbmFscyBlbWl0dGVkIGZyb20gYSBELUJ1cyBvYmplY3QgaGF2ZSB0aGUgc2VydmljZeKAmXMgdW5pcXVlIGJ1cyBuYW1lCi0gICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0sIHJhdGhlciB0aGFuIGl0cyB3ZWxsLWtub3duIG5hbWUuIFRoaXMgbWVhbnMgdGhhdAotICAgICAgICAgIHJlY2VpcGllbnRzIG9mIHRoZSBzaWduYWxzIG11c3QgcmVseSBlbnRpcmVseSBvbiB0aGUgc2lnbmFsIG5hbWUgYW5kCi0gICAgICAgICAgb2JqZWN0IHBhdGggdG8gd29yayBvdXQgd2hpY2ggaW50ZXJmYWNlIHRoZSBzaWduYWwgb3JpZ2luYXRlZCBmcm9tLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+CiAgICAgICAgICAgRm9yIGluc3RhbmNlLCBpZiB0aGUgb3duZXIgb2YgPGxpdGVyYWw+ZXhhbXBsZS5jb208L2xpdGVyYWw+IGlzCiAgICAgICAgICAgZGV2ZWxvcGluZyBhIEQtQnVzIEFQSSBmb3IgYSBtdXNpYyBwbGF5ZXIsIHRoZXkgbWlnaHQgdXNlIHRoZQogICAgICAgICAgIGhpZXJhcmNoeSBvZiBvYmplY3QgcGF0aHMgdGhhdCBzdGFydCB3aXRoCkBAIC03NTksMjEgKzY3OCwyMSBAQAogICAgICAgPHRpdGxlPkNvbnRhaW5lciB0eXBlczwvdGl0bGU+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBJbiBhZGRpdGlvbiB0byBiYXNpYyB0eXBlcywgdGhlcmUgYXJlIGZvdXIgPGZpcnN0dGVybT5jb250YWluZXI8L2ZpcnN0dGVybT4KLSAgICAgICAgdHlwZXM6IDxsaXRlcmFsPlNUUlVDVDwvbGl0ZXJhbD4sIDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiwgPGxpdGVyYWw+VkFSSUFOVDwvbGl0ZXJhbD4sCisgICAgICAgIEluIGFkZGl0aW9uIHRvIGJhc2ljIHR5cGVzLCB0aGVyZSBhcmUgZm91ciA8Zmlyc3R0ZXJtPmNvbnRhaW5lcjwvZmlyc3R0ZXJtPiAKKyAgICAgICAgdHlwZXM6IDxsaXRlcmFsPlNUUlVDVDwvbGl0ZXJhbD4sIDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiwgPGxpdGVyYWw+VkFSSUFOVDwvbGl0ZXJhbD4sIAogICAgICAgICBhbmQgPGxpdGVyYWw+RElDVF9FTlRSWTwvbGl0ZXJhbD4uCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICA8bGl0ZXJhbD5TVFJVQ1Q8L2xpdGVyYWw+IGhhcyBhIHR5cGUgY29kZSwgQVNDSUkgY2hhcmFjdGVyICdyJywgYnV0IHRoaXMgdHlwZQorICAgICAgICA8bGl0ZXJhbD5TVFJVQ1Q8L2xpdGVyYWw+IGhhcyBhIHR5cGUgY29kZSwgQVNDSUkgY2hhcmFjdGVyICdyJywgYnV0IHRoaXMgdHlwZSAKICAgICAgICAgY29kZSBkb2VzIG5vdCBhcHBlYXIgaW4gc2lnbmF0dXJlcy4gSW5zdGVhZCwgQVNDSUkgY2hhcmFjdGVycwogICAgICAgICAnKCcgYW5kICcpJyBhcmUgdXNlZCB0byBtYXJrIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc3RydWN0LgotICAgICAgICBTbyBmb3IgZXhhbXBsZSwgYSBzdHJ1Y3QgY29udGFpbmluZyB0d28gaW50ZWdlcnMgd291bGQgaGF2ZSB0aGlzCisgICAgICAgIFNvIGZvciBleGFtcGxlLCBhIHN0cnVjdCBjb250YWluaW5nIHR3byBpbnRlZ2VycyB3b3VsZCBoYXZlIHRoaXMgCiAgICAgICAgIHNpZ25hdHVyZToKICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICAgICAgICAgICIoaWkpIgogICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICBTdHJ1Y3RzIGNhbiBiZSBuZXN0ZWQsIHNvIGZvciBleGFtcGxlIGEgc3RydWN0IGNvbnRhaW5pbmcKKyAgICAgICAgU3RydWN0cyBjYW4gYmUgbmVzdGVkLCBzbyBmb3IgZXhhbXBsZSBhIHN0cnVjdCBjb250YWluaW5nIAogICAgICAgICBhbiBpbnRlZ2VyIGFuZCBhbm90aGVyIHN0cnVjdDoKICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICAgICAgICAgICIoaShpaSkpIgpAQCAtNzg1LDcgKzcwNCw3IEBACiAKICAgICAgIDxwYXJhPgogICAgICAgICBUaGUgPGxpdGVyYWw+U1RSVUNUPC9saXRlcmFsPiB0eXBlIGNvZGUgJ3InIGlzIG5vdCBjdXJyZW50bHkgdXNlZCBpbiB0aGUgRC1CdXMgcHJvdG9jb2wsCi0gICAgICAgIGJ1dCBpcyB1c2VmdWwgaW4gY29kZSB0aGF0IGltcGxlbWVudHMgdGhlIHByb3RvY29sLiBUaGlzIHR5cGUgY29kZQorICAgICAgICBidXQgaXMgdXNlZnVsIGluIGNvZGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbC4gVGhpcyB0eXBlIGNvZGUgCiAgICAgICAgIGlzIHNwZWNpZmllZCB0byBhbGxvdyBzdWNoIGNvZGUgdG8gaW50ZXJvcGVyYXRlIGluIG5vbi1wcm90b2NvbCBjb250ZXh0cy4KICAgICAgIDwvcGFyYT4KIApAQCAtODAyLDcgKzcyMSw3IEBACiAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAiYWkiCiAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIHdoaWNoIGlzIGFuIGFycmF5IG9mIDMyLWJpdCBpbnRlZ2Vycy4gQnV0IGFuIGFycmF5IGNhbiBiZSBvZiBhbnkgdHlwZSwKKyAgICAgICAgd2hpY2ggaXMgYW4gYXJyYXkgb2YgMzItYml0IGludGVnZXJzLiBCdXQgYW4gYXJyYXkgY2FuIGJlIG9mIGFueSB0eXBlLCAKICAgICAgICAgc3VjaCBhcyB0aGlzIGFycmF5LW9mLXN0cnVjdC13aXRoLXR3by1pbnQzMi1maWVsZHM6CiAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAiYShpaSkiCkBAIC04MzksNyArNzU4LDcgQEAKICAgICAgICAgZmllbGRzLCBhbmQgbXVzdCBub3QgYWNjZXB0IGRpY3QgZW50cmllcyB3aXRoIG5vbi1iYXNpYy10eXBlZCBrZXlzLiBBCiAgICAgICAgIGRpY3QgZW50cnkgaXMgYWx3YXlzIGEga2V5LXZhbHVlIHBhaXIuCiAgICAgICA8L3BhcmE+Ci0KKyAgICAgIAogICAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgPGxpdGVyYWw+RElDVF9FTlRSWTwvbGl0ZXJhbD4gaXMgYWx3YXlzIHRoZSBrZXkuCiAgICAgICAgIEEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIGNvcnJ1cHQgaWYgdGhlIHNhbWUga2V5IG9jY3VycyB0d2ljZSBpbiB0aGUgc2FtZQpAQCAtODQ4LDcgKzc2Nyw3IEBACiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBJbiBtb3N0IGxhbmd1YWdlcywgYW4gYXJyYXkgb2YgZGljdCBlbnRyeSB3b3VsZCBiZSByZXByZXNlbnRlZCBhcyBhCisgICAgICAgIEluIG1vc3QgbGFuZ3VhZ2VzLCBhbiBhcnJheSBvZiBkaWN0IGVudHJ5IHdvdWxkIGJlIHJlcHJlc2VudGVkIGFzIGEgCiAgICAgICAgIG1hcCwgaGFzaCB0YWJsZSwgb3IgZGljdCBvYmplY3QuCiAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0Mj4KQEAgLTEwNDMsMTAgKzk2Miw4IEBACiAgICAgICA8cGFyYT4KICAgICAgICAgRWFjaCB2YWx1ZSBpbiBhIGJsb2NrIG9mIGJ5dGVzIGlzIGFsaWduZWQgIm5hdHVyYWxseSwiIGZvciBleGFtcGxlCiAgICAgICAgIDQtYnl0ZSB2YWx1ZXMgYXJlIGFsaWduZWQgdG8gYSA0LWJ5dGUgYm91bmRhcnksIGFuZCA4LWJ5dGUgdmFsdWVzIHRvIGFuCi0gICAgICAgIDgtYnl0ZSBib3VuZGFyeS4gQm91bmRhcmllcyBhcmUgY2FsY3VsYXRlZCBnbG9iYWxseSwgd2l0aCByZXNwZWN0IHRvCi0gICAgICAgIHRoZSBmaXJzdCBieXRlIGluIHRoZSBtZXNzYWdlLiBUbyBwcm9wZXJseSBhbGlnbiBhIHZhbHVlLAotICAgICAgICA8Zmlyc3R0ZXJtPmFsaWdubWVudCBwYWRkaW5nPC9maXJzdHRlcm0+IG1heSBiZSBuZWNlc3NhcnkgYmVmb3JlIHRoZQotICAgICAgICB2YWx1ZS4gVGhlIGFsaWdubWVudCBwYWRkaW5nIG11c3QgYWx3YXlzCisgICAgICAgIDgtYnl0ZSBib3VuZGFyeS4gVG8gcHJvcGVybHkgYWxpZ24gYSB2YWx1ZSwgPGZpcnN0dGVybT5hbGlnbm1lbnQKKyAgICAgICAgcGFkZGluZzwvZmlyc3R0ZXJtPiBtYXkgYmUgbmVjZXNzYXJ5LiBUaGUgYWxpZ25tZW50IHBhZGRpbmcgbXVzdCBhbHdheXMKICAgICAgICAgYmUgdGhlIG1pbmltdW0gcmVxdWlyZWQgcGFkZGluZyB0byBwcm9wZXJseSBhbGlnbiB0aGUgZm9sbG93aW5nIHZhbHVlOwogICAgICAgICBhbmQgaXQgbXVzdCBhbHdheXMgYmUgbWFkZSB1cCBvZiBudWwgYnl0ZXMuIFRoZSBhbGlnbm1lbnQgcGFkZGluZyBtdXN0CiAgICAgICAgIG5vdCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgKGl0IGNhbid0IGNvbnRhaW4gZ2FyYmFnZSksIGFuZCBtb3JlIHBhZGRpbmcKQEAgLTEwNzMsNTAgKzk5MCwyMSBAQAogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHN0cmluZy1saWtlIHR5cGVzIChTVFJJTkcsIE9CSkVDVF9QQVRIIGFuZCBTSUdOQVRVUkUpIGFyZSBhbGwKLSAgICAgICAgbWFyc2hhbGxlZCBhcyBhCisgICAgICAgIFRoZSBzdHJpbmctbGlrZSB0eXBlcyBhcmUgYWxsIG1hcnNoYWxsZWQgYXMgYQogICAgICAgICBmaXhlZC1sZW5ndGggdW5zaWduZWQgaW50ZWdlciA8dmFybmFtZT5uPC92YXJuYW1lPiBnaXZpbmcgdGhlCiAgICAgICAgIGxlbmd0aCBvZiB0aGUgdmFyaWFibGUgcGFydCwgZm9sbG93ZWQgYnkgPHZhcm5hbWU+bjwvdmFybmFtZT4KICAgICAgICAgbm9uemVybyBieXRlcyBvZiBVVEYtOCB0ZXh0LCBmb2xsb3dlZCBieSBhIHNpbmdsZSB6ZXJvIChudWwpIGJ5dGUKICAgICAgICAgd2hpY2ggaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgdGV4dC4gVGhlIGFsaWdubWVudAogICAgICAgICBvZiB0aGUgc3RyaW5nLWxpa2UgdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgYWxpZ25tZW50IG9mCi0gICAgICAgIDx2YXJuYW1lPm48L3Zhcm5hbWU+OiBhbnkgcGFkZGluZyByZXF1aXJlZCBmb3IgPHZhcm5hbWU+bjwvdmFybmFtZT4KLSAgICAgICAgYXBwZWFycyBpbW1lZGlhdGVseSBiZWZvcmUgPHZhcm5hbWU+bjwvdmFybmFtZT4gaXRzZWxmLiBUaGVyZSBpcyBuZXZlcgotICAgICAgICBhbnkgYWxpZ25tZW50IHBhZGRpbmcgYmV0d2VlbiA8dmFybmFtZT5uPC92YXJuYW1lPiBhbmQgdGhlIHN0cmluZyB0ZXh0LAotICAgICAgICBvciBiZXR3ZWVuIHRoZSBzdHJpbmcgdGV4dCBhbmQgdGhlIHRyYWlsaW5nIG51bC4gVGhlIGFsaWdubWVudCBwYWRkaW5nCi0gICAgICAgIGZvciB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgbWVzc2FnZSAoaWYgdGhlcmUgaXMgb25lKSBzdGFydHMgYWZ0ZXIgdGhlCi0gICAgICAgIHRyYWlsaW5nIG51bC4KKyAgICAgICAgPHZhcm5hbWU+bjwvdmFybmFtZT4uCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgogICAgICAgICBGb3IgdGhlIFNUUklORyBhbmQgT0JKRUNUX1BBVEggdHlwZXMsIDx2YXJuYW1lPm48L3Zhcm5hbWU+IGlzCi0gICAgICAgIGVuY29kZWQgaW4gNCBieXRlcyAoYSA8bGl0ZXJhbD5VSU5UMzI8L2xpdGVyYWw+KSwgbGVhZGluZyB0byA0LWJ5dGUKLSAgICAgICAgYWxpZ25tZW50LiBGb3IgdGhlIFNJR05BVFVSRSB0eXBlLCA8dmFybmFtZT5uPC92YXJuYW1lPiBpcyBlbmNvZGVkIGFzIGEKLSAgICAgICAgc2luZ2xlIGJ5dGUgKGEgPGxpdGVyYWw+VUlOVDg8L2xpdGVyYWw+KS4gQXMgYSByZXN1bHQsIGFsaWdubWVudAotICAgICAgICBwYWRkaW5nIGlzIG5ldmVyIHJlcXVpcmVkIGJlZm9yZSBhIFNJR05BVFVSRS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhIG11bHRpcGxlIG9mIDggYnl0ZXMgZnJvbSB0aGUKLSAgICAgICAgYmVnaW5uaW5nIG9mIGEgbGl0dGxlLWVuZGlhbiBtZXNzYWdlLCBzdHJpbmdzIOKAmGZvb+KAmSwg4oCYK+KAmSBhbmQg4oCYYmFy4oCZCi0gICAgICAgIHdvdWxkIGJlIHNlcmlhbGl6ZWQgaW4gc2VxdWVuY2UgYXMgZm9sbG93czoKLQotICAgICAgICA8c2NyZWVuPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmVhbm5vdGF0aW9uPm5vIHBhZGRpbmcgcmVxdWlyZWQsIHdlIGFyZSBhbHJlYWR5IGF0IGEgbXVsdGlwbGUgb2YgNDwvbGluZWFubm90YXRpb24+Ci0weDAzIDB4MDAgMHgwMCAweDAwICAgICAgICAgICAgICAgICAgICAgICA8bGluZWFubm90YXRpb24+bGVuZ3RoIG9mIOKAmGZvb+KAmSA9IDM8L2xpbmVhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICAgICAweDY2IDB4NmYgMHg2ZiAgICAgICAgPGxpbmVhbm5vdGF0aW9uPuKAmGZvb+KAmTwvbGluZWFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAgICA8bGluZWFubm90YXRpb24+dHJhaWxpbmcgbnVsPC9saW5lYW5ub3RhdGlvbj4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmVhbm5vdGF0aW9uPm5vIHBhZGRpbmcgcmVxdWlyZWQsIHdlIGFyZSBhbHJlYWR5IGF0IGEgbXVsdGlwbGUgb2YgNDwvbGluZWFubm90YXRpb24+Ci0weDAxIDB4MDAgMHgwMCAweDAwICAgICAgICAgICAgICAgICAgICAgICA8bGluZWFubm90YXRpb24+bGVuZ3RoIG9mIOKAmCvigJkgPSAxPC9saW5lYW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgMHgyYiAgICAgICAgICAgICAgICAgIDxsaW5lYW5ub3RhdGlvbj7igJgr4oCZPC9saW5lYW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwICAgICAgICAgICAgIDxsaW5lYW5ub3RhdGlvbj50cmFpbGluZyBudWw8L2xpbmVhbm5vdGF0aW9uPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAweDAwICA8bGluZWFubm90YXRpb24+MiBieXRlcyBvZiBwYWRkaW5nIHRvIHJlYWNoIG5leHQgbXVsdGlwbGUgb2YgNDwvbGluZWFubm90YXRpb24+Ci0weDAzIDB4MDAgMHgwMCAweDAwICAgICAgICAgICAgICAgICAgICAgICA8bGluZWFubm90YXRpb24+bGVuZ3RoIG9mIOKAmGJhcuKAmSA9IDE8L2xpbmVhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICAgICAweDYyIDB4NjEgMHg3MiAgICAgICAgPGxpbmVhbm5vdGF0aW9uPuKAmGJhcuKAmTwvbGluZWFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwICA8bGluZWFubm90YXRpb24+dHJhaWxpbmcgbnVsPC9saW5lYW5ub3RhdGlvbj4KLSAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIGVuY29kZWQgaW4gNCBieXRlcywgbGVhZGluZyB0byA0LWJ5dGUgYWxpZ25tZW50LgorICAgICAgICBGb3IgdGhlIFNJR05BVFVSRSB0eXBlLCA8dmFybmFtZT5uPC92YXJuYW1lPiBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlCisgICAgICAgIGJ5dGUuIEFzIGEgcmVzdWx0LCBhbGlnbm1lbnQgcGFkZGluZyBpcyBuZXZlciByZXF1aXJlZCBiZWZvcmUgYQorICAgICAgICBTSUdOQVRVUkUuCiAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0Mj4KIApAQCAtMTEzMCw4ICsxMDE4LDcgQEAKICAgICAgICAgZWxlbWVudCB0eXBlLCBmb2xsb3dlZCBieSB0aGUgPHZhcm5hbWU+bjwvdmFybmFtZT4gYnl0ZXMgb2YgdGhlCiAgICAgICAgIGFycmF5IGVsZW1lbnRzIG1hcnNoYWxsZWQgaW4gc2VxdWVuY2UuIDx2YXJuYW1lPm48L3Zhcm5hbWU+IGRvZXMgbm90CiAgICAgICAgIGluY2x1ZGUgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIGxlbmd0aCwgb3IgYW55IHBhZGRpbmcgYWZ0ZXIgdGhlCi0gICAgICAgIGxhc3QgZWxlbWVudC4gaS5lLiA8dmFybmFtZT5uPC92YXJuYW1lPiBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IHRoZQotICAgICAgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LgorICAgICAgICBsYXN0IGVsZW1lbnQuCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtMTE0MCw3ICsxMDI3LDcgQEAKICAgICAgICAgdGhlIDY0LWJpdCBpbnRlZ2VyIDUgd291bGQgYmUgbWFyc2hhbGxlZCBhczoKIAogICAgICAgICA8c2NyZWVuPgotMDAgMDAgMDAgMDggICAgICAgICAgICAgICA8bGluZWFubm90YXRpb24+PHZhcm5hbWU+bjwvdmFybmFtZT4gPSA4IGJ5dGVzIG9mIGRhdGE8L2xpbmVhbm5vdGF0aW9uPgorMDAgMDAgMDAgMDggICAgICAgICAgICAgICA8bGluZWFubm90YXRpb24+OCBieXRlcyBvZiBkYXRhPC9saW5lYW5ub3RhdGlvbj4KIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgPGxpbmVhbm5vdGF0aW9uPnBhZGRpbmcgdG8gOC1ieXRlIGJvdW5kYXJ5PC9saW5lYW5ub3RhdGlvbj4KIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwNSAgPGxpbmVhbm5vdGF0aW9uPmZpcnN0IGVsZW1lbnQgPSA1PC9saW5lYW5ub3RhdGlvbj4KICAgICAgICAgPC9zY3JlZW4+CkBAIC0xMTY0LDEwICsxMDUxLDggQEAKICAgICAgICAgbWFyc2hhbGxlZCB2YWx1ZSB3aXRoIHRoZSB0eXBlIGdpdmVuIGJ5IHRoYXQgc2lnbmF0dXJlLiBUaGUKICAgICAgICAgdmFyaWFudCBoYXMgdGhlIHNhbWUgMS1ieXRlIGFsaWdubWVudCBhcyB0aGUgc2lnbmF0dXJlLCB3aGljaCBtZWFucwogICAgICAgICB0aGF0IGFsaWdubWVudCBwYWRkaW5nIGJlZm9yZSBhIHZhcmlhbnQgaXMgbmV2ZXIgbmVlZGVkLgotICAgICAgICBVc2Ugb2YgdmFyaWFudHMgbXVzdCBub3QgY2F1c2UgYSB0b3RhbCBtZXNzYWdlIGRlcHRoIHRvIGJlIGxhcmdlcgorICAgICAgICBVc2Ugb2YgdmFyaWFudHMgbWF5IG5vdCBjYXVzZSBhIHRvdGFsIG1lc3NhZ2UgZGVwdGggdG8gYmUgbGFyZ2VyCiAgICAgICAgIHRoYW4gNjQsIGluY2x1ZGluZyBvdGhlciBjb250YWluZXIgdHlwZXMgc3VjaCBhcyBzdHJ1Y3R1cmVzLgotICAgICAgICAoU2VlIDxsaW5rIGxpbmtlbmQ9Im1lc3NhZ2UtcHJvdG9jb2wtbWFyc2hhbGluZy1zaWduYXR1cmUiPlZhbGlkCi0gICAgICAgIFNpZ25hdHVyZXM8L2xpbms+LikKICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgogCkBAIC0xMjI4LDkgKzExMTMsOSBAQAogICAgICAgICAgICAgICAgIDxlbnRyeT44PC9lbnRyeT4KICAgICAgICAgICAgICAgPC9yb3c+PHJvdz4KICAgICAgICAgICAgICAgICA8ZW50cnk+PGxpdGVyYWw+U1RSSU5HPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PkEgPGxpdGVyYWw+VUlOVDMyPC9saXRlcmFsPiBpbmRpY2F0aW5nIHRoZSBzdHJpbmcncwotICAgICAgICAgICAgICAgICAgbGVuZ3RoIGluIGJ5dGVzIGV4Y2x1ZGluZyBpdHMgdGVybWluYXRpbmcgbnVsLCBmb2xsb3dlZCBieQotICAgICAgICAgICAgICAgICAgbm9uLW51bCBzdHJpbmcgZGF0YSBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLCBmb2xsb3dlZCBieSBhIHRlcm1pbmF0aW5nIG51bAorICAgICAgICAgICAgICAgIDxlbnRyeT5BIDxsaXRlcmFsPlVJTlQzMjwvbGl0ZXJhbD4gaW5kaWNhdGluZyB0aGUgc3RyaW5nJ3MgCisgICAgICAgICAgICAgICAgICBsZW5ndGggaW4gYnl0ZXMgZXhjbHVkaW5nIGl0cyB0ZXJtaW5hdGluZyBudWwsIGZvbGxvd2VkIGJ5IAorICAgICAgICAgICAgICAgICAgbm9uLW51bCBzdHJpbmcgZGF0YSBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLCBmb2xsb3dlZCBieSBhIHRlcm1pbmF0aW5nIG51bCAKICAgICAgICAgICAgICAgICAgIGJ5dGUuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgICA8ZW50cnk+CkBAIC0xMjM4LDcgKzExMjMsNyBAQAogICAgICAgICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgICAgICAgIDwvcm93Pjxyb3c+CiAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPk9CSkVDVF9QQVRIPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PkV4YWN0bHkgdGhlIHNhbWUgYXMgPGxpdGVyYWw+U1RSSU5HPC9saXRlcmFsPiBleGNlcHQgdGhlCisgICAgICAgICAgICAgICAgPGVudHJ5PkV4YWN0bHkgdGhlIHNhbWUgYXMgPGxpdGVyYWw+U1RSSU5HPC9saXRlcmFsPiBleGNlcHQgdGhlIAogICAgICAgICAgICAgICAgICAgY29udGVudCBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0IHBhdGggKHNlZSBhYm92ZSkuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgICA8ZW50cnk+CkBAIC0xMjQ2LDcgKzExMzEsNyBAQAogICAgICAgICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgICAgICAgIDwvcm93Pjxyb3c+CiAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPlNJR05BVFVSRTwvbGl0ZXJhbD48L2VudHJ5PgotICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgc2FtZSBhcyA8bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+IGV4Y2VwdCB0aGUgbGVuZ3RoIGlzIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgPGVudHJ5PlRoZSBzYW1lIGFzIDxsaXRlcmFsPlNUUklORzwvbGl0ZXJhbD4gZXhjZXB0IHRoZSBsZW5ndGggaXMgYSBzaW5nbGUgCiAgICAgICAgICAgICAgICAgICBieXRlICh0aHVzIHNpZ25hdHVyZXMgaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDI1NSkKICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY29udGVudCBtdXN0IGJlIGEgdmFsaWQgc2lnbmF0dXJlIChzZWUgYWJvdmUpLgogICAgICAgICAgICAgICAgIDwvZW50cnk+CkBAIC0xMjU2LDcgKzExNDEsNyBAQAogICAgICAgICAgICAgICA8L3Jvdz48cm93PgogICAgICAgICAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5BUlJBWTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgICAgIEEgPGxpdGVyYWw+VUlOVDMyPC9saXRlcmFsPiBnaXZpbmcgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgZGF0YSBpbiBieXRlcywgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgIEEgPGxpdGVyYWw+VUlOVDMyPC9saXRlcmFsPiBnaXZpbmcgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgZGF0YSBpbiBieXRlcywgZm9sbG93ZWQgYnkgCiAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgcGFkZGluZyB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5IG9mIHRoZSBhcnJheSBlbGVtZW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBlYWNoIGFycmF5IGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KQEAgLTEzMjIsNyArMTIwNyw3IEBACiAgICAgICBpbmZvcm1hdGlvbiB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgYW5kIGhvdyB0byBpbnRlcnByZXQKICAgICAgIGl0OyB0aGUgcmVjaXBpZW50IGludGVycHJldHMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAgICAgPC9wYXJhPgotCisgICAgCiAgICAgPHBhcmE+CiAgICAgICBUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSBpcyBtYWRlIHVwIG9mIHplcm8gb3IgbW9yZQogICAgICAgPGZpcnN0dGVybT5hcmd1bWVudHM8L2ZpcnN0dGVybT4sIHdoaWNoIGFyZSB0eXBlZCB2YWx1ZXMsIHN1Y2ggYXMgYW4KQEAgLTEzNDYsNyArMTIzMSw3IEBACiAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LCBhbGxvd2luZyB0aGUgYm9keSB0bwogICAgICAgICBiZWdpbiBvbiBhbiA4LWJ5dGUgYm91bmRhcnkgd2hlbiBzdG9yaW5nIHRoZSBlbnRpcmUgbWVzc2FnZSBpbiBhIHNpbmdsZQotICAgICAgICBidWZmZXIuIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgbmF0dXJhbGx5IGVuZCBvbiBhbiA4LWJ5dGUgYm91bmRhcnkKKyAgICAgICAgYnVmZmVyLiBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IG5hdHVyYWxseSBlbmQgb24gYW4gOC1ieXRlIGJvdW5kYXJ5IAogICAgICAgICB1cCB0byA3IGJ5dGVzIG9mIG51bC1pbml0aWFsaXplZCBhbGlnbm1lbnQgcGFkZGluZyBtdXN0IGJlIGFkZGVkLgogICAgICAgPC9wYXJhPgogCkBAIC0xMzU1LDExICsxMjQwLDExIEBACiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBtZXNzYWdlLCBpbmNsdWRpbmcgaGVhZGVyLCBoZWFkZXIgYWxpZ25tZW50IHBhZGRpbmcsCisgICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIG1lc3NhZ2UsIGluY2x1ZGluZyBoZWFkZXIsIGhlYWRlciBhbGlnbm1lbnQgcGFkZGluZywgCiAgICAgICAgIGFuZCBib2R5IGlzIDIgdG8gdGhlIDI3dGggcG93ZXIgb3IgMTM0MjE3NzI4ICgxMjggTWlCKS4KICAgICAgICAgSW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHNlbmQgb3IgYWNjZXB0IG1lc3NhZ2VzIGV4Y2VlZGluZyB0aGlzIHNpemUuCiAgICAgICA8L3BhcmE+Ci0KKyAgICAgIAogICAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBzaWduYXR1cmUgb2YgdGhlIGhlYWRlciBpczoKICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpAQCAtMTM4NCwxMyArMTI2OSwxMyBAQAogICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgIDxlbnRyeT4xc3QgPGxpdGVyYWw+QllURTwvbGl0ZXJhbD48L2VudHJ5PgotICAgICAgICAgICAgICAgIDxlbnRyeT5FbmRpYW5uZXNzIGZsYWc7IEFTQ0lJICdsJyBmb3IgbGl0dGxlLWVuZGlhbgotICAgICAgICAgICAgICAgICAgb3IgQVNDSUkgJ0InIGZvciBiaWctZW5kaWFuLiBCb3RoIGhlYWRlciBhbmQgYm9keSBhcmUKKyAgICAgICAgICAgICAgICA8ZW50cnk+RW5kaWFubmVzcyBmbGFnOyBBU0NJSSAnbCcgZm9yIGxpdHRsZS1lbmRpYW4gCisgICAgICAgICAgICAgICAgICBvciBBU0NJSSAnQicgZm9yIGJpZy1lbmRpYW4uIEJvdGggaGVhZGVyIGFuZCBib2R5IGFyZSAKICAgICAgICAgICAgICAgICBpbiB0aGlzIGVuZGlhbm5lc3MuPC9lbnRyeT4KICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgPGVudHJ5PjJuZCA8bGl0ZXJhbD5CWVRFPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PjxmaXJzdHRlcm0+TWVzc2FnZSB0eXBlPC9maXJzdHRlcm0+LiBVbmtub3duIHR5cGVzIG11c3QgYmUgaWdub3JlZC4KKyAgICAgICAgICAgICAgICA8ZW50cnk+PGZpcnN0dGVybT5NZXNzYWdlIHR5cGU8L2ZpcnN0dGVybT4uIFVua25vd24gdHlwZXMgbXVzdCBiZSBpZ25vcmVkLiAKICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseS1kZWZpbmVkIHR5cGVzIGFyZSBkZXNjcmliZWQgYmVsb3cuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgPC9yb3c+CkBAIC0xNDExLDIzICsxMjk2LDIzIEBACiAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgIDxlbnRyeT4xc3QgPGxpdGVyYWw+VUlOVDMyPC9saXRlcmFsPjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPGVudHJ5Pkxlbmd0aCBpbiBieXRlcyBvZiB0aGUgbWVzc2FnZSBib2R5LCBzdGFydGluZwotICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgZW5kIG9mIHRoZSBoZWFkZXIuIFRoZSBoZWFkZXIgZW5kcyBhZnRlcgorICAgICAgICAgICAgICAgIDxlbnRyeT5MZW5ndGggaW4gYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgYm9keSwgc3RhcnRpbmcgCisgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBlbmQgb2YgdGhlIGhlYWRlci4gVGhlIGhlYWRlciBlbmRzIGFmdGVyIAogICAgICAgICAgICAgICAgICAgaXRzIGFsaWdubWVudCBwYWRkaW5nIHRvIGFuIDgtYm91bmRhcnkuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgPGVudHJ5PjJuZCA8bGl0ZXJhbD5VSU5UMzI8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIHNlcmlhbCBvZiB0aGlzIG1lc3NhZ2UsIHVzZWQgYXMgYSBjb29raWUKKyAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIHNlcmlhbCBvZiB0aGlzIG1lc3NhZ2UsIHVzZWQgYXMgYSBjb29raWUgCiAgICAgICAgICAgICAgICAgICBieSB0aGUgc2VuZGVyIHRvIGlkZW50aWZ5IHRoZSByZXBseSBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgICAgICAgICB0byB0aGlzIHJlcXVlc3QuIFRoaXMgbXVzdCBub3QgYmUgemVyby4KICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC9yb3c+ICAgICAgCiAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiBvZiA8bGl0ZXJhbD5TVFJVQ1Q8L2xpdGVyYWw+IG9mICg8bGl0ZXJhbD5CWVRFPC9saXRlcmFsPiw8bGl0ZXJhbD5WQVJJQU5UPC9saXRlcmFsPik8L2VudHJ5PgogICAgICAgICAgICAgICAgIDxlbnRyeT5BbiBhcnJheSBvZiB6ZXJvIG9yIG1vcmUgPGZpcnN0dGVybT5oZWFkZXIKICAgICAgICAgICAgICAgICAgIGZpZWxkczwvZmlyc3R0ZXJtPiB3aGVyZSB0aGUgYnl0ZSBpcyB0aGUgZmllbGQgY29kZSwgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgdmFyaWFudCBpcyB0aGUgZmllbGQgdmFsdWUuIFRoZSBtZXNzYWdlIHR5cGUgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgdmFyaWFudCBpcyB0aGUgZmllbGQgdmFsdWUuIFRoZSBtZXNzYWdlIHR5cGUgZGV0ZXJtaW5lcyAKICAgICAgICAgICAgICAgICAgIHdoaWNoIGZpZWxkcyBhcmUgcmVxdWlyZWQuCiAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgPC9yb3c+CkBAIC0xNDk4LDcgKzEzODMsMTIgQEAKICAgICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBUaGlzIG1lc3NhZ2UgZG9lcyBub3QgZXhwZWN0IG1ldGhvZCByZXR1cm4gcmVwbGllcyBvcgogICAgICAgICAgICAgICAgICAgICBlcnJvciByZXBsaWVzLCBldmVuIGlmIGl0IGlzIG9mIGEgdHlwZSB0aGF0IGNhbgotICAgICAgICAgICAgICAgICAgICBoYXZlIGEgcmVwbHk7IHRoZSByZXBseSBzaG91bGQgYmUgb21pdHRlZC4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBhIHJlcGx5OyB0aGUgcmVwbHkgY2FuIGJlIG9taXR0ZWQgYXMgYW4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uLiBJdCBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIHNwZWNpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gcmV0dXJuIHRoZSByZXBseSBkZXNwaXRlIHRoaXMgZmxhZywgYWx0aG91Z2ggZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgc28gb24gYSBidXMgd2l0aCBhIG5vbi10cml2aWFsIHNlY3VyaXR5IHBvbGljeQorICAgICAgICAgICAgICAgICAgICAoc3VjaCBhcyB0aGUgd2VsbC1rbm93biBzeXN0ZW0gYnVzKSBtYXkgcmVzdWx0IGluCisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyBkZW5pYWwgbWVzc2FnZXMgYmVpbmcgbG9nZ2VkIGZvciB0aGUgcmVwbHkuCiAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IE1FVEhPRF9DQUxMIGlzIHRoZSBvbmx5IG1lc3NhZ2UgdHlwZSBjdXJyZW50bHkKQEAgLTE2MDAsOCArMTQ5MCw4IEBACiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIEFnYWluLCBpZiBhbiBpbXBsZW1lbnRhdGlvbiBzZWVzIGEgaGVhZGVyIGZpZWxkIGNvZGUgdGhhdCBpdCBkb2VzIG5vdAogICAgICAgICAgIGV4cGVjdCwgaXQgbXVzdCBpZ25vcmUgdGhhdCBmaWVsZCwgYXMgaXQgd2lsbCBiZSBwYXJ0IG9mIGEgbmV3Ci0gICAgICAgICAgKGJ1dCBjb21wYXRpYmxlKSB2ZXJzaW9uIG9mIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhpcyBhbHNvIGFwcGxpZXMKLSAgICAgICAgICB0byBrbm93biBoZWFkZXIgZmllbGRzIGFwcGVhcmluZyBpbiB1bmV4cGVjdGVkIG1lc3NhZ2VzLCBmb3IKKyAgICAgICAgICAoYnV0IGNvbXBhdGlibGUpIHZlcnNpb24gb2YgdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGlzIGFsc28gYXBwbGllcyAKKyAgICAgICAgICB0byBrbm93biBoZWFkZXIgZmllbGRzIGFwcGVhcmluZyBpbiB1bmV4cGVjdGVkIG1lc3NhZ2VzLCBmb3IgCiAgICAgICAgICAgZXhhbXBsZTogaWYgYSBzaWduYWwgaGFzIGEgcmVwbHkgc2VyaWFsIGl0IG11c3QgYmUgaWdub3JlZAogICAgICAgICAgIGV2ZW4gdGhvdWdoIGl0IGhhcyBubyBtZWFuaW5nIGFzIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3BlYy4KICAgICAgICAgPC9wYXJhPgpAQCAtMTY1NCw4ICsxNTQ0LDggQEAKICAgICAgICAgICAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgICAgICAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5TSUdOQUw8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgICAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGludGVyZmFjZSB0byBpbnZva2UgYSBtZXRob2QgY2FsbCBvbiwgb3IKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBhIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20uIE9wdGlvbmFsIGZvcgorICAgICAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIHRvIGludm9rZSBhIG1ldGhvZCBjYWxsIG9uLCBvciAKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20uIE9wdGlvbmFsIGZvciAKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGNhbGxzLCByZXF1aXJlZCBmb3Igc2lnbmFscy4KICAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpYWwgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLkxvY2FsPC9saXRlcmFsPiBpcyByZXNlcnZlZDsKQEAgLTE2OTMsNyArMTU4Myw3IEBACiAgICAgICAgICAgICAgICAgICA8ZW50cnk+PGxpdGVyYWw+U1RSSU5HPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICA8ZW50cnk+b3B0aW9uYWw8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgPGVudHJ5PlRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uIHRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCBmb3IuCi0gICAgICAgICAgICAgICAgICAgIE9ubHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBtZXNzYWdlIGJ1cywgc2VlCisgICAgICAgICAgICAgICAgICAgIE9ubHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBtZXNzYWdlIGJ1cywgc2VlIAogICAgICAgICAgICAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJtZXNzYWdlLWJ1cyIvPi48L2VudHJ5PgogICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgIDxyb3c+CkBAIC0xNzExLDcgKzE2MDEsNyBAQAogICAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPlNJR05BVFVSRTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgICAgICAgICAgICAgPGVudHJ5Pm9wdGlvbmFsPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgc2lnbmF0dXJlIG9mIHRoZSBtZXNzYWdlIGJvZHkuCi0gICAgICAgICAgICAgICAgICBJZiBvbWl0dGVkLCBpdCBpcyBhc3N1bWVkIHRvIGJlIHRoZQorICAgICAgICAgICAgICAgICAgSWYgb21pdHRlZCwgaXQgaXMgYXNzdW1lZCB0byBiZSB0aGUgCiAgICAgICAgICAgICAgICAgICBlbXB0eSBzaWduYXR1cmUgIiIgKGkuZS4gdGhlIGJvZHkgbXVzdCBiZSAwLWxlbmd0aCkuPC9lbnRyeT4KICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICA8cm93PgpAQCAtMTc0MywyMyArMTYzMywyMyBAQAogICAgICAgICBUaGUgdmFyaW91cyBuYW1lcyBpbiBELUJ1cyBtZXNzYWdlcyBoYXZlIHNvbWUgcmVzdHJpY3Rpb25zLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGlzIGEgPGZpcnN0dGVybT5tYXhpbXVtIG5hbWUgbGVuZ3RoPC9maXJzdHRlcm0+Ci0gICAgICAgIG9mIDI1NSB3aGljaCBhcHBsaWVzIHRvIGJ1cyBuYW1lcywgaW50ZXJmYWNlcywgYW5kIG1lbWJlcnMuCisgICAgICAgIFRoZXJlIGlzIGEgPGZpcnN0dGVybT5tYXhpbXVtIG5hbWUgbGVuZ3RoPC9maXJzdHRlcm0+IAorICAgICAgICBvZiAyNTUgd2hpY2ggYXBwbGllcyB0byBidXMgbmFtZXMsIGludGVyZmFjZXMsIGFuZCBtZW1iZXJzLiAKICAgICAgIDwvcGFyYT4KICAgICAgIDxzZWN0MyBpZD0ibWVzc2FnZS1wcm90b2NvbC1uYW1lcy1pbnRlcmZhY2UiPgogICAgICAgICA8dGl0bGU+SW50ZXJmYWNlIG5hbWVzPC90aXRsZT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW50ZXJmYWNlcyBoYXZlIG5hbWVzIHdpdGggdHlwZSA8bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+LCBtZWFuaW5nIHRoYXQKLSAgICAgICAgICB0aGV5IG11c3QgYmUgdmFsaWQgVVRGLTguIEhvd2V2ZXIsIHRoZXJlIGFyZSBhbHNvIHNvbWUKLSAgICAgICAgICBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyB0aGF0IGFwcGx5IHRvIGludGVyZmFjZSBuYW1lcworICAgICAgICAgIEludGVyZmFjZXMgaGF2ZSBuYW1lcyB3aXRoIHR5cGUgPGxpdGVyYWw+U1RSSU5HPC9saXRlcmFsPiwgbWVhbmluZyB0aGF0IAorICAgICAgICAgIHRoZXkgbXVzdCBiZSB2YWxpZCBVVEYtOC4gSG93ZXZlciwgdGhlcmUgYXJlIGFsc28gc29tZSAKKyAgICAgICAgICBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyB0aGF0IGFwcGx5IHRvIGludGVyZmFjZSBuYW1lcyAKICAgICAgICAgICBzcGVjaWZpY2FsbHk6CiAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnRlcmZhY2UgbmFtZXMgYXJlIGNvbXBvc2VkIG9mIDEgb3IgbW9yZSBlbGVtZW50cyBzZXBhcmF0ZWQgYnkKLSAgICAgICAgICAgICAgICBhIHBlcmlvZCAoJy4nKSBjaGFyYWN0ZXIuIEFsbCBlbGVtZW50cyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QKKyAgICAgICAgICAgICAgICBhIHBlcmlvZCAoJy4nKSBjaGFyYWN0ZXIuIEFsbCBlbGVtZW50cyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgCiAgICAgICAgICAgICAgICAgb25lIGNoYXJhY3Rlci4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVhY2ggZWxlbWVudCBtdXN0IG9ubHkgY29udGFpbiB0aGUgQVNDSUkgY2hhcmFjdGVycworICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVhY2ggZWxlbWVudCBtdXN0IG9ubHkgY29udGFpbiB0aGUgQVNDSUkgY2hhcmFjdGVycyAKICAgICAgICAgICAgICAgICAiW0EtWl1bYS16XVswLTldXyIgYW5kIG11c3Qgbm90IGJlZ2luIHdpdGggYSBkaWdpdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2xpc3RpdGVtPgpAQCAtMTgwOCw3ICsxNjk4LDcgQEAKICAgICAgICAgICB3aXRoIHRoZSBjb25uZWN0aW9uIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lLgogICAgICAgICAgIEEgYnVzIG5hbWUgaXMgb2YgdHlwZSA8bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+LAogICAgICAgICAgIG1lYW5pbmcgdGhhdCBpdCBtdXN0IGJlIHZhbGlkIFVURi04LiBIb3dldmVyLCB0aGVyZSBhcmUgYWxzbwotICAgICAgICAgIHNvbWUgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgdGhhdCBhcHBseSB0byBidXMgbmFtZXMKKyAgICAgICAgICBzb21lIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIHRoYXQgYXBwbHkgdG8gYnVzIG5hbWVzIAogICAgICAgICAgIHNwZWNpZmljYWxseToKICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1cyBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYSBjb2xvbiAoJzonKQpAQCAtMTgxNywxMSArMTcwNywxMSBAQAogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVzIG5hbWVzIGFyZSBjb21wb3NlZCBvZiAxIG9yIG1vcmUgZWxlbWVudHMgc2VwYXJhdGVkIGJ5Ci0gICAgICAgICAgICAgICAgYSBwZXJpb2QgKCcuJykgY2hhcmFjdGVyLiBBbGwgZWxlbWVudHMgbXVzdCBjb250YWluIGF0IGxlYXN0CisgICAgICAgICAgICAgICAgYSBwZXJpb2QgKCcuJykgY2hhcmFjdGVyLiBBbGwgZWxlbWVudHMgbXVzdCBjb250YWluIGF0IGxlYXN0IAogICAgICAgICAgICAgICAgIG9uZSBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGVsZW1lbnQgbXVzdCBvbmx5IGNvbnRhaW4gdGhlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGVsZW1lbnQgbXVzdCBvbmx5IGNvbnRhaW4gdGhlIEFTQ0lJIGNoYXJhY3RlcnMgCiAgICAgICAgICAgICAgICAgIltBLVpdW2Etel1bMC05XV8tIi4gT25seSBlbGVtZW50cyB0aGF0IGFyZSBwYXJ0IG9mIGEgdW5pcXVlCiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBuYW1lIG1heSBiZWdpbiB3aXRoIGEgZGlnaXQsIGVsZW1lbnRzIGluCiAgICAgICAgICAgICAgICAgb3RoZXIgYnVzIG5hbWVzIG11c3Qgbm90IGJlZ2luIHdpdGggYSBkaWdpdC4KQEAgLTE4OTgsOCArMTc4OCw4IEBACiAgICAgICAgICAgRXJyb3IgbmFtZXMgaGF2ZSB0aGUgc2FtZSBuYW1pbmcgY29udmVudGlvbnMgYXMgaW50ZXJmYWNlCiAgICAgICAgICAgbmFtZXMsIGFuZCBvZnRlbiBjb250YWluIDxsaXRlcmFsPi5FcnJvci48L2xpdGVyYWw+OyBmb3IgaW5zdGFuY2UsCiAgICAgICAgICAgdGhlIG93bmVyIG9mIDxsaXRlcmFsPmV4YW1wbGUuY29tPC9saXRlcmFsPiBtaWdodCBkZWZpbmUgdGhlCi0gICAgICAgICAgZXJyb3JzIDxsaXRlcmFsPmNvbS5leGFtcGxlLk11c2ljUGxheWVyMS5FcnJvci5GaWxlTm90Rm91bmQ8L2xpdGVyYWw+Ci0gICAgICAgICAgYW5kIDxsaXRlcmFsPmNvbS5leGFtcGxlLk11c2ljUGxheWVyMS5FcnJvci5PdXRPZk1lbW9yeTwvbGl0ZXJhbD4uCisgICAgICAgICAgZXJyb3JzIDxsaXRlcmFsPmNvbS5leGFtcGxlLk11c2ljUGxheWVyLkVycm9yLkZpbGVOb3RGb3VuZDwvbGl0ZXJhbD4KKyAgICAgICAgICBhbmQgPGxpdGVyYWw+Y29tLmV4YW1wbGUuTXVzaWNQbGF5ZXIuRXJyb3IuT3V0T2ZNZW1vcnk8L2xpdGVyYWw+LgogICAgICAgICAgIFRoZSBlcnJvcnMgZGVmaW5lZCBieSBELUJ1cyBpdHNlbGYsIHN1Y2ggYXMKICAgICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5FcnJvci5GYWlsZWQ8L2xpdGVyYWw+LCBmb2xsb3cgYQogICAgICAgICAgIHNpbWlsYXIgcGF0dGVybi4KQEAgLTE5NTgsMzIgKzE4NDgsMzMgQEAKICAgICAgICAgICByZXBseSBjYW4gaGF2ZSBvbmUgb2YgdHdvIHR5cGVzOyBlaXRoZXIgPGxpdGVyYWw+TUVUSE9EX1JFVFVSTjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHRoZSByZXBseSBoYXMgdHlwZSA8bGl0ZXJhbD5NRVRIT0RfUkVUVVJOPC9saXRlcmFsPiwgdGhlIGFyZ3VtZW50cyB0byB0aGUgcmVwbHkgbWVzc2FnZQotICAgICAgICAgIGFyZSB0aGUgcmV0dXJuIHZhbHVlKHMpIG9yICJvdXQgcGFyYW1ldGVycyIgb2YgdGhlIG1ldGhvZCBjYWxsLgotICAgICAgICAgIElmIHRoZSByZXBseSBoYXMgdHlwZSA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4sIHRoZW4gYW4gImV4Y2VwdGlvbiIgaGFzIGJlZW4gdGhyb3duLAotICAgICAgICAgIGFuZCB0aGUgY2FsbCBmYWlsczsgbm8gcmV0dXJuIHZhbHVlIHdpbGwgYmUgcHJvdmlkZWQuIEl0IG1ha2VzCisgICAgICAgICAgSWYgdGhlIHJlcGx5IGhhcyB0eXBlIDxsaXRlcmFsPk1FVEhPRF9SRVRVUk48L2xpdGVyYWw+LCB0aGUgYXJndW1lbnRzIHRvIHRoZSByZXBseSBtZXNzYWdlIAorICAgICAgICAgIGFyZSB0aGUgcmV0dXJuIHZhbHVlKHMpIG9yICJvdXQgcGFyYW1ldGVycyIgb2YgdGhlIG1ldGhvZCBjYWxsLiAKKyAgICAgICAgICBJZiB0aGUgcmVwbHkgaGFzIHR5cGUgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+LCB0aGVuIGFuICJleGNlcHRpb24iIGhhcyBiZWVuIHRocm93biwgCisgICAgICAgICAgYW5kIHRoZSBjYWxsIGZhaWxzOyBubyByZXR1cm4gdmFsdWUgd2lsbCBiZSBwcm92aWRlZC4gSXQgbWFrZXMgCiAgICAgICAgICAgbm8gc2Vuc2UgdG8gc2VuZCBtdWx0aXBsZSByZXBsaWVzIHRvIHRoZSBzYW1lIG1ldGhvZCBjYWxsLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIEV2ZW4gaWYgYSBtZXRob2QgY2FsbCBoYXMgbm8gcmV0dXJuIHZhbHVlcywgYSA8bGl0ZXJhbD5NRVRIT0RfUkVUVVJOPC9saXRlcmFsPgotICAgICAgICAgIHJlcGx5IGlzIHJlcXVpcmVkLCBzbyB0aGUgY2FsbGVyIHdpbGwga25vdyB0aGUgbWV0aG9kCisgICAgICAgICAgRXZlbiBpZiBhIG1ldGhvZCBjYWxsIGhhcyBubyByZXR1cm4gdmFsdWVzLCBhIDxsaXRlcmFsPk1FVEhPRF9SRVRVUk48L2xpdGVyYWw+IAorICAgICAgICAgIHJlcGx5IGlzIHJlcXVpcmVkLCBzbyB0aGUgY2FsbGVyIHdpbGwga25vdyB0aGUgbWV0aG9kIAogICAgICAgICAgIHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSA8bGl0ZXJhbD5NRVRIT0RfUkVUVVJOPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gcmVwbHkgbWVzc2FnZSBtdXN0IGhhdmUgdGhlIDxsaXRlcmFsPlJFUExZX1NFUklBTDwvbGl0ZXJhbD4KKyAgICAgICAgICBUaGUgPGxpdGVyYWw+TUVUSE9EX1JFVFVSTjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHJlcGx5IG1lc3NhZ2UgbXVzdCBoYXZlIHRoZSA8bGl0ZXJhbD5SRVBMWV9TRVJJQUw8L2xpdGVyYWw+IAogICAgICAgICAgIGhlYWRlciBmaWVsZC4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJZiBhIDxsaXRlcmFsPk1FVEhPRF9DQUxMPC9saXRlcmFsPiBtZXNzYWdlIGhhcyB0aGUgZmxhZyA8bGl0ZXJhbD5OT19SRVBMWV9FWFBFQ1RFRDwvbGl0ZXJhbD4sCi0gICAgICAgICAgdGhlbiB0aGUgYXBwbGljYXRpb24gcmVjZWl2aW5nIHRoZSBtZXRob2Qgc2hvdWxkIG5vdCBzZW5kIHRoZSByZXBseSBtZXNzYWdlIChyZWdhcmRsZXNzIG9mCi0gICAgICAgICAgd2hldGhlciB0aGUgcmVwbHkgd291bGQgaGF2ZSBiZWVuIDxsaXRlcmFsPk1FVEhPRF9SRVRVUk48L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPikuCisgICAgICAgICAgSWYgYSA8bGl0ZXJhbD5NRVRIT0RfQ0FMTDwvbGl0ZXJhbD4gbWVzc2FnZSBoYXMgdGhlIGZsYWcgPGxpdGVyYWw+Tk9fUkVQTFlfRVhQRUNURUQ8L2xpdGVyYWw+LCAKKyAgICAgICAgICB0aGVuIGFzIGFuIG9wdGltaXphdGlvbiB0aGUgYXBwbGljYXRpb24gcmVjZWl2aW5nIHRoZSBtZXRob2QgCisgICAgICAgICAgY2FsbCBtYXkgY2hvb3NlIHRvIG9taXQgdGhlIHJlcGx5IG1lc3NhZ2UgKHJlZ2FyZGxlc3Mgb2YgCisgICAgICAgICAgd2hldGhlciB0aGUgcmVwbHkgd291bGQgaGF2ZSBiZWVuIDxsaXRlcmFsPk1FVEhPRF9SRVRVUk48L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPikuIAorICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGFsc28gYWNjZXB0YWJsZSB0byBpZ25vcmUgdGhlIDxsaXRlcmFsPk5PX1JFUExZX0VYUEVDVEVEPC9saXRlcmFsPgorICAgICAgICAgIGZsYWcgYW5kIHJlcGx5IGFueXdheS4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBVbmxlc3MgYSBtZXNzYWdlIGhhcyB0aGUgZmxhZyA8bGl0ZXJhbD5OT19BVVRPX1NUQVJUPC9saXRlcmFsPiwgaWYgdGhlCiAgICAgICAgICAgZGVzdGluYXRpb24gbmFtZSBkb2VzIG5vdCBleGlzdCB0aGVuIGEgcHJvZ3JhbSB0byBvd24gdGhlIGRlc3RpbmF0aW9uCi0gICAgICAgICAgbmFtZSB3aWxsIGJlIHN0YXJ0ZWQgKGFjdGl2YXRlZCkgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIGRlbGl2ZXJlZC4gU2VlCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0ibWVzc2FnZS1idXMtc3RhcnRpbmctc2VydmljZXMiLz4uCi0gICAgICAgICAgVGhlIG1lc3NhZ2UKKyAgICAgICAgICBuYW1lIHdpbGwgYmUgc3RhcnRlZCBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgZGVsaXZlcmVkLiAgVGhlIG1lc3NhZ2UKICAgICAgICAgICB3aWxsIGJlIGhlbGQgdW50aWwgdGhlIG5ldyBwcm9ncmFtIGlzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIG9yIGhhcwogICAgICAgICAgIGZhaWxlZCB0byBzdGFydDsgaW4gY2FzZSBvZiBmYWlsdXJlLCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLiBUaGlzCiAgICAgICAgICAgZmxhZyBpcyBvbmx5IHJlbGV2YW50IGluIHRoZSBjb250ZXh0IG9mIGEgbWVzc2FnZSBidXMsIGl0IGlzIGlnbm9yZWQKQEAgLTIwMTMsOCArMTkwNCw4IEBACiAgICAgICAgICAgICBpbiBvcmRlci4gIm91dCIgYXJndW1lbnRzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIGNhbGxlcidzIG1lc3NhZ2UuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIHJlY2lwaWVudCBjb25zdHJ1Y3RzIGEgcmVwbHkgYnkgYXBwZW5kaW5nIGZpcnN0IHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgICAgIGlmIGFueSwgdGhlbiBlYWNoICJvdXQiIG9yICJpbm91dCIgYXJndW1lbnQsIGluIG9yZGVyLgorICAgICAgICAgICAgVGhlIHJlY2lwaWVudCBjb25zdHJ1Y3RzIGEgcmVwbHkgYnkgYXBwZW5kaW5nIGZpcnN0IHRoZSByZXR1cm4gdmFsdWUgCisgICAgICAgICAgICBpZiBhbnksIHRoZW4gZWFjaCAib3V0IiBvciAiaW5vdXQiIGFyZ3VtZW50LCBpbiBvcmRlci4gCiAgICAgICAgICAgICAiaW4iIGFyZ3VtZW50cyBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRoZSByZXBseSBtZXNzYWdlLgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICA8cGFyYT4KQEAgLTIwMjIsMTkgKzE5MTMsMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdGlvbnMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSW4gY29udmVydGluZyBmcm9tIG5hdGl2ZSBBUElzIHRvIEQtQnVzLCBpdCBpcyBwZXJoYXBzIG5pY2UgdG8KLSAgICAgICAgICAgIG1hcCBELUJ1cyBuYW1pbmcgY29udmVudGlvbnMgKCJGb29CYXIiKSB0byBuYXRpdmUgY29udmVudGlvbnMKLSAgICAgICAgICAgIHN1Y2ggYXMgImZvb0JhciIgb3IgImZvb19iYXIiIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgT0sKLSAgICAgICAgICAgIGFzIGxvbmcgYXMgeW91IGNhbiBzYXkgdGhhdCB0aGUgbmF0aXZlIEFQSSBpcyBvbmUgdGhhdAorICAgICAgICAgICAgSW4gY29udmVydGluZyBmcm9tIG5hdGl2ZSBBUElzIHRvIEQtQnVzLCBpdCBpcyBwZXJoYXBzIG5pY2UgdG8gCisgICAgICAgICAgICBtYXAgRC1CdXMgbmFtaW5nIGNvbnZlbnRpb25zICgiRm9vQmFyIikgdG8gbmF0aXZlIGNvbnZlbnRpb25zIAorICAgICAgICAgICAgc3VjaCBhcyAiZm9vQmFyIiBvciAiZm9vX2JhciIgYXV0b21hdGljYWxseS4gVGhpcyBpcyBPSyAKKyAgICAgICAgICAgIGFzIGxvbmcgYXMgeW91IGNhbiBzYXkgdGhhdCB0aGUgbmF0aXZlIEFQSSBpcyBvbmUgdGhhdCAKICAgICAgICAgICAgIHdhcyBzcGVjaWZpY2FsbHkgd3JpdHRlbiBmb3IgRC1CdXMuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlCi0gICAgICAgICAgICB3aGVuIHdyaXRpbmcgb2JqZWN0IGltcGxlbWVudGF0aW9ucyB0aGF0IHdpbGwgYmUgZXhwb3J0ZWQKLSAgICAgICAgICAgIG92ZXIgdGhlIGJ1cy4gT2JqZWN0IHByb3hpZXMgdXNlZCB0byBpbnZva2UgcmVtb3RlIEQtQnVzCisgICAgICAgICAgICB3aGVuIHdyaXRpbmcgb2JqZWN0IGltcGxlbWVudGF0aW9ucyB0aGF0IHdpbGwgYmUgZXhwb3J0ZWQgCisgICAgICAgICAgICBvdmVyIHRoZSBidXMuIE9iamVjdCBwcm94aWVzIHVzZWQgdG8gaW52b2tlIHJlbW90ZSBELUJ1cyAKICAgICAgICAgICAgIG9iamVjdHMgcHJvYmFibHkgbmVlZCB0aGUgYWJpbGl0eSB0byBjYWxsIGFueSBELUJ1cyBtZXRob2QsCiAgICAgICAgICAgICBhbmQgdGh1cyBhIG1hZ2ljIG5hbWUgbWFwcGluZyBsaWtlIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IHJlcXVpcmUgYW55dGhpbmcgb2YgbmF0aXZlIEFQSSBiaW5kaW5nczsKLSAgICAgICAgICAgIHRoZSBwcmVjZWRpbmcgaXMgb25seSBhIHN1Z2dlc3RlZCBjb252ZW50aW9uIGZvciBjb25zaXN0ZW5jeQorICAgICAgICAgICAgdGhlIHByZWNlZGluZyBpcyBvbmx5IGEgc3VnZ2VzdGVkIGNvbnZlbnRpb24gZm9yIGNvbnNpc3RlbmN5IAogICAgICAgICAgICAgYW1vbmcgYmluZGluZ3MuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Q0PgpAQCAtMjA0Myw5ICsxOTM0LDkgQEAKICAgICAgIDxzZWN0MyBpZD0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1zaWduYWwiPgogICAgICAgICA8dGl0bGU+U2lnbmFsIEVtaXNzaW9uPC90aXRsZT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVW5saWtlIG1ldGhvZCBjYWxscywgc2lnbmFsIGVtaXNzaW9ucyBoYXZlIG5vIHJlcGxpZXMuCisgICAgICAgICAgVW5saWtlIG1ldGhvZCBjYWxscywgc2lnbmFsIGVtaXNzaW9ucyBoYXZlIG5vIHJlcGxpZXMuIAogICAgICAgICAgIEEgc2lnbmFsIGVtaXNzaW9uIGlzIHNpbXBseSBhIHNpbmdsZSBtZXNzYWdlIG9mIHR5cGUgPGxpdGVyYWw+U0lHTkFMPC9saXRlcmFsPi4KLSAgICAgICAgICBJdCBtdXN0IGhhdmUgdGhyZWUgaGVhZGVyIGZpZWxkczogPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZ2l2aW5nIHRoZSBvYmplY3QKKyAgICAgICAgICBJdCBtdXN0IGhhdmUgdGhyZWUgaGVhZGVyIGZpZWxkczogPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZ2l2aW5nIHRoZSBvYmplY3QgCiAgICAgICAgICAgdGhlIHNpZ25hbCB3YXMgZW1pdHRlZCBmcm9tLCBwbHVzIDxsaXRlcmFsPklOVEVSRkFDRTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPk1FTUJFUjwvbGl0ZXJhbD4gZ2l2aW5nCiAgICAgICAgICAgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzaWduYWwuIFRoZSA8bGl0ZXJhbD5JTlRFUkZBQ0U8L2xpdGVyYWw+IGhlYWRlciBpcyByZXF1aXJlZAogICAgICAgICAgIGZvciBzaWduYWxzLCB0aG91Z2ggaXQgaXMgb3B0aW9uYWwgZm9yIG1ldGhvZCBjYWxscy4KQEAgLTIwNTUsMTQgKzE5NDYsMTQgQEAKICAgICAgIDxzZWN0MyBpZD0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1lcnJvcnMiPgogICAgICAgICA8dGl0bGU+RXJyb3JzPC90aXRsZT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWVzc2FnZXMgb2YgdHlwZSA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gYXJlIG1vc3QgY29tbW9ubHkgcmVwbGllcwotICAgICAgICAgIHRvIGEgPGxpdGVyYWw+TUVUSE9EX0NBTEw8L2xpdGVyYWw+LCBidXQgbWF5IGJlIHJldHVybmVkIGluIHJlcGx5CisgICAgICAgICAgTWVzc2FnZXMgb2YgdHlwZSA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gYXJlIG1vc3QgY29tbW9ubHkgcmVwbGllcyAKKyAgICAgICAgICB0byBhIDxsaXRlcmFsPk1FVEhPRF9DQUxMPC9saXRlcmFsPiwgYnV0IG1heSBiZSByZXR1cm5lZCBpbiByZXBseSAKICAgICAgICAgICB0byBhbnkga2luZCBvZiBtZXNzYWdlLiBUaGUgbWVzc2FnZSBidXMgZm9yIGV4YW1wbGUKLSAgICAgICAgICB3aWxsIHJldHVybiBhbiA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gaW4gcmVwbHkgdG8gYSBzaWduYWwgZW1pc3Npb24gaWYKKyAgICAgICAgICB3aWxsIHJldHVybiBhbiA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gaW4gcmVwbHkgdG8gYSBzaWduYWwgZW1pc3Npb24gaWYgCiAgICAgICAgICAgdGhlIGJ1cyBkb2VzIG5vdCBoYXZlIGVub3VnaCBtZW1vcnkgdG8gc2VuZCB0aGUgc2lnbmFsLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIEFuIDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiBtYXkgaGF2ZSBhbnkgYXJndW1lbnRzLCBidXQgaWYgdGhlIGZpcnN0CisgICAgICAgICAgQW4gPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IG1heSBoYXZlIGFueSBhcmd1bWVudHMsIGJ1dCBpZiB0aGUgZmlyc3QgCiAgICAgICAgICAgYXJndW1lbnQgaXMgYSA8bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+LCBpdCBtdXN0IGJlIGFuIGVycm9yIG1lc3NhZ2UuCiAgICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgbWF5IGJlIGxvZ2dlZCBvciBzaG93biB0byB0aGUgdXNlcgogICAgICAgICAgIGluIHNvbWUgd2F5LgpAQCAtMjA3MiwxMyArMTk2MywxMyBAQAogICAgICAgPHNlY3QzIGlkPSJtZXNzYWdlLXByb3RvY29sLXR5cGVzLW5vdGF0aW9uIj4KICAgICAgICAgPHRpdGxlPk5vdGF0aW9uIGluIHRoaXMgZG9jdW1lbnQ8L3RpdGxlPgogICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGRvY3VtZW50IHVzZXMgYSBzaW1wbGUgcHNldWRvLUlETCB0byBkZXNjcmliZSBwYXJ0aWN1bGFyIG1ldGhvZAorICAgICAgICAgIFRoaXMgZG9jdW1lbnQgdXNlcyBhIHNpbXBsZSBwc2V1ZG8tSURMIHRvIGRlc2NyaWJlIHBhcnRpY3VsYXIgbWV0aG9kIAogICAgICAgICAgIGNhbGxzIGFuZCBzaWduYWxzLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRob2QgY2FsbDoKICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5TdGFydFNlcnZpY2VCeU5hbWUgKGluIFNUUklORyBuYW1lLCBpbiBVSU5UMzIgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBVSU5UMzIgcmVzdWx0Y29kZSkKICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIFRoaXMgbWVhbnMgPGxpdGVyYWw+SU5URVJGQUNFPC9saXRlcmFsPiA9IG9yZy5mcmVlZGVza3RvcC5EQnVzLCA8bGl0ZXJhbD5NRU1CRVI8L2xpdGVyYWw+ID0gU3RhcnRTZXJ2aWNlQnlOYW1lLAorICAgICAgICAgIFRoaXMgbWVhbnMgPGxpdGVyYWw+SU5URVJGQUNFPC9saXRlcmFsPiA9IG9yZy5mcmVlZGVza3RvcC5EQnVzLCA8bGl0ZXJhbD5NRU1CRVI8L2xpdGVyYWw+ID0gU3RhcnRTZXJ2aWNlQnlOYW1lLCAKICAgICAgICAgICA8bGl0ZXJhbD5NRVRIT0RfQ0FMTDwvbGl0ZXJhbD4gYXJndW1lbnRzIGFyZSA8bGl0ZXJhbD5TVFJJTkc8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5VSU5UMzI8L2xpdGVyYWw+LCA8bGl0ZXJhbD5NRVRIT0RfUkVUVVJOPC9saXRlcmFsPiBhcmd1bWVudAogICAgICAgICAgIGlzIDxsaXRlcmFsPlVJTlQzMjwvbGl0ZXJhbD4uIFJlbWVtYmVyIHRoYXQgdGhlIDxsaXRlcmFsPk1FTUJFUjwvbGl0ZXJhbD4gZmllbGQgY2FuJ3QgY29udGFpbiBhbnkgJy4nIChwZXJpb2QpCiAgICAgICAgICAgY2hhcmFjdGVycyBzbyBpdCdzIGtub3duIHRoYXQgdGhlIGxhc3QgcGFydCBvZiB0aGUgbmFtZSBpbgpAQCAtMjA5MiwxMiArMTk4MywxMiBAQAogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgb3IgZXF1YWxseSB2YWxpZCwgdGhlIHJldHVybiB2YWx1ZSBjb3VsZCBiZSBkb25lIGFzIGFuIGFyZ3VtZW50OgogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICAgIHZvaWQgb3JnOjpmcmVlZGVza3RvcDo6REJ1czo6U3RhcnRTZXJ2aWNlQnlOYW1lIChjb25zdCBjaGFyICAgKm5hbWUsCisgICAgICAgICAgICB2b2lkIG9yZzo6ZnJlZWRlc2t0b3A6OkRCdXM6OlN0YXJ0U2VydmljZUJ5TmFtZSAoY29uc3QgY2hhciAgICpuYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqcmVzdWx0Y29kZSk7CiAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICBJdCdzIHJlYWxseSB1cCB0byB0aGUgQVBJIGRlc2lnbmVyIGhvdyB0aGV5IHdhbnQgdG8gbWFrZQotICAgICAgICAgIHRoaXMgbG9vay4gWW91IGNvdWxkIGRlc2lnbiBhbiBBUEkgd2hlcmUgdGhlIG5hbWVzcGFjZSB3YXNuJ3QgdXNlZAorICAgICAgICAgIEl0J3MgcmVhbGx5IHVwIHRvIHRoZSBBUEkgZGVzaWduZXIgaG93IHRoZXkgd2FudCB0byBtYWtlIAorICAgICAgICAgIHRoaXMgbG9vay4gWW91IGNvdWxkIGRlc2lnbiBhbiBBUEkgd2hlcmUgdGhlIG5hbWVzcGFjZSB3YXNuJ3QgdXNlZCAKICAgICAgICAgICBpbiBDKyssIHVzaW5nIFNUTCBvciBRdCwgdXNpbmcgdmFyYXJncywgb3Igd2hhdGV2ZXIgeW91IHdhbnRlZC4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KQEAgLTIxMDUsNyArMTk5Niw3IEBACiAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICAgICAgICAgICAgb3JnLmZyZWVkZXNrdG9wLkRCdXMuTmFtZUxvc3QgKFNUUklORyBuYW1lKQogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgU2lnbmFscyBkb24ndCBzcGVjaWZ5ICJpbiIgdnMuICJvdXQiIGJlY2F1c2Ugb25seQorICAgICAgICAgIFNpZ25hbHMgZG9uJ3Qgc3BlY2lmeSAiaW4iIHZzLiAib3V0IiBiZWNhdXNlIG9ubHkgCiAgICAgICAgICAgYSBzaW5nbGUgZGlyZWN0aW9uIGlzIHBvc3NpYmxlLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgpAQCAtMjExOCw3ICsyMDA5LDcgQEAKIAogICAgIDxzZWN0MiBpZD0ibWVzc2FnZS1wcm90b2NvbC1oYW5kbGluZy1pbnZhbGlkIj4KICAgICAgIDx0aXRsZT5JbnZhbGlkIFByb3RvY29sIGFuZCBTcGVjIEV4dGVuc2lvbnM8L3RpdGxlPgotCisgICAgICAKICAgICAgIDxwYXJhPgogICAgICAgICBGb3Igc2VjdXJpdHkgcmVhc29ucywgdGhlIEQtQnVzIHByb3RvY29sIHNob3VsZCBiZSBzdHJpY3RseSBwYXJzZWQgYW5kCiAgICAgICAgIHZhbGlkYXRlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGRlZmluZWQgZXh0ZW5zaW9uIHBvaW50cy4gQW55IGludmFsaWQKQEAgLTIxMzIsOCArMjAyMyw4IEBACiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcgdmlvbGF0aW9ucyBvZiB0aGUgIm11c3QiIHJlcXVpcmVtZW50cyBpbiB0aGlzIHNwZWMKLSAgICAgICAgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcG9zc2libGUgYXR0ZW1wdHMgdG8gZXhwbG9pdCBzZWN1cml0eSwgYW5kIHZpb2xhdGlvbnMKKyAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nIHZpb2xhdGlvbnMgb2YgdGhlICJtdXN0IiByZXF1aXJlbWVudHMgaW4gdGhpcyBzcGVjIAorICAgICAgICBzaG91bGQgYmUgY29uc2lkZXJlZCBwb3NzaWJsZSBhdHRlbXB0cyB0byBleHBsb2l0IHNlY3VyaXR5LCBhbmQgdmlvbGF0aW9ucyAKICAgICAgICAgb2YgdGhlICJzaG91bGQiIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBjb25zaWRlcmVkIGxlZ2l0aW1hdGUgKHRob3VnaCBwZXJoYXBzCiAgICAgICAgIHRoZXkgc2hvdWxkIGdlbmVyYXRlIGFuIGVycm9yIGluIHNvbWUgY2FzZXMpLgogICAgICAgPC9wYXJhPgpAQCAtMjE0OSw5ICsyMDQwLDkgQEAKICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgSW4gdGhlIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIChzZWUgPHhyZWYgbGlua2VuZD0iYXV0aC1wcm90b2NvbCIvPikgdW5rbm93bgotICAgICAgICAgICAgICAgIGNvbW1hbmRzIHJlc3VsdCBpbiBhbiBFUlJPUiByYXRoZXIgdGhhbiBhIGRpc2Nvbm5lY3QuIFRoaXMgZW5hYmxlcwotICAgICAgICAgICAgICAgIGZ1dHVyZSBleHRlbnNpb25zIHRvIHRoZSBwcm90b2NvbC4gQ29tbWFuZHMgc3RhcnRpbmcgd2l0aCBFWFRFTlNJT05fIGFyZQorICAgICAgICAgICAgICBJbiB0aGUgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKHNlZSA8eHJlZiBsaW5rZW5kPSJhdXRoLXByb3RvY29sIi8+KSB1bmtub3duIAorICAgICAgICAgICAgICAgIGNvbW1hbmRzIHJlc3VsdCBpbiBhbiBFUlJPUiByYXRoZXIgdGhhbiBhIGRpc2Nvbm5lY3QuIFRoaXMgZW5hYmxlcyAKKyAgICAgICAgICAgICAgICBmdXR1cmUgZXh0ZW5zaW9ucyB0byB0aGUgcHJvdG9jb2wuIENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggRVhURU5TSU9OXyBhcmUgCiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgZm9yIHRoaXJkIHBhcnRpZXMuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgPC9saXN0aXRlbT4KQEAgLTIxNzAsMTUgKzIwNjEsMTUgQEAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICBNZXNzYWdlcyB3aXRoIGFuIHVua25vd24gdHlwZSAoc29tZXRoaW5nIG90aGVyIHRoYW4KICAgICAgICAgICAgICAgPGxpdGVyYWw+TUVUSE9EX0NBTEw8L2xpdGVyYWw+LCA8bGl0ZXJhbD5NRVRIT0RfUkVUVVJOPC9saXRlcmFsPiwKLSAgICAgICAgICAgICAgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+LCA8bGl0ZXJhbD5TSUdOQUw8L2xpdGVyYWw+KSBhcmUgaWdub3JlZC4KLSAgICAgICAgICAgICAgVW5rbm93bi10eXBlIG1lc3NhZ2VzIG11c3Qgc3RpbGwgYmUgd2VsbC1mb3JtZWQgaW4gdGhlIHNhbWUgd2F5Ci0gICAgICAgICAgICAgIGFzIHRoZSBrbm93biBtZXNzYWdlcywgaG93ZXZlci4gVGhleSBzdGlsbCBoYXZlIHRoZSBub3JtYWwKKyAgICAgICAgICAgICAgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+LCA8bGl0ZXJhbD5TSUdOQUw8L2xpdGVyYWw+KSBhcmUgaWdub3JlZC4gCisgICAgICAgICAgICAgIFVua25vd24tdHlwZSBtZXNzYWdlcyBtdXN0IHN0aWxsIGJlIHdlbGwtZm9ybWVkIGluIHRoZSBzYW1lIHdheSAKKyAgICAgICAgICAgICAgYXMgdGhlIGtub3duIG1lc3NhZ2VzLCBob3dldmVyLiBUaGV5IHN0aWxsIGhhdmUgdGhlIG5vcm1hbCAKICAgICAgICAgICAgICAgaGVhZGVyIGFuZCBib2R5LgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgIEhlYWRlciBmaWVsZHMgd2l0aCBhbiB1bmtub3duIG9yIHVuZXhwZWN0ZWQgZmllbGQgY29kZSBtdXN0IGJlIGlnbm9yZWQsCisgICAgICAgICAgICAgIEhlYWRlciBmaWVsZHMgd2l0aCBhbiB1bmtub3duIG9yIHVuZXhwZWN0ZWQgZmllbGQgY29kZSBtdXN0IGJlIGlnbm9yZWQsIAogICAgICAgICAgICAgICB0aG91Z2ggYWdhaW4gdGhleSBtdXN0IHN0aWxsIGJlIHdlbGwtZm9ybWVkLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDwvbGlzdGl0ZW0+CkBAIC0yMjM4LDcgKzIxMjksNyBAQAogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgICBVbm9mZmljaWFsIGV4dGVuc2lvbnMgdG8gdGhlIGNvbW1hbmQgc2V0IG11c3QgYmVnaW4gd2l0aCB0aGUgbGV0dGVycworICAgICAgICBVbm9mZmljaWFsIGV4dGVuc2lvbnMgdG8gdGhlIGNvbW1hbmQgc2V0IG11c3QgYmVnaW4gd2l0aCB0aGUgbGV0dGVycyAKICAgICAgICAgIkVYVEVOU0lPTl8iLCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBmdXR1cmUgb2ZmaWNpYWwgY29tbWFuZHMuCiAgICAgICAgIEZvciBleGFtcGxlLCAiRVhURU5TSU9OX0NPTV9NWURPTUFJTl9ET19TVFVGRiIuCiAgICAgICA8L3BhcmE+CkBAIC0yMjU0LDE1ICsyMTQ1LDE1IEBACiAgICAgICAgIHNvY2tldCwgYW5kIGV2ZW4gb24gb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBkbyBub3QgcmVxdWlyZSBhIGJ5dGUgdG8gYmUKICAgICAgICAgc2VudCBpbiBvcmRlciB0byB0cmFuc21pdCBjcmVkZW50aWFscy4gVGhlIHRleHQgcHJvdG9jb2wgZGVzY3JpYmVkIGluCiAgICAgICAgIHRoaXMgZG9jdW1lbnQgYmVnaW5zIGFmdGVyIHRoZSBzaW5nbGUgbnVsIGJ5dGUuIElmIHRoZSBmaXJzdCBieXRlCi0gICAgICAgIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudCBpcyBub3QgYSBudWwgYnl0ZSwgdGhlIHNlcnZlciBtYXkgZGlzY29ubmVjdAorICAgICAgICByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQgaXMgbm90IGEgbnVsIGJ5dGUsIHRoZSBzZXJ2ZXIgbWF5IGRpc2Nvbm5lY3QgCiAgICAgICAgIHRoYXQgY2xpZW50LgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIEEgbnVsIGJ5dGUgaW4gYW55IGNvbnRleHQgb3RoZXIgdGhhbiB0aGUgaW5pdGlhbCBieXRlIGlzIGFuIGVycm9yOworICAgICAgICBBIG51bCBieXRlIGluIGFueSBjb250ZXh0IG90aGVyIHRoYW4gdGhlIGluaXRpYWwgYnl0ZSBpcyBhbiBlcnJvcjsgCiAgICAgICAgIHRoZSBwcm90b2NvbCBpcyBBU0NJSS1vbmx5LgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBjcmVkZW50aWFscyBzZW50IGFsb25nIHdpdGggdGhlIG51bCBieXRlIG1heSBiZSB1c2VkIHdpdGggdGhlCisgICAgICAgIFRoZSBjcmVkZW50aWFscyBzZW50IGFsb25nIHdpdGggdGhlIG51bCBieXRlIG1heSBiZSB1c2VkIHdpdGggdGhlIAogICAgICAgICBTQVNMIG1lY2hhbmlzbSBFWFRFUk5BTC4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgpAQCAtMjI5Miw3ICsyMTgzLDcgQEAKICAgICAgICAgUkVKRUNURUQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KLSAgICAgICAgSWYgYXV0aGVudGljYXRpb24gc3VjY2VlZHMgYWZ0ZXIgZXhjaGFuZ2luZyBEQVRBIGNvbW1hbmRzLAorICAgICAgICBJZiBhdXRoZW50aWNhdGlvbiBzdWNjZWVkcyBhZnRlciBleGNoYW5naW5nIERBVEEgY29tbWFuZHMsIAogICAgICAgICBhbiBPSyBjb21tYW5kIG11c3QgYmUgc2VudCB0byB0aGUgY2xpZW50LgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CkBAIC0yMzE5LDIxICsyMjEwLDIxIEBACiAgICAgPHNlY3QyIGlkPSJhdXRoLWNvbW1hbmQtZGF0YSI+CiAgICAgICA8dGl0bGU+REFUQSBDb21tYW5kPC90aXRsZT4KICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgREFUQSBjb21tYW5kIG1heSBjb21lIGZyb20gZWl0aGVyIGNsaWVudCBvciBzZXJ2ZXIsIGFuZCBzaW1wbHkKLSAgICAgICAgY29udGFpbnMgYSBoZXgtZW5jb2RlZCBibG9jayBvZiBkYXRhIHRvIGJlIGludGVycHJldGVkCisgICAgICAgIFRoZSBEQVRBIGNvbW1hbmQgbWF5IGNvbWUgZnJvbSBlaXRoZXIgY2xpZW50IG9yIHNlcnZlciwgYW5kIHNpbXBseSAKKyAgICAgICAgY29udGFpbnMgYSBoZXgtZW5jb2RlZCBibG9jayBvZiBkYXRhIHRvIGJlIGludGVycHJldGVkIAogICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIFNBU0wgbWVjaGFuaXNtIGluIHVzZS4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgICBTb21lIFNBU0wgbWVjaGFuaXNtcyBzdXBwb3J0IHNlbmRpbmcgYW4gImVtcHR5IHN0cmluZyI7CisgICAgICAgIFNvbWUgU0FTTCBtZWNoYW5pc21zIHN1cHBvcnQgc2VuZGluZyBhbiAiZW1wdHkgc3RyaW5nIjsgCiAgICAgICAgIEZJWE1FIHdlIG5lZWQgc29tZSB3YXkgdG8gZG8gdGhpcy4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgogICAgIDxzZWN0MiBpZD0iYXV0aC1jb21tYW5kLWJlZ2luIj4KICAgICAgIDx0aXRsZT5CRUdJTiBDb21tYW5kPC90aXRsZT4KICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgQkVHSU4gY29tbWFuZCBhY2tub3dsZWRnZXMgdGhhdCB0aGUgY2xpZW50IGhhcyByZWNlaXZlZCBhbgorICAgICAgICBUaGUgQkVHSU4gY29tbWFuZCBhY2tub3dsZWRnZXMgdGhhdCB0aGUgY2xpZW50IGhhcyByZWNlaXZlZCBhbiAKICAgICAgICAgT0sgY29tbWFuZCBmcm9tIHRoZSBzZXJ2ZXIsIGFuZCB0aGF0IHRoZSBzdHJlYW0gb2YgbWVzc2FnZXMKLSAgICAgICAgaXMgYWJvdXQgdG8gYmVnaW4uCisgICAgICAgIGlzIGFib3V0IHRvIGJlZ2luLiAKICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgogICAgICAgICBUaGUgZmlyc3Qgb2N0ZXQgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlciBhZnRlciB0aGUgXHJcbiBvZiB0aGUgQkVHSU4KQEAgLTIzNTEsOCArMjI0Miw4IEBACiAgICAgICA8L3BhcmE+PHBhcmE+CiAgICAgICAgIE9wdGlvbmFsbHksIHRoZSBSRUpFQ1RFRCBjb21tYW5kIGhhcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCiAgICAgICAgIGF2YWlsYWJsZSBhdXRoIG1lY2hhbmlzbXMgYXMgYXJndW1lbnRzLiBJZiBhIHNlcnZlciBldmVyIHByb3ZpZGVzCi0gICAgICAgIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbWVjaGFuaXNtcywgaXQgbXVzdCBwcm92aWRlIHRoZSBzYW1lIGxpc3QKLSAgICAgICAgZWFjaCB0aW1lIGl0IHNlbmRzIGEgUkVKRUNURUQgbWVzc2FnZS4gQ2xpZW50cyBhcmUgZnJlZSB0bworICAgICAgICBhIGxpc3Qgb2Ygc3VwcG9ydGVkIG1lY2hhbmlzbXMsIGl0IG11c3QgcHJvdmlkZSB0aGUgc2FtZSBsaXN0IAorICAgICAgICBlYWNoIHRpbWUgaXQgc2VuZHMgYSBSRUpFQ1RFRCBtZXNzYWdlLiBDbGllbnRzIGFyZSBmcmVlIHRvIAogICAgICAgICBpZ25vcmUgYWxsIGxpc3RzIHJlY2VpdmVkIGFmdGVyIHRoZSBmaXJzdC4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgpAQCAtMjM5Nyw4ICsyMjg4LDggQEAKICAgICAgIDxwYXJhPgogICAgICAgICBJZiBhbiBFUlJPUiBpcyBzZW50LCB0aGUgc2VydmVyIG9yIGNsaWVudCB0aGF0IHNlbnQgdGhlCiAgICAgICAgIGVycm9yIG11c3QgY29udGludWUgYXMgaWYgdGhlIGNvbW1hbmQgY2F1c2luZyB0aGUgRVJST1IgaGFkIG5ldmVyIGJlZW4KLSAgICAgICAgcmVjZWl2ZWQuIEhvd2V2ZXIsIHRoZSB0aGUgc2VydmVyIG9yIGNsaWVudCByZWNlaXZpbmcgdGhlIGVycm9yCi0gICAgICAgIHNob3VsZCB0cnkgc29tZXRoaW5nIG90aGVyIHRoYW4gd2hhdGV2ZXIgY2F1c2VkIHRoZSBlcnJvcjsKKyAgICAgICAgcmVjZWl2ZWQuIEhvd2V2ZXIsIHRoZSB0aGUgc2VydmVyIG9yIGNsaWVudCByZWNlaXZpbmcgdGhlIGVycm9yIAorICAgICAgICBzaG91bGQgdHJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIHdoYXRldmVyIGNhdXNlZCB0aGUgZXJyb3I7IAogICAgICAgICBpZiBvbmx5IGNhbmNlbGluZy9yZWplY3RpbmcgdGhlIGF1dGhlbnRpY2F0aW9uLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CkBAIC0yNDYyLDcgKzIzNTMsNyBAQAogICAgIDwvc2VjdDI+CiAgICAgPHNlY3QyIGlkPSJhdXRoLWV4YW1wbGVzIj4KICAgICAgIDx0aXRsZT5BdXRoZW50aWNhdGlvbiBleGFtcGxlczwvdGl0bGU+Ci0KKyAgICAgIAogICAgICAgPHBhcmE+CiAgICAgICAgIDxmaWd1cmU+CiAgICAgICAgICAgPHRpdGxlPkV4YW1wbGUgb2Ygc3VjY2Vzc2Z1bCBtYWdpYyBjb29raWUgYXV0aGVudGljYXRpb248L3RpdGxlPgpAQCAtMjU2OCwxNiArMjQ1OSwxNiBAQAogICAgIDwvc2VjdDI+CiAgICAgPHNlY3QyIGlkPSJhdXRoLXN0YXRlcyI+CiAgICAgICA8dGl0bGU+QXV0aGVudGljYXRpb24gc3RhdGUgZGlhZ3JhbXM8L3RpdGxlPgotCisgICAgICAKICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBhdXRoIHByb3RvY29sIGluIHRlcm1zIG9mCi0gICAgICAgIGEgc3RhdGUgbWFjaGluZSBmb3IgdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4gVGhpcyBpcworICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBhdXRoIHByb3RvY29sIGluIHRlcm1zIG9mIAorICAgICAgICBhIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgCiAgICAgICAgIHByb2JhYmx5IHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gaW1wbGVtZW50IHRoZSBwcm90b2NvbC4KICAgICAgIDwvcGFyYT4KIAogICAgICAgPHNlY3QzIGlkPSJhdXRoLXN0YXRlcy1jbGllbnQiPgogICAgICAgICA8dGl0bGU+Q2xpZW50IHN0YXRlczwvdGl0bGU+Ci0KKyAgICAgICAgCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIFRvIG1vcmUgcHJlY2lzZWx5IGRlc2NyaWJlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZQogICAgICAgICAgIHByb3RvY29sIHN0YXRlIG1hY2hpbmUgYW5kIHRoZSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHRoZQpAQCAtMjYwOCwxMCArMjQ5OSwxMCBAQAogICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotCisgICAgICAgICAgCiAgICAgICAgICAgQm90aCBSRVNQIGFuZCBDSEFMTCBtYXkgYmUgZW1wdHkuCiAgICAgICAgIDwvcGFyYT4KLQorICAgICAgICAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgVGhlIENsaWVudCBzdGFydHMgYnkgZ2V0dGluZyBhbiBpbml0aWFsIHJlc3BvbnNlIGZyb20gdGhlCiAgICAgICAgICAgZGVmYXVsdCBtZWNoYW5pc20gYW5kIHNlbmRzIEFVVEggTUVDSCBSRVNQLCBvciBBVVRIIE1FQ0ggaWYKQEAgLTI2MjEsNyArMjUxMiw3IEBACiAgICAgICAgICAgcmV0dXJucyBPSyB0aGUgY2xpZW50IHN0YXJ0cyBpbiBzdGF0ZQogICAgICAgICAgIDxlbXBoYXNpcz5XYWl0aW5nRm9yT0s8L2VtcGhhc2lzPi4KICAgICAgICAgPC9wYXJhPgotCisgICAgICAgIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICBUaGUgY2xpZW50IHNob3VsZCBrZWVwIHRyYWNrIG9mIGF2YWlsYWJsZSBtZWNoYW5pc21zIGFuZAogICAgICAgICAgIHdoaWNoIGl0IG1lY2hhbmlzbXMgaXQgaGFzIGFscmVhZHkgYXR0ZW1wdGVkLiBUaGlzIGxpc3QgaXMKQEAgLTI3NTcsNyArMjY0OCw3IEBACiAKICAgICAgIDxzZWN0MyBpZD0iYXV0aC1zdGF0ZXMtc2VydmVyIj4KICAgICAgICAgPHRpdGxlPlNlcnZlciBzdGF0ZXM8L3RpdGxlPgotCisgCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIEZvciB0aGUgc2VydmVyIE1FQ0goUkVTUCkgbWVhbnMgdGhhdCB0aGUgY2xpZW50IHJlc3BvbnNlCiAgICAgICAgICAgUkVTUCB3YXMgZmVkIHRvIHRoZSB0aGUgbWVjaGFuaXNtIE1FQ0gsIHdoaWNoIHJldHVybnMgb25lIG9mCkBAIC0yODU5LDcgKzI3NTAsNyBAQAogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9mb3JtYWxwYXJhPgogCi0KKyAgICAgICAKICAgICAgICAgPGZvcm1hbHBhcmE+CiAgICAgICAgICAgPHRpdGxlPjxlbXBoYXNpcz5XYWl0aW5nRm9yRGF0YTwvZW1waGFzaXM+PC90aXRsZT4KICAgICAgICAgICA8cGFyYT4KQEAgLTI5NTUsNyArMjg0Niw3IEBACiAgICAgICAgIDwvZm9ybWFscGFyYT4KIAogICAgICAgPC9zZWN0Mz4KLQorICAgICAgCiAgICAgPC9zZWN0Mj4KICAgICA8c2VjdDIgaWQ9ImF1dGgtbWVjaGFuaXNtcyI+CiAgICAgICA8dGl0bGU+QXV0aGVudGljYXRpb24gbWVjaGFuaXNtczwvdGl0bGU+CkBAIC0yOTY5LDggKzI4NjAsOCBAQAogICAgICAgICAgIFRoZSBEQlVTX0NPT0tJRV9TSEExIG1lY2hhbmlzbSBpcyBkZXNpZ25lZCB0byBlc3RhYmxpc2ggdGhhdCBhIGNsaWVudAogICAgICAgICAgIGhhcyB0aGUgYWJpbGl0eSB0byByZWFkIGEgcHJpdmF0ZSBmaWxlIG93bmVkIGJ5IHRoZSB1c2VyIGJlaW5nCiAgICAgICAgICAgYXV0aGVudGljYXRlZC4gSWYgdGhlIGNsaWVudCBjYW4gcHJvdmUgdGhhdCBpdCBoYXMgYWNjZXNzIHRvIGEgc2VjcmV0Ci0gICAgICAgICAgY29va2llIHN0b3JlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlIGNsaWVudCBpcyBhdXRoZW50aWNhdGVkLgotICAgICAgICAgIFRodXMgdGhlIHNlY3VyaXR5IG9mIERCVVNfQ09PS0lFX1NIQTEgZGVwZW5kcyBvbiBhIHNlY3VyZSBob21lCisgICAgICAgICAgY29va2llIHN0b3JlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlIGNsaWVudCBpcyBhdXRoZW50aWNhdGVkLiAKKyAgICAgICAgICBUaHVzIHRoZSBzZWN1cml0eSBvZiBEQlVTX0NPT0tJRV9TSEExIGRlcGVuZHMgb24gYSBzZWN1cmUgaG9tZSAKICAgICAgICAgICBkaXJlY3RvcnkuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+CkBAIC0yOTgzLDcgKzI4NzQsNyBAQAogICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgc2VuZHMgdGhlIHVzZXJuYW1lIGl0IHdvdWxkIGxpa2UgdG8gYXV0aGVudGljYXRlCisgICAgICAgICAgICAgICAgVGhlIGNsaWVudCBzZW5kcyB0aGUgdXNlcm5hbWUgaXQgd291bGQgbGlrZSB0byBhdXRoZW50aWNhdGUgCiAgICAgICAgICAgICAgICAgYXMsIGhleC1lbmNvZGVkLgogICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2xpc3RpdGVtPgpAQCAtMzAyOSwxMyArMjkyMCwxMyBAQAogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAgIENvb2tpZXMgYXJlIHN0b3JlZCBpbiBhIHVzZXIncyBob21lIGRpcmVjdG9yeSwgaW4gdGhlIGRpcmVjdG9yeQotICAgICAgICAgIDxmaWxlbmFtZT5+Ly5kYnVzLWtleXJpbmdzLzwvZmlsZW5hbWU+LiBUaGlzIGRpcmVjdG9yeSBtdXN0Ci0gICAgICAgICAgbm90IGJlIHJlYWRhYmxlIG9yIHdyaXRhYmxlIGJ5IG90aGVyIHVzZXJzLiBJZiBpdCBpcywKLSAgICAgICAgICBjbGllbnRzIGFuZCBzZXJ2ZXJzIG11c3QgaWdub3JlIGl0LiBUaGUgZGlyZWN0b3J5CisgICAgICAgICAgPGZpbGVuYW1lPn4vLmRidXMta2V5cmluZ3MvPC9maWxlbmFtZT4uIFRoaXMgZGlyZWN0b3J5IG11c3QgCisgICAgICAgICAgbm90IGJlIHJlYWRhYmxlIG9yIHdyaXRhYmxlIGJ5IG90aGVyIHVzZXJzLiBJZiBpdCBpcywgCisgICAgICAgICAgY2xpZW50cyBhbmQgc2VydmVycyBtdXN0IGlnbm9yZSBpdC4gVGhlIGRpcmVjdG9yeSAKICAgICAgICAgICBjb250YWlucyBjb29raWUgZmlsZXMgbmFtZWQgYWZ0ZXIgdGhlIGNvb2tpZSBjb250ZXh0LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIEEgY29va2llIGZpbGUgY29udGFpbnMgb25lIGNvb2tpZSBwZXIgbGluZS4gRWFjaCBsaW5lCisgICAgICAgICAgQSBjb29raWUgZmlsZSBjb250YWlucyBvbmUgY29va2llIHBlciBsaW5lLiBFYWNoIGxpbmUgCiAgICAgICAgICAgaGFzIHRocmVlIHNwYWNlLXNlcGFyYXRlZCBmaWVsZHM6CiAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDxsaXN0aXRlbT4KQEAgLTMwNTMsNyArMjk0NCw3IEBACiAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFRoZSBjb29raWUgaXRzZWxmLCBhIGhleC1lbmNvZGVkIHJhbmRvbSBibG9jayBvZiBieXRlcy4gVGhlIGNvb2tpZQotICAgICAgICAgICAgICAgIG1heSBiZSBvZiBhbnkgbGVuZ3RoLCB0aG91Z2ggb2J2aW91c2x5IHNlY3VyaXR5IGluY3JlYXNlcworICAgICAgICAgICAgICAgIG1heSBiZSBvZiBhbnkgbGVuZ3RoLCB0aG91Z2ggb2J2aW91c2x5IHNlY3VyaXR5IGluY3JlYXNlcyAKICAgICAgICAgICAgICAgICBhcyB0aGUgbGVuZ3RoIGluY3JlYXNlcy4KICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9saXN0aXRlbT4KQEAgLTMwODIsMTYgKzI5NzMsMTYgQEAKICAgICAgICAgICAgICAgICBPbmNlIHRoZSBsb2NrZmlsZSBoYXMgYmVlbiBjcmVhdGVkLCB0aGUgc2VydmVyIGxvYWRzIHRoZSBjb29raWUKICAgICAgICAgICAgICAgICBmaWxlLiBJdCBzaG91bGQgdGhlbiBkZWxldGUgYW55IGNvb2tpZXMgdGhhdCBhcmUgb2xkICh0aGUKICAgICAgICAgICAgICAgICB0aW1lb3V0IGNhbiBiZSBmYWlybHkgc2hvcnQpLCBvciBtb3JlIHRoYW4gYSByZWFzb25hYmxlCi0gICAgICAgICAgICAgICAgdGltZSBpbiB0aGUgZnV0dXJlIChzbyB0aGF0IGNvb2tpZXMgbmV2ZXIgYWNjaWRlbnRhbGx5Ci0gICAgICAgICAgICAgICAgYmVjb21lIHBlcm1hbmVudCwgaWYgdGhlIGNsb2NrIHdhcyBzZXQgZmFyIGludG8gdGhlIGZ1dHVyZQotICAgICAgICAgICAgICAgIGF0IHNvbWUgcG9pbnQpLiBJZiBubyByZWNlbnQga2V5cyByZW1haW4sIHRoZQorICAgICAgICAgICAgICAgIHRpbWUgaW4gdGhlIGZ1dHVyZSAoc28gdGhhdCBjb29raWVzIG5ldmVyIGFjY2lkZW50YWxseSAKKyAgICAgICAgICAgICAgICBiZWNvbWUgcGVybWFuZW50LCBpZiB0aGUgY2xvY2sgd2FzIHNldCBmYXIgaW50byB0aGUgZnV0dXJlIAorICAgICAgICAgICAgICAgIGF0IHNvbWUgcG9pbnQpLiBJZiBubyByZWNlbnQga2V5cyByZW1haW4sIHRoZSAKICAgICAgICAgICAgICAgICBzZXJ2ZXIgbWF5IGdlbmVyYXRlIGEgbmV3IGtleS4KICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIHBydW5lZCBhbmQgcG9zc2libHkgYWRkZWQtdG8gY29va2llIGZpbGUKLSAgICAgICAgICAgICAgICBtdXN0IGJlIHJlc2F2ZWQgYXRvbWljYWxseSAodXNpbmcgYSB0ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICBUaGUgcHJ1bmVkIGFuZCBwb3NzaWJseSBhZGRlZC10byBjb29raWUgZmlsZSAKKyAgICAgICAgICAgICAgICBtdXN0IGJlIHJlc2F2ZWQgYXRvbWljYWxseSAodXNpbmcgYSB0ZW1wb3JhcnkgCiAgICAgICAgICAgICAgICAgZmlsZSB3aGljaCBpcyByZW5hbWUoKSdkKS4KICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9saXN0aXRlbT4KQEAgLTMxMDMsOCArMjk5NCw4IEBACiAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQ2xpZW50cyBuZWVkIG5vdCBsb2NrIHRoZSBmaWxlIGluIG9yZGVyIHRvIGxvYWQgaXQsCi0gICAgICAgICAgYmVjYXVzZSBzZXJ2ZXJzIGFyZSByZXF1aXJlZCB0byBzYXZlIHRoZSBmaWxlIGF0b21pY2FsbHkuCisgICAgICAgICAgQ2xpZW50cyBuZWVkIG5vdCBsb2NrIHRoZSBmaWxlIGluIG9yZGVyIHRvIGxvYWQgaXQsIAorICAgICAgICAgIGJlY2F1c2Ugc2VydmVycyBhcmUgcmVxdWlyZWQgdG8gc2F2ZSB0aGUgZmlsZSBhdG9taWNhbGx5LiAgICAgICAgICAKICAgICAgICAgPC9wYXJhPgogICAgICAgPC9zZWN0Mz4KICAgICA8L3NlY3QyPgpAQCAtMzExNyw3ICszMDA4LDcgQEAKICAgICAgIEVhY2ggdmFsdWUgaXMgZXNjYXBlZC4KICAgICA8L3BhcmE+CiAgICAgPHBhcmE+Ci0gICAgICBGb3IgZXhhbXBsZToKKyAgICAgIEZvciBleGFtcGxlOiAKICAgICAgIDxwcm9ncmFtbGlzdGluZz51bml4OnBhdGg9L3RtcC9kYnVzLXRlc3Q8L3Byb2dyYW1saXN0aW5nPgogICAgICAgV2hpY2ggaXMgdGhlIGFkZHJlc3MgdG8gYSB1bml4IHNvY2tldCB3aXRoIHRoZSBwYXRoIC90bXAvZGJ1cy10ZXN0LgogICAgIDwvcGFyYT4KQEAgLTMxMjcsNyArMzAxOCw3IEBACiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZSBzZXQgb2Ygb3B0aW9uYWxseS1lc2NhcGVkIGJ5dGVzIGlzOgotICAgICAgICAgICAgPGxpdGVyYWw+Wy0wLTlBLVphLXpfLy5cXTwvbGl0ZXJhbD4uIFRvIGVzY2FwZSwgZWFjaAorICAgICAgICAgICAgPGxpdGVyYWw+WzAtOUEtWmEtel8tLy5cXTwvbGl0ZXJhbD4uIFRvIGVzY2FwZSwgZWFjaAogICAgICAgICAgICAgPGVtcGhhc2lzPmJ5dGU8L2VtcGhhc2lzPiAobm90ZSwgbm90IGNoYXJhY3Rlcikgd2hpY2ggaXMgbm90IGluIHRoZQogICAgICAgICAgICAgc2V0IG9mIG9wdGlvbmFsbHktZXNjYXBlZCBieXRlcyBtdXN0IGJlIHJlcGxhY2VkIHdpdGggYW4gQVNDSUkKICAgICAgICAgICAgIHBlcmNlbnQgKDxsaXRlcmFsPiU8L2xpdGVyYWw+KSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBieXRlIGluIGhleC4KQEAgLTMxNDUsNyArMzAzNiw3IEBACiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICBUaGUgc2V0IG9mIG9wdGlvbmFsbHktZXNjYXBlZCBieXRlcyBpcyBpbnRlbmRlZCB0byBwcmVzZXJ2ZSBhZGRyZXNzCisgICAgICBUaGUgc2V0IG9mIG9wdGlvbmFsbHktZXNjYXBlZCBieXRlcyBpcyBpbnRlbmRlZCB0byBwcmVzZXJ2ZSBhZGRyZXNzIAogICAgICAgcmVhZGFiaWxpdHkgYW5kIGNvbnZlbmllbmNlLgogICAgIDwvcGFyYT4KIApAQCAtMzE2MCw3ICszMDUxLDcgQEAKICAgICAgIHRob3NlIHR3byBjb25uZWN0aW9ucyBhcmUgZXF1aXZhbGVudCBwb3N0LWNvbm5lY3Rpb24gYnV0IHNob3VsZCBoYXZlCiAgICAgICBkaXN0aW5jdCBVVUlEcyB0byBkaXN0aW5ndWlzaCB0aGUga2luZHMgb2YgY29ubmVjdGlvbi4KICAgICA8L3BhcmE+Ci0KKyAgICAKICAgICA8cGFyYT4KICAgICAgIFRoZSBpbnRlbnQgb2YgdGhlIGFkZHJlc3MgVVVJRCBmZWF0dXJlIGlzIHRvIGFsbG93IGEgY2xpZW50IHRvIGF2b2lkCiAgICAgICBvcGVuaW5nIG11bHRpcGxlIGlkZW50aWNhbCBjb25uZWN0aW9ucyB0byB0aGUgc2FtZSBzZXJ2ZXIsIGJ5IGFsbG93aW5nIHRoZQpAQCAtMzE3MiwxMiArMzA2MywxMiBAQAogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgTm90ZSB0aGF0IHRoZSBhZGRyZXNzIGtleSBpcyA8bGl0ZXJhbD5ndWlkPC9saXRlcmFsPiBldmVuIHRob3VnaCB0aGUKKyAgICAgIE5vdGUgdGhhdCB0aGUgYWRkcmVzcyBrZXkgaXMgPGxpdGVyYWw+Z3VpZDwvbGl0ZXJhbD4gZXZlbiB0aG91Z2ggdGhlIAogICAgICAgcmVzdCBvZiB0aGUgQVBJIGFuZCBkb2N1bWVudGF0aW9uIHNheXMgIlVVSUQsIiBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgW0ZJWE1FIGNsYXJpZnkgaWYgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGVhY2ggaXMgYSByZXF1aXJlbWVudAorICAgICAgW0ZJWE1FIGNsYXJpZnkgaWYgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGVhY2ggaXMgYSByZXF1aXJlbWVudCAKICAgICAgIG9yIGp1c3QgYSBzdWdnZXN0aW9uXQogICAgICAgV2hlbiBjb25uZWN0aW5nIHRvIGEgc2VydmVyLCBtdWx0aXBsZSBzZXJ2ZXIgYWRkcmVzc2VzIGNhbiBiZQogICAgICAgc2VwYXJhdGVkIGJ5IGEgc2VtaS1jb2xvbi4gVGhlIGxpYnJhcnkgd2lsbCB0aGVuIHRyeSB0byBjb25uZWN0CkBAIC0zMjE5LDI4ICszMTEwLDI4IEBACiAgICAgICA8bGl0ZXJhbD51bml4OnBhdGg9L3J1bi91c2VyLzEyMzQvYnVzPC9saXRlcmFsPi4KICAgICA8L3BhcmE+CiAgIDwvc2VjdDE+Ci0KKyAgCiAgIDxzZWN0MSBpZD0idHJhbnNwb3J0cyI+CiAgICAgPHRpdGxlPlRyYW5zcG9ydHM8L3RpdGxlPgogICAgIDxwYXJhPgogICAgICAgW0ZJWE1FIHdlIG5lZWQgdG8gc3BlY2lmeSBpbiBkZXRhaWwgZWFjaCB0cmFuc3BvcnQgYW5kIGl0cyBwb3NzaWJsZSBhcmd1bWVudHNdCi0KLSAgICAgIEN1cnJlbnQgdHJhbnNwb3J0cyBpbmNsdWRlOiB1bml4IGRvbWFpbiBzb2NrZXRzIChpbmNsdWRpbmcKKyAgICAKKyAgICAgIEN1cnJlbnQgdHJhbnNwb3J0cyBpbmNsdWRlOiB1bml4IGRvbWFpbiBzb2NrZXRzIChpbmNsdWRpbmcgCiAgICAgICBhYnN0cmFjdCBuYW1lc3BhY2Ugb24gbGludXgpLCBsYXVuY2hkLCBzeXN0ZW1kLCBUQ1AvSVAsIGFuIGV4ZWN1dGVkIHN1YnByb2Nlc3MgYW5kIGEgZGVidWcvdGVzdGluZyB0cmFuc3BvcnQKICAgICAgIHVzaW5nIGluLXByb2Nlc3MgcGlwZXMuIEZ1dHVyZSBwb3NzaWJsZSB0cmFuc3BvcnRzIGluY2x1ZGUgb25lIHRoYXQKICAgICAgIHR1bm5lbHMgb3ZlciBYMTEgcHJvdG9jb2wuCiAgICAgPC9wYXJhPgotCisgIAogICAgIDxzZWN0MiBpZD0idHJhbnNwb3J0cy11bml4LWRvbWFpbi1zb2NrZXRzIj4KICAgICAgIDx0aXRsZT5Vbml4IERvbWFpbiBTb2NrZXRzPC90aXRsZT4KICAgICAgIDxwYXJhPgotICAgICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIGNhbiBiZSBlaXRoZXIgcGF0aHMgaW4gdGhlIGZpbGUgc3lzdGVtIG9yIG9uIExpbnV4CisgICAgICAgIFVuaXggZG9tYWluIHNvY2tldHMgY2FuIGJlIGVpdGhlciBwYXRocyBpbiB0aGUgZmlsZSBzeXN0ZW0gb3Igb24gTGludXggCiAgICAgICAgIGtlcm5lbHMsIHRoZXkgY2FuIGJlIGFic3RyYWN0IHdoaWNoIGFyZSBzaW1pbGFyIHRvIHBhdGhzIGJ1dAogICAgICAgICBkbyBub3Qgc2hvdyB1cCBpbiB0aGUgZmlsZSBzeXN0ZW0uCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIGEgc29ja2V0IGlzIG9wZW5lZCBieSB0aGUgRC1CdXMgbGlicmFyeSBpdCB0cnVuY2F0ZXMgdGhlIHBhdGgKKyAgICAgICAgV2hlbiBhIHNvY2tldCBpcyBvcGVuZWQgYnkgdGhlIEQtQnVzIGxpYnJhcnkgaXQgdHJ1bmNhdGVzIHRoZSBwYXRoIAogICAgICAgICBuYW1lIHJpZ2h0IGJlZm9yZSB0aGUgZmlyc3QgdHJhaWxpbmcgTnVsIGJ5dGUuICBUaGlzIGlzIHRydWUgZm9yIGJvdGgKICAgICAgICAgbm9ybWFsIHBhdGhzIGFuZCBhYnN0cmFjdCBwYXRocy4gIE5vdGUgdGhhdCB0aGlzIGlzIGEgZGVwYXJ0dXJlIGZyb20KICAgICAgICAgcHJldmlvdXMgdmVyc2lvbnMgb2YgRC1CdXMgdGhhdCB3b3VsZCBjcmVhdGUgc29ja2V0cyB3aXRoIGEgZml4ZWQKQEAgLTMyNTMsOCArMzE0NCw3IEBACiAgICAgICA8cGFyYT4KICAgICAgICAgVW5peCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZ5IDxsaXRlcmFsPnBhdGg8L2xpdGVyYWw+IG9yCiAgICAgICAgIDxsaXRlcmFsPmFic3RyYWN0PC9saXRlcmFsPiBhcmUgYm90aCBsaXN0ZW5hYmxlIGFuZCBjb25uZWN0YWJsZS4KLSAgICAgICAgVW5peCBhZGRyZXNzZXMgdGhhdCBzcGVjaWZ5IDxsaXRlcmFsPnRtcGRpcjwvbGl0ZXJhbD4KLSAgICAgICAgb3IgPGxpdGVyYWw+ZGlyPC9saXRlcmFsPiBhcmUgb25seQorICAgICAgICBVbml4IGFkZHJlc3NlcyB0aGF0IHNwZWNpZnkgPGxpdGVyYWw+dG1wZGlyPC9saXRlcmFsPiBhcmUgb25seQogICAgICAgICBsaXN0ZW5hYmxlOiB0aGUgY29ycmVzcG9uZGluZyBjb25uZWN0YWJsZSBhZGRyZXNzIHdpbGwgc3BlY2lmeQogICAgICAgICBlaXRoZXIgPGxpdGVyYWw+cGF0aDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+YWJzdHJhY3Q8L2xpdGVyYWw+LgogICAgICAgICBTaW1pbGFybHksIFVuaXggYWRkcmVzc2VzIHRoYXQgc3BlY2lmeSA8bGl0ZXJhbD5ydW50aW1lPC9saXRlcmFsPgpAQCAtMzI2Myw4ICszMTUzLDggQEAKICAgICAgIDwvcGFyYT4KICAgICAgIDxzZWN0MyBpZD0idHJhbnNwb3J0cy11bml4LWRvbWFpbi1zb2NrZXRzLWFkZHJlc3NlcyI+CiAgICAgICAgIDx0aXRsZT5TZXJ2ZXIgQWRkcmVzcyBGb3JtYXQ8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBVbml4IGRvbWFpbiBzb2NrZXQgYWRkcmVzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSAidW5peDoiIHByZWZpeAorICAgICAgICA8cGFyYT4gCisgICAgICAgICAgVW5peCBkb21haW4gc29ja2V0IGFkZHJlc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgInVuaXg6IiBwcmVmaXggCiAgICAgICAgICAgYW5kIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnM6CiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPGluZm9ybWFsdGFibGU+CkBAIC0zMjgwLDQyICszMTcwLDE3IEBACiAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICA8ZW50cnk+cGF0aDwvZW50cnk+CiAgICAgICAgICAgICA8ZW50cnk+KHBhdGgpPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgUGF0aCBvZiB0aGUgdW5peCBkb21haW4gc29ja2V0LgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmRpcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+KHBhdGgpPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgRGlyZWN0b3J5IGluIHdoaWNoIGEgc29ja2V0IGZpbGUgd2l0aCBhIHJhbmRvbSBmaWxlIG5hbWUKLSAgICAgICAgICAgICAgc3RhcnRpbmcgd2l0aCAnZGJ1cy0nIHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgc2VydmVyLiBUaGlzIGtleQotICAgICAgICAgICAgICBjYW4gb25seSBiZSB1c2VkIGluIHNlcnZlciBhZGRyZXNzZXMsIG5vdCBpbiBjbGllbnQgYWRkcmVzc2VzOwotICAgICAgICAgICAgICB0aGUgcmVzdWx0aW5nIGNsaWVudCBhZGRyZXNzIHdpbGwgaGF2ZSB0aGUgInBhdGgiIGtleSBpbnN0ZWFkLgotICAgICAgICAgICAgICBiZSBzZXQuCi0gICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnBhdGggb2YgdGhlIHVuaXggZG9tYWluIHNvY2tldC4gSWYgc2V0LCB0aGUgInRtcGRpciIgYW5kICJhYnN0cmFjdCIga2V5IG11c3Qgbm90IGJlIHNldC48L2VudHJ5PgogICAgICAgICAgIDwvcm93PgogICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICA8ZW50cnk+dG1wZGlyPC9lbnRyeT4KICAgICAgICAgICAgIDxlbnRyeT4ocGF0aCk8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgc2FtZSBhcyAiZGlyIiwgZXhjZXB0IHRoYXQgb24gcGxhdGZvcm1zIHdpdGgKLSAgICAgICAgICAgICAgYWJzdHJhY3Qgc29ja2V0cywgdGhlIHNlcnZlciBtYXkgYXR0ZW1wdCB0byBjcmVhdGUgYW4KLSAgICAgICAgICAgICAgYWJzdHJhY3Qgc29ja2V0IHdob3NlIG5hbWUgc3RhcnRzIHdpdGggdGhpcyBkaXJlY3RvcnkgaW5zdGVhZAotICAgICAgICAgICAgICBvZiBhIHBhdGgtYmFzZWQgc29ja2V0LiBUaGlzIGtleSBjYW4gb25seSBiZSB1c2VkIGluIHNlcnZlcgotICAgICAgICAgICAgICBhZGRyZXNzZXMsIG5vdCBpbiBjbGllbnQgYWRkcmVzc2VzOyB0aGUgcmVzdWx0aW5nIGNsaWVudCBhZGRyZXNzCi0gICAgICAgICAgICAgIHdpbGwgaGF2ZSB0aGUgImFic3RyYWN0IiBvciAicGF0aCIga2V5IGluc3RlYWQuCi0gICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBzb2NrZXQgZmlsZSB3aXRoIGEgcmFuZG9tIGZpbGUgbmFtZSBzdGFydGluZyB3aXRoICdkYnVzLScgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIuIFRoaXMga2V5IGNhbiBvbmx5IGJlIHVzZWQgaW4gc2VydmVyIGFkZHJlc3Nlcywgbm90IGluIGNsaWVudCBhZGRyZXNzZXMuIElmIHNldCwgdGhlICJwYXRoIiBhbmQgImFic3RyYWN0IiBrZXkgbXVzdCBub3QgYmUgc2V0LjwvZW50cnk+CiAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgIDxlbnRyeT5hYnN0cmFjdDwvZW50cnk+CiAgICAgICAgICAgICA8ZW50cnk+KHN0cmluZyk8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBVbmlxdWUgc3RyaW5nIGluIHRoZSBhYnN0cmFjdCBuYW1lc3BhY2UsIG9mdGVuIHN5bnRhY3RpY2FsbHkKLSAgICAgICAgICAgICAgcmVzZW1ibGluZyBhIHBhdGggYnV0IHVuY29ubmVjdGVkIHRvIHRoZSBmaWxlc3lzdGVtIG5hbWVzcGFjZS4KLSAgICAgICAgICAgICAgVGhpcyBrZXkgaXMgb25seSBzdXBwb3J0ZWQgb24gcGxhdGZvcm1zIHdpdGggYWJzdHJhY3QgVW5peAotICAgICAgICAgICAgICBzb2NrZXRzLCBvZiB3aGljaCBMaW51eCBpcyB0aGUgb25seSBrbm93biBleGFtcGxlLgotICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT51bmlxdWUgc3RyaW5nIChwYXRoKSBpbiB0aGUgYWJzdHJhY3QgbmFtZXNwYWNlLiBJZiBzZXQsIHRoZSAicGF0aCIgb3IgInRtcGRpciIga2V5IG11c3Qgbm90IGJlIHNldC4gVGhpcyBrZXkgaXMgb25seSBzdXBwb3J0ZWQgb24gcGxhdGZvcm1zIHdpdGggImFic3RyYWN0IFVuaXggc29ja2V0cyIsIG9mIHdoaWNoIExpbnV4IGlzIHRoZSBvbmx5IGtub3duIGV4YW1wbGUuPC9lbnRyeT4KICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgPGVudHJ5PnJ1bnRpbWU8L2VudHJ5PgpAQCAtMzMyNyw4ICszMTkyLDggQEAKICAgICAgICA8L2luZm9ybWFsdGFibGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBFeGFjdGx5IG9uZSBvZiB0aGUga2V5cyA8bGl0ZXJhbD5wYXRoPC9saXRlcmFsPiwKLSAgICAgICAgIDxsaXRlcmFsPmFic3RyYWN0PC9saXRlcmFsPiwgPGxpdGVyYWw+cnVudGltZTwvbGl0ZXJhbD4sCi0gICAgICAgICA8bGl0ZXJhbD5kaXI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPnRtcGRpcjwvbGl0ZXJhbD4gbXVzdCBiZSBwcm92aWRlZC4KKyAgICAgICAgIDxsaXRlcmFsPmFic3RyYWN0PC9saXRlcmFsPiwgPGxpdGVyYWw+cnVudGltZTwvbGl0ZXJhbD4gb3IKKyAgICAgICAgIDxsaXRlcmFsPnRtcGRpcjwvbGl0ZXJhbD4gbXVzdCBiZSBwcm92aWRlZC4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L3NlY3QzPgogICAgIDwvc2VjdDI+CkBAIC0zNDE1LDEzICszMjgwLDEzIEBACiAgICAgICA8dGl0bGU+VENQIFNvY2tldHM8L3RpdGxlPgogICAgICAgPHBhcmE+CiAgICAgICAgIFRoZSB0Y3AgdHJhbnNwb3J0IHByb3ZpZGVzIFRDUC9JUCBiYXNlZCBjb25uZWN0aW9ucyBiZXR3ZWVuIGNsaWVudHMKLSAgICAgICAgbG9jYXRlZCBvbiB0aGUgc2FtZSBvciBkaWZmZXJlbnQgaG9zdHMuCisgICAgICAgIGxvY2F0ZWQgb24gdGhlIHNhbWUgb3IgZGlmZmVyZW50IGhvc3RzLiAKICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgICBVc2luZyB0Y3AgdHJhbnNwb3J0IHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc2VjdXJlIGF1dGhlbnRpZmljYXRpb24gbWVjaGFuaXNtdXMKLSAgICAgICAgb3ZlciBhIG5ldHdvcmsgaXMgdW5zZWN1cmUuCisgICAgICAgIFVzaW5nIHRjcCB0cmFuc3BvcnQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBzZWN1cmUgYXV0aGVudGlmaWNhdGlvbiBtZWNoYW5pc211cyAKKyAgICAgICAgb3ZlciBhIG5ldHdvcmsgaXMgdW5zZWN1cmUuIAogICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+CisgICAgICA8cGFyYT4gIAogICAgICAgICBPbiBXaW5kb3dzIGFuZCBtb3N0IFVuaXggcGxhdGZvcm1zLCB0aGUgVENQIHN0YWNrIGlzIHVuYWJsZSB0byB0cmFuc2ZlcgogICAgICAgICBjcmVkZW50aWFscyBvdmVyIGEgVENQIGNvbm5lY3Rpb24sIHNvIHRoZSBFWFRFUk5BTCBhdXRoZW50aWNhdGlvbgogICAgICAgICBtZWNoYW5pc20gZG9lcyBub3Qgd29yayBmb3IgdGhpcyB0cmFuc3BvcnQuCkBAIC0zNDM1LDggKzMzMDAsOCBAQAogICAgICAgPC9wYXJhPgogICAgICAgPHNlY3QzIGlkPSJ0cmFuc3BvcnRzLXRjcC1zb2NrZXRzLWFkZHJlc3NlcyI+CiAgICAgICAgIDx0aXRsZT5TZXJ2ZXIgQWRkcmVzcyBGb3JtYXQ8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgIFRDUC9JUCBzb2NrZXQgYWRkcmVzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSAidGNwOiIgcHJlZml4CisgICAgICAgIDxwYXJhPiAKKyAgICAgICAgIFRDUC9JUCBzb2NrZXQgYWRkcmVzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSAidGNwOiIgcHJlZml4IAogICAgICAgICAgYW5kIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnM6CiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPGluZm9ybWFsdGFibGU+CkBAIC0zNDY4LDkgKzMzMzMsOSBAQAogICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgIDxlbnRyeT5wb3J0PC9lbnRyeT4KICAgICAgICAgICAgPGVudHJ5PihudW1iZXIpPC9lbnRyeT4KLSAgICAgICAgICAgPGVudHJ5PlRoZSB0Y3AgcG9ydCB0aGUgc2VydmVyIHdpbGwgb3Blbi4gQSB6ZXJvIHZhbHVlIGxldCB0aGUgc2VydmVyCi0gICAgICAgICAgICBjaG9vc2UgYSBmcmVlIHBvcnQgcHJvdmlkZWQgZnJvbSB0aGUgdW5kZXJsYXlpbmcgb3BlcmF0aW5nIHN5c3RlbS4KLSAgICAgICAgICAgIGxpYmRidXMgaXMgYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCB1c2VkIHBvcnQgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAgICA8ZW50cnk+VGhlIHRjcCBwb3J0IHRoZSBzZXJ2ZXIgd2lsbCBvcGVuLiBBIHplcm8gdmFsdWUgbGV0IHRoZSBzZXJ2ZXIgCisgICAgICAgICAgICBjaG9vc2UgYSBmcmVlIHBvcnQgcHJvdmlkZWQgZnJvbSB0aGUgdW5kZXJsYXlpbmcgb3BlcmF0aW5nIHN5c3RlbS4gCisgICAgICAgICAgICBsaWJkYnVzIGlzIGFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgdXNlZCBwb3J0IGZyb20gdGhlIHNlcnZlci4gIAogICAgICAgICAgICA8L2VudHJ5PgogICAgICAgICAgIDwvcm93PgogICAgICAgICAgIDxyb3c+CkBAIC0zNTIyLDggKzMzODcsOCBAQAogICAgICAgPC9wYXJhPgogICAgICAgPHNlY3QzIGlkPSJ0cmFuc3BvcnRzLW5vbmNlLXRjcC1zb2NrZXRzLWFkZHJlc3NlcyI+CiAgICAgICAgIDx0aXRsZT5TZXJ2ZXIgQWRkcmVzcyBGb3JtYXQ8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgIE5vbmNlIFRDUC9JUCBzb2NrZXQgYWRkcmVzc2VzIHVzZXMgdGhlICJub25jZS10Y3A6IiBwcmVmaXgKKyAgICAgICAgPHBhcmE+IAorICAgICAgICAgTm9uY2UgVENQL0lQIHNvY2tldCBhZGRyZXNzZXMgdXNlcyB0aGUgIm5vbmNlLXRjcDoiIHByZWZpeCAKICAgICAgICAgIGFuZCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcga2V5L3ZhbHVlIHBhaXJzOgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgpAQCAtMzU1MCw5ICszNDE1LDkgQEAKICAgICAgICAgICA8cm93PgogICAgICAgICAgICA8ZW50cnk+cG9ydDwvZW50cnk+CiAgICAgICAgICAgIDxlbnRyeT4obnVtYmVyKTwvZW50cnk+Ci0gICAgICAgICAgIDxlbnRyeT5UaGUgdGNwIHBvcnQgdGhlIHNlcnZlciB3aWxsIG9wZW4uIEEgemVybyB2YWx1ZSBsZXQgdGhlIHNlcnZlcgotICAgICAgICAgICAgY2hvb3NlIGEgZnJlZSBwb3J0IHByb3ZpZGVkIGZyb20gdGhlIHVuZGVybGF5aW5nIG9wZXJhdGluZyBzeXN0ZW0uCi0gICAgICAgICAgICBsaWJkYnVzIGlzIGFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgdXNlZCBwb3J0IGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgICAgPGVudHJ5PlRoZSB0Y3AgcG9ydCB0aGUgc2VydmVyIHdpbGwgb3Blbi4gQSB6ZXJvIHZhbHVlIGxldCB0aGUgc2VydmVyIAorICAgICAgICAgICAgY2hvb3NlIGEgZnJlZSBwb3J0IHByb3ZpZGVkIGZyb20gdGhlIHVuZGVybGF5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIAorICAgICAgICAgICAgbGliZGJ1cyBpcyBhYmxlIHRvIHJldHJpZXZlIHRoZSByZWFsIHVzZWQgcG9ydCBmcm9tIHRoZSBzZXJ2ZXIuICAKICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICA8cm93PgpAQCAtMzc0MSw3ICszNjA2LDcgQEAKICAgICA8dGl0bGU+VVVJRHM8L3RpdGxlPgogICAgIDxwYXJhPgogICAgICAgQSB3b3JraW5nIEQtQnVzIGltcGxlbWVudGF0aW9uIHVzZXMgdW5pdmVyc2FsbHktdW5pcXVlIElEcyBpbiB0d28gcGxhY2VzLgotICAgICAgRmlyc3QsIGVhY2ggc2VydmVyIGFkZHJlc3MgaGFzIGEgVVVJRCBpZGVudGlmeWluZyB0aGUgYWRkcmVzcywKKyAgICAgIEZpcnN0LCBlYWNoIHNlcnZlciBhZGRyZXNzIGhhcyBhIFVVSUQgaWRlbnRpZnlpbmcgdGhlIGFkZHJlc3MsIAogICAgICAgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImFkZHJlc3NlcyIvPi4gU2Vjb25kLCBlYWNoIG9wZXJhdGluZwogICAgICAgc3lzdGVtIGtlcm5lbCBpbnN0YW5jZSBydW5uaW5nIGEgRC1CdXMgY2xpZW50IG9yIHNlcnZlciBoYXMgYSBVVUlECiAgICAgICBpZGVudGlmeWluZyB0aGF0IGtlcm5lbCwgcmV0cmlldmVkIGJ5IGludm9raW5nIHRoZSBtZXRob2QKQEAgLTM3NzMsMTggKzM2MzgsMTggQEAKICAgICAgIG9mIHRoZSBVVUlELgogICAgIDwvcGFyYT4KICAgPC9zZWN0MT4KLQorICAgIAogICA8c2VjdDEgaWQ9InN0YW5kYXJkLWludGVyZmFjZXMiPgogICAgIDx0aXRsZT5TdGFuZGFyZCBJbnRlcmZhY2VzPC90aXRsZT4KICAgICA8cGFyYT4KLSAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJtZXNzYWdlLXByb3RvY29sLXR5cGVzLW5vdGF0aW9uIi8+IGZvciBkZXRhaWxzIG9uCisgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ibWVzc2FnZS1wcm90b2NvbC10eXBlcy1ub3RhdGlvbiIvPiBmb3IgZGV0YWlscyBvbiAKICAgICAgICB0aGUgbm90YXRpb24gdXNlZCBpbiB0aGlzIHNlY3Rpb24uIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGludGVyZmFjZXMKICAgICAgIHRoYXQgbWF5IGJlIHVzZWZ1bCBhY3Jvc3MgdmFyaW91cyBELUJ1cyBhcHBsaWNhdGlvbnMuCiAgICAgPC9wYXJhPgogICAgIDxzZWN0MiBpZD0ic3RhbmRhcmQtaW50ZXJmYWNlcy1wZWVyIj4KICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyPC9saXRlcmFsPjwvdGl0bGU+CiAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXI8L2xpdGVyYWw+IGludGVyZmFjZQorICAgICAgICBUaGUgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUGVlcjwvbGl0ZXJhbD4gaW50ZXJmYWNlIAogICAgICAgICBoYXMgdHdvIG1ldGhvZHM6CiAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLlBpbmcgKCkKQEAgLTM4MDAsMTIgKzM2NjUsMTIgQEAKICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgogICAgICAgICBPbiByZWNlaXB0IG9mIHRoZSA8bGl0ZXJhbD5NRVRIT0RfQ0FMTDwvbGl0ZXJhbD4gbWVzc2FnZQotICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLkdldE1hY2hpbmVJZDwvbGl0ZXJhbD4sIGFuIGFwcGxpY2F0aW9uIHNob3VsZAotICAgICAgICByZXBseSB3aXRoIGEgPGxpdGVyYWw+TUVUSE9EX1JFVFVSTjwvbGl0ZXJhbD4gY29udGFpbmluZyBhIGhleC1lbmNvZGVkCisgICAgICAgIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuR2V0TWFjaGluZUlkPC9saXRlcmFsPiwgYW4gYXBwbGljYXRpb24gc2hvdWxkIAorICAgICAgICByZXBseSB3aXRoIGEgPGxpdGVyYWw+TUVUSE9EX1JFVFVSTjwvbGl0ZXJhbD4gY29udGFpbmluZyBhIGhleC1lbmNvZGVkIAogICAgICAgICBVVUlEIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIG1hY2hpbmUgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbi4KICAgICAgICAgVGhpcyBVVUlEIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBwcm9jZXNzZXMgb24gYSBzaW5nbGUgc3lzdGVtIGF0IGxlYXN0Ci0gICAgICAgIHVudGlsIHRoYXQgc3lzdGVtIG5leHQgcmVib290cy4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFjcm9zcyByZWJvb3RzCi0gICAgICAgIGlmIHBvc3NpYmxlLCBidXQgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhbmQgaXMgbm90CisgICAgICAgIHVudGlsIHRoYXQgc3lzdGVtIG5leHQgcmVib290cy4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFjcm9zcyByZWJvb3RzIAorICAgICAgICBpZiBwb3NzaWJsZSwgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYW5kIGlzIG5vdCAKICAgICAgICAgZ3VhcmFudGVlZC4KICAgICAgICAgSXQgZG9lcyBub3QgbWF0dGVyIHdoaWNoIG9iamVjdCBwYXRoIGEgR2V0TWFjaGluZUlkIGlzIHNlbnQgdG8uICBUaGUKICAgICAgICAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhpcyBtZXRob2QgYXV0b21hdGljYWxseS4KQEAgLTM4MTQsMTEgKzM2NzksMTEgQEAKICAgICAgICAgVGhlIFVVSUQgaXMgaW50ZW5kZWQgdG8gYmUgcGVyLWluc3RhbmNlLW9mLXRoZS1vcGVyYXRpbmctc3lzdGVtLCBzbyBtYXkgcmVwcmVzZW50CiAgICAgICAgIGEgdmlydHVhbCBtYWNoaW5lIHJ1bm5pbmcgb24gYSBoeXBlcnZpc29yLCByYXRoZXIgdGhhbiBhIHBoeXNpY2FsIG1hY2hpbmUuCiAgICAgICAgIEJhc2ljYWxseSBpZiB0d28gcHJvY2Vzc2VzIHNlZSB0aGUgc2FtZSBVVUlELCB0aGV5IHNob3VsZCBhbHNvIHNlZSB0aGUgc2FtZQotICAgICAgICBzaGFyZWQgbWVtb3J5LCBVTklYIGRvbWFpbiBzb2NrZXRzLCBwcm9jZXNzIElEcywgYW5kIG90aGVyIGZlYXR1cmVzIHRoYXQgcmVxdWlyZQorICAgICAgICBzaGFyZWQgbWVtb3J5LCBVTklYIGRvbWFpbiBzb2NrZXRzLCBwcm9jZXNzIElEcywgYW5kIG90aGVyIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSAKICAgICAgICAgYSBydW5uaW5nIE9TIGtlcm5lbCBpbiBjb21tb24gYmV0d2VlbiB0aGUgcHJvY2Vzc2VzLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBVVUlEIGlzIG9mdGVuIHVzZWQgd2hlcmUgb3RoZXIgcHJvZ3JhbXMgbWlnaHQgdXNlIGEgaG9zdG5hbWUuIEhvc3RuYW1lcworICAgICAgICBUaGUgVVVJRCBpcyBvZnRlbiB1c2VkIHdoZXJlIG90aGVyIHByb2dyYW1zIG1pZ2h0IHVzZSBhIGhvc3RuYW1lLiBIb3N0bmFtZXMgCiAgICAgICAgIGNhbiBjaGFuZ2Ugd2l0aG91dCByZWJvb3RpbmcsIGhvd2V2ZXIsIG9yIGp1c3QgYmUgImxvY2FsaG9zdCIgLSBzbyB0aGUgVVVJRAogICAgICAgICBpcyBtb3JlIHJvYnVzdC4KICAgICAgIDwvcGFyYT4KQEAgLTM4NDgsOCArMzcxMyw4IEBACiAgICAgPHNlY3QyIGlkPSJzdGFuZGFyZC1pbnRlcmZhY2VzLXByb3BlcnRpZXMiPgogICAgICAgPHRpdGxlPjxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXM8L2xpdGVyYWw+PC90aXRsZT4KICAgICAgIDxwYXJhPgotICAgICAgICBNYW55IG5hdGl2ZSBBUElzIHdpbGwgaGF2ZSBhIGNvbmNlcHQgb2Ygb2JqZWN0IDxmaXJzdHRlcm0+cHJvcGVydGllczwvZmlyc3R0ZXJtPgotICAgICAgICBvciA8Zmlyc3R0ZXJtPmF0dHJpYnV0ZXM8L2ZpcnN0dGVybT4uIFRoZXNlIGNhbiBiZSBleHBvc2VkIHZpYSB0aGUKKyAgICAgICAgTWFueSBuYXRpdmUgQVBJcyB3aWxsIGhhdmUgYSBjb25jZXB0IG9mIG9iamVjdCA8Zmlyc3R0ZXJtPnByb3BlcnRpZXM8L2ZpcnN0dGVybT4gCisgICAgICAgIG9yIDxmaXJzdHRlcm0+YXR0cmlidXRlczwvZmlyc3R0ZXJtPi4gVGhlc2UgY2FuIGJlIGV4cG9zZWQgdmlhIHRoZSAKICAgICAgICAgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllczwvbGl0ZXJhbD4gaW50ZXJmYWNlLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CkBAIC0zODg2LDI0ICszNzUxLDEzIEBACiAgICAgICAgIHNlZSA8eHJlZiBsaW5rZW5kPSJzdGFuZGFyZC1pbnRlcmZhY2VzLWludHJvc3BlY3RhYmxlIi8+LgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgIEFuIGVtcHR5IHN0cmluZyBtYXkgYmUgcHJvdmlkZWQgZm9yIHRoZSBpbnRlcmZhY2UgbmFtZTsgaW4gdGhpcyBjYXNlLAotICAgICAgICBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvbiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBuYW1lLAotICAgICAgICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIChwaWNraW5nIG9uZSBieSBhY2NvcmRpbmcgdG8gYW4gYXJiaXRyYXJ5Ci0gICAgICAgIGRldGVybWluaXN0aWMgcnVsZSwgb3IgcmV0dXJuaW5nIGFuIGVycm9yLCBhcmUgdGhlIHJlYXNvbmFibGUKKyAgICAgICAgQW4gZW1wdHkgc3RyaW5nIG1heSBiZSBwcm92aWRlZCBmb3IgdGhlIGludGVyZmFjZSBuYW1lOyBpbiB0aGlzIGNhc2UsIAorICAgICAgICBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvbiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBuYW1lLCAKKyAgICAgICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCAocGlja2luZyBvbmUgYnkgYWNjb3JkaW5nIHRvIGFuIGFyYml0cmFyeSAKKyAgICAgICAgZGV0ZXJtaW5pc3RpYyBydWxlLCBvciByZXR1cm5pbmcgYW4gZXJyb3IsIGFyZSB0aGUgcmVhc29uYWJsZSAKICAgICAgICAgcG9zc2liaWxpdGllcykuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KLSAgICAgICAgSWYgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcy5HZXRBbGw8L2xpdGVyYWw+IGlzIGNhbGxlZAotICAgICAgICB3aXRoIGEgdmFsaWQgaW50ZXJmYWNlIG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcHJvcGVydGllcywgYW4gZW1wdHkgYXJyYXkKLSAgICAgICAgc2hvdWxkIGJlIHJldHVybmVkLiBJZiBpdCBpcyBjYWxsZWQgd2l0aCBhIHZhbGlkIGludGVyZmFjZSBuYW1lIGZvcgotICAgICAgICB3aGljaCBzb21lIHByb3BlcnRpZXMgYXJlIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjYWxsZXIgKGZvciBleGFtcGxlLCBkdWUKLSAgICAgICAgdG8gcGVyLXByb3BlcnR5IGFjY2VzcyBjb250cm9sIGltcGxlbWVudGVkIGluIHRoZSBzZXJ2aWNlKSwgdGhvc2UKLSAgICAgICAgcHJvcGVydGllcyBzaG91bGQgYmUgc2lsZW50bHkgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQgYXJyYXkuCi0gICAgICAgIElmIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMuR2V0PC9saXRlcmFsPiBpcyBjYWxsZWQgZm9yCi0gICAgICAgIGFueSBzdWNoIHByb3BlcnRpZXMsIGFuIGFwcHJvcHJpYXRlIGFjY2VzcyBjb250cm9sIGVycm9yIHNob3VsZCBiZQotICAgICAgICByZXR1cm5lZC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgogICAgICAgICBJZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzIGNoYW5nZSBvbiBhbiBvYmplY3QsIHRoZQogICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLlByb3BlcnRpZXNDaGFuZ2VkPC9saXRlcmFsPgogICAgICAgICBzaWduYWwgbWF5IGJlIGVtaXR0ZWQgKHRoaXMgc2lnbmFsIHdhcyBhZGRlZCBpbiAwLjE0KToKQEAgLTQwMTksNyArMzg3Myw3IEBACiAgICAgICA8cGFyYT4KICAgICAgICAgPHByb2dyYW1saXN0aW5nPgogICAgICAgICAgIG9yZy5mcmVlZGVza3RvcC5EQnVzLkFkZE1hdGNoIChidXNfcHJveHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlPSdzaWduYWwnLG5hbWU9J29yZy5leGFtcGxlLkFwcDInLHBhdGhfbmFtZXNwYWNlPScvb3JnL2V4YW1wbGUvQXBwMiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGU9J3NpZ25hbCcsbmFtZT0nb3JnLmV4YW1wbGUuQXBwJyxwYXRoX25hbWVzcGFjZT0nL29yZy9leGFtcGxlL0FwcCciKTsKICAgICAgICAgICBvYmplY3RzID0gb3JnLmZyZWVkZXNrdG9wLkRCdXMuT2JqZWN0TWFuYWdlci5HZXRNYW5hZ2VkT2JqZWN0cyAoYXBwX3Byb3h5KTsKICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgIDwvcGFyYT4KQEAgLTQwNTAsMTAgKzM5MDQsMTAgQEAKICAgPHNlY3QxIGlkPSJpbnRyb3NwZWN0aW9uLWZvcm1hdCI+CiAgICAgPHRpdGxlPkludHJvc3BlY3Rpb24gRGF0YSBGb3JtYXQ8L3RpdGxlPgogICAgIDxwYXJhPgotICAgICAgQXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkLWludGVyZmFjZXMtaW50cm9zcGVjdGFibGUiLz4sCi0gICAgICBvYmplY3RzIG1heSBiZSBpbnRyb3NwZWN0ZWQgYXQgcnVudGltZSwgcmV0dXJuaW5nIGFuIFhNTCBzdHJpbmcKLSAgICAgIHRoYXQgZGVzY3JpYmVzIHRoZSBvYmplY3QuIFRoZSBzYW1lIFhNTCBmb3JtYXQgbWF5IGJlIHVzZWQgaW4KLSAgICAgIG90aGVyIGNvbnRleHRzIGFzIHdlbGwsIGZvciBleGFtcGxlIGFzIGFuICJJREwiIGZvciBnZW5lcmF0aW5nCisgICAgICBBcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0ic3RhbmRhcmQtaW50ZXJmYWNlcy1pbnRyb3NwZWN0YWJsZSIvPiwgCisgICAgICBvYmplY3RzIG1heSBiZSBpbnRyb3NwZWN0ZWQgYXQgcnVudGltZSwgcmV0dXJuaW5nIGFuIFhNTCBzdHJpbmcgCisgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgb2JqZWN0LiBUaGUgc2FtZSBYTUwgZm9ybWF0IG1heSBiZSB1c2VkIGluIAorICAgICAgb3RoZXIgY29udGV4dHMgYXMgd2VsbCwgZm9yIGV4YW1wbGUgYXMgYW4gIklETCIgZm9yIGdlbmVyYXRpbmcgCiAgICAgICBzdGF0aWMgbGFuZ3VhZ2UgYmluZGluZ3MuCiAgICAgPC9wYXJhPgogICAgIDxwYXJhPgpAQCAtNDA2MSw4ICszOTE1LDggQEAKICAgICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgICAgJmx0OyFET0NUWVBFIG5vZGUgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIE9iamVjdCBJbnRyb3NwZWN0aW9uIDEuMC8vRU4iCiAgICAgICAgICAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2ludHJvc3BlY3QuZHRkIiZndDsKLSAgICAgICAgJmx0O25vZGUgbmFtZT0iL2NvbS9leGFtcGxlL3NhbXBsZV9vYmplY3QwIiZndDsKLSAgICAgICAgICAmbHQ7aW50ZXJmYWNlIG5hbWU9ImNvbS5leGFtcGxlLlNhbXBsZUludGVyZmFjZTAiJmd0OworICAgICAgICAmbHQ7bm9kZSBuYW1lPSIvY29tL2V4YW1wbGUvc2FtcGxlX29iamVjdCImZ3Q7CisgICAgICAgICAgJmx0O2ludGVyZmFjZSBuYW1lPSJjb20uZXhhbXBsZS5TYW1wbGVJbnRlcmZhY2UiJmd0OwogICAgICAgICAgICAgJmx0O21ldGhvZCBuYW1lPSJGcm9iYXRlIiZndDsKICAgICAgICAgICAgICAgJmx0O2FyZyBuYW1lPSJmb28iIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLyZndDsKICAgICAgICAgICAgICAgJmx0O2FyZyBuYW1lPSJiYXIiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8mZ3Q7CkBAIC00MTAwLDM5ICszOTU0LDM5IEBACiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIGEgY2hpbGQgJmx0O25vZGUmZ3Q7IGhhcyBhbnkgc3ViLWVsZW1lbnRzLCB0aGVuIHRoZXkKKyAgICAgICAgICAgIElmIGEgY2hpbGQgJmx0O25vZGUmZ3Q7IGhhcyBhbnkgc3ViLWVsZW1lbnRzLCB0aGVuIHRoZXkgCiAgICAgICAgICAgICBtdXN0IHJlcHJlc2VudCBhIGNvbXBsZXRlIGludHJvc3BlY3Rpb24gb2YgdGhlIGNoaWxkLgotICAgICAgICAgICAgSWYgYSBjaGlsZCAmbHQ7bm9kZSZndDsgaXMgZW1wdHksIHRoZW4gaXQgbWF5IG9yIG1heQorICAgICAgICAgICAgSWYgYSBjaGlsZCAmbHQ7bm9kZSZndDsgaXMgZW1wdHksIHRoZW4gaXQgbWF5IG9yIG1heSAKICAgICAgICAgICAgIG5vdCBoYXZlIHN1Yi1lbGVtZW50czsgdGhlIGNoaWxkIG11c3QgYmUgaW50cm9zcGVjdGVkCi0gICAgICAgICAgICBpbiBvcmRlciB0byBmaW5kIG91dC4gVGhlIGludGVudCBpcyB0aGF0IGlmIGFuIG9iamVjdAorICAgICAgICAgICAgaW4gb3JkZXIgdG8gZmluZCBvdXQuIFRoZSBpbnRlbnQgaXMgdGhhdCBpZiBhbiBvYmplY3QgCiAgICAgICAgICAgICBrbm93cyB0aGF0IGl0cyBjaGlsZHJlbiBhcmUgImZhc3QiIHRvIGludHJvc3BlY3QKLSAgICAgICAgICAgIGl0IGNhbiBnbyBhaGVhZCBhbmQgcmV0dXJuIHRoZWlyIGluZm9ybWF0aW9uLCBidXQKKyAgICAgICAgICAgIGl0IGNhbiBnbyBhaGVhZCBhbmQgcmV0dXJuIHRoZWlyIGluZm9ybWF0aW9uLCBidXQgCiAgICAgICAgICAgICBvdGhlcndpc2UgaXQgY2FuIG9taXQgaXQuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZGlyZWN0aW9uIGVsZW1lbnQgb24gJmx0O2FyZyZndDsgbWF5IGJlIG9taXR0ZWQsCi0gICAgICAgICAgICBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvICJpbiIgZm9yIG1ldGhvZCBjYWxscwotICAgICAgICAgICAgYW5kICJvdXQiIGZvciBzaWduYWxzLiBTaWduYWxzIG9ubHkgYWxsb3cgIm91dCIKKyAgICAgICAgICAgIFRoZSBkaXJlY3Rpb24gZWxlbWVudCBvbiAmbHQ7YXJnJmd0OyBtYXkgYmUgb21pdHRlZCwgCisgICAgICAgICAgICBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvICJpbiIgZm9yIG1ldGhvZCBjYWxscyAKKyAgICAgICAgICAgIGFuZCAib3V0IiBmb3Igc2lnbmFscy4gU2lnbmFscyBvbmx5IGFsbG93ICJvdXQiIAogICAgICAgICAgICAgc28gd2hpbGUgZGlyZWN0aW9uIG1heSBiZSBzcGVjaWZpZWQsIGl0J3MgcG9pbnRsZXNzLgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIHBvc3NpYmxlIGRpcmVjdGlvbnMgYXJlICJpbiIgYW5kICJvdXQiLAorICAgICAgICAgICAgVGhlIHBvc3NpYmxlIGRpcmVjdGlvbnMgYXJlICJpbiIgYW5kICJvdXQiLCAKICAgICAgICAgICAgIHVubGlrZSBDT1JCQSB0aGVyZSBpcyBubyAiaW5vdXQiCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcG9zc2libGUgcHJvcGVydHkgYWNjZXNzIGZsYWdzIGFyZQorICAgICAgICAgICAgVGhlIHBvc3NpYmxlIHByb3BlcnR5IGFjY2VzcyBmbGFncyBhcmUgCiAgICAgICAgICAgICAicmVhZHdyaXRlIiwgInJlYWQiLCBhbmQgIndyaXRlIgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTXVsdGlwbGUgaW50ZXJmYWNlcyBjYW4gb2YgY291cnNlIGJlIGxpc3RlZCBmb3IKKyAgICAgICAgICAgIE11bHRpcGxlIGludGVyZmFjZXMgY2FuIG9mIGNvdXJzZSBiZSBsaXN0ZWQgZm9yIAogICAgICAgICAgICAgb25lICZsdDtub2RlJmd0Oy4KICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CkBAIC00MTQ0LDcgKzM5OTgsNyBAQAogICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgPC9wYXJhPgogICAgIDxwYXJhPgotICAgICAgICBNZXRob2QsIGludGVyZmFjZSwgcHJvcGVydHksIHNpZ25hbCwgYW5kIGFyZ3VtZW50IGVsZW1lbnRzIG1heSBoYXZlCisgICAgICAgIE1ldGhvZCwgaW50ZXJmYWNlLCBwcm9wZXJ0eSwgYW5kIHNpZ25hbCBlbGVtZW50cyBtYXkgaGF2ZQogICAgICAgICAiYW5ub3RhdGlvbnMiLCB3aGljaCBhcmUgZ2VuZXJpYyBrZXkvdmFsdWUgcGFpcnMgb2YgbWV0YWRhdGEuCiAgICAgICAgIFRoZXkgYXJlIHNpbWlsYXIgY29uY2VwdHVhbGx5IHRvIEphdmEncyBhbm5vdGF0aW9ucyBhbmQgQyMgYXR0cmlidXRlcy4KICAgICAgICAgV2VsbC1rbm93biBhbm5vdGF0aW9uczoKQEAgLTQyMjksOCArNDA4Myw4IEBACiAgICAgPHNlY3QyIGlkPSJtZXNzYWdlLWJ1cy1vdmVydmlldyI+CiAgICAgICA8dGl0bGU+TWVzc2FnZSBCdXMgT3ZlcnZpZXc8L3RpdGxlPgogICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBhY2NlcHRzIGNvbm5lY3Rpb25zIGZyb20gb25lIG9yIG1vcmUgYXBwbGljYXRpb25zLgotICAgICAgICBPbmNlIGNvbm5lY3RlZCwgYXBwbGljYXRpb25zIGNhbiBleGNoYW5nZSBtZXNzYWdlcyB3aXRoIG90aGVyCisgICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBhY2NlcHRzIGNvbm5lY3Rpb25zIGZyb20gb25lIG9yIG1vcmUgYXBwbGljYXRpb25zLiAKKyAgICAgICAgT25jZSBjb25uZWN0ZWQsIGFwcGxpY2F0aW9ucyBjYW4gZXhjaGFuZ2UgbWVzc2FnZXMgd2l0aCBvdGhlciAKICAgICAgICAgYXBwbGljYXRpb25zIHRoYXQgYXJlIGFsc28gY29ubmVjdGVkIHRvIHRoZSBidXMuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KQEAgLTQyMzksNyArNDA5Myw3IEBACiAgICAgICAgIHVuaXF1ZS1mb3ItdGhlLWxpZmV0aW1lLW9mLXRoZS1idXMgbmFtZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkLgogICAgICAgICBBcHBsaWNhdGlvbnMgbWF5IHJlcXVlc3QgYWRkaXRpb25hbCBuYW1lcyBmb3IgYSBjb25uZWN0aW9uLiBBZGRpdGlvbmFsCiAgICAgICAgIG5hbWVzIGFyZSB1c3VhbGx5ICJ3ZWxsLWtub3duIG5hbWVzIiBzdWNoIGFzCi0gICAgICAgICJjb20uZXhhbXBsZS5UZXh0RWRpdG9yMSIuIFdoZW4gYSBuYW1lIGlzIGJvdW5kIHRvIGEgY29ubmVjdGlvbiwKKyAgICAgICAgImNvbS5leGFtcGxlLlRleHRFZGl0b3IiLiBXaGVuIGEgbmFtZSBpcyBib3VuZCB0byBhIGNvbm5lY3Rpb24sCiAgICAgICAgIHRoYXQgY29ubmVjdGlvbiBpcyBzYWlkIHRvIDxmaXJzdHRlcm0+b3duPC9maXJzdHRlcm0+IHRoZSBuYW1lLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CkBAIC00MjU0LDE1ICs0MTA4LDE1IEBACiAgICAgICA8cGFyYT4KICAgICAgICAgRWFjaCBuYW1lIG1heSBoYXZlIDxmaXJzdHRlcm0+cXVldWVkIG93bmVyczwvZmlyc3R0ZXJtPi4gIFdoZW4gYW4KICAgICAgICAgYXBwbGljYXRpb24gcmVxdWVzdHMgYSBuYW1lIGZvciBhIGNvbm5lY3Rpb24gYW5kIHRoZSBuYW1lIGlzIGFscmVhZHkgaW4KLSAgICAgICAgdXNlLCB0aGUgYnVzIHdpbGwgb3B0aW9uYWxseSBhZGQgdGhlIGNvbm5lY3Rpb24gdG8gYSBxdWV1ZSB3YWl0aW5nIGZvcgorICAgICAgICB1c2UsIHRoZSBidXMgd2lsbCBvcHRpb25hbGx5IGFkZCB0aGUgY29ubmVjdGlvbiB0byBhIHF1ZXVlIHdhaXRpbmcgZm9yIAogICAgICAgICB0aGUgbmFtZS4gSWYgdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIG5hbWUgZGlzY29ubmVjdHMgb3IgcmVsZWFzZXMKICAgICAgICAgdGhlIG5hbWUsIHRoZSBuZXh0IGNvbm5lY3Rpb24gaW4gdGhlIHF1ZXVlIHdpbGwgYmVjb21lIHRoZSBuZXcgb3duZXIuCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgogICAgICAgICBUaGlzIGZlYXR1cmUgY2F1c2VzIHRoZSByaWdodCB0aGluZyB0byBoYXBwZW4gaWYgeW91IHN0YXJ0IHR3byB0ZXh0Ci0gICAgICAgIGVkaXRvcnMgZm9yIGV4YW1wbGU7IHRoZSBmaXJzdCBvbmUgbWF5IHJlcXVlc3QgImNvbS5leGFtcGxlLlRleHRFZGl0b3IxIiwKLSAgICAgICAgYW5kIHRoZSBzZWNvbmQgd2lsbCBiZSBxdWV1ZWQgYXMgYSBwb3NzaWJsZSBvd25lciBvZiB0aGF0IG5hbWUuIFdoZW4KKyAgICAgICAgZWRpdG9ycyBmb3IgZXhhbXBsZTsgdGhlIGZpcnN0IG9uZSBtYXkgcmVxdWVzdCAiY29tLmV4YW1wbGUuVGV4dEVkaXRvciIsCisgICAgICAgIGFuZCB0aGUgc2Vjb25kIHdpbGwgYmUgcXVldWVkIGFzIGEgcG9zc2libGUgb3duZXIgb2YgdGhhdCBuYW1lLiBXaGVuIAogICAgICAgICB0aGUgZmlyc3QgZXhpdHMsIHRoZSBzZWNvbmQgd2lsbCB0YWtlIG92ZXIuCiAgICAgICA8L3BhcmE+CiAKQEAgLTQyODUsOSArNDEzOSw5IEBACiAgICAgICAgIGNvbm5lY3Rpb25zIHRvIHRoZSBzYW1lIGJ1cy4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgICBPd25lcnNoaXAgb2YgYSB1bmlxdWUgbmFtZSBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgaW50ZXJhY3Rpb24gd2l0aAotICAgICAgICB0aGUgbWVzc2FnZSBidXMuIEl0IGxvZ2ljYWxseSBmb2xsb3dzIHRoYXQgdGhlIHVuaXF1ZSBuYW1lIGlzIGFsd2F5cwotICAgICAgICB0aGUgZmlyc3QgbmFtZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNvbWVzIHRvIG93biwgYW5kIHRoZSBsYXN0CisgICAgICAgIE93bmVyc2hpcCBvZiBhIHVuaXF1ZSBuYW1lIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBpbnRlcmFjdGlvbiB3aXRoIAorICAgICAgICB0aGUgbWVzc2FnZSBidXMuIEl0IGxvZ2ljYWxseSBmb2xsb3dzIHRoYXQgdGhlIHVuaXF1ZSBuYW1lIGlzIGFsd2F5cyAKKyAgICAgICAgdGhlIGZpcnN0IG5hbWUgdGhhdCBhbiBhcHBsaWNhdGlvbiBjb21lcyB0byBvd24sIGFuZCB0aGUgbGFzdCAKICAgICAgICAgb25lIHRoYXQgaXQgbG9zZXMgb3duZXJzaGlwIG9mLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CkBAIC00MzA5LDYgKzQxNjMsMzk3IEBACiAgICAgICAgIG5hbWUuIFRoZXNlIG5hbWVzIGNhbiBiZSByZWxlYXNlZCBhZ2FpbiB1c2luZyB0aGUKICAgICAgICAgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVsZWFzZU5hbWU8L2xpdGVyYWw+IG1lc3NhZ2UuCiAgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0MyBpZD0iYnVzLW1lc3NhZ2VzLXJlcXVlc3QtbmFtZSI+CisgICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5SZXF1ZXN0TmFtZTwvbGl0ZXJhbD48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcyBhIG1ldGhvZDoKKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBVSU5UMzIgUmVxdWVzdE5hbWUgKGluIFNUUklORyBuYW1lLCBpbiBVSU5UMzIgZmxhZ3MpCisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICBNZXNzYWdlIGFyZ3VtZW50czoKKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkFyZ3VtZW50PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjA8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlNUUklORzwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+TmFtZSB0byByZXF1ZXN0PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjE8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlVJTlQzMjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+RmxhZ3M8L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICAgIFJlcGx5IGFyZ3VtZW50czoKKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkFyZ3VtZW50PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjA8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlVJTlQzMjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+UmV0dXJuIHZhbHVlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIG1ldGhvZCBjYWxsIHNob3VsZCBiZSBzZW50IHRvCisgICAgICAgICAgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2xpdGVyYWw+IGFuZCBhc2tzIHRoZSBtZXNzYWdlIGJ1cyB0bworICAgICAgICAgIGFzc2lnbiB0aGUgZ2l2ZW4gbmFtZSB0byB0aGUgbWV0aG9kIGNhbGxlci4gRWFjaCBuYW1lIG1haW50YWlucyBhCisgICAgICAgICAgcXVldWUgb2YgcG9zc2libGUgb3duZXJzLCB3aGVyZSB0aGUgaGVhZCBvZiB0aGUgcXVldWUgaXMgdGhlIHByaW1hcnkKKyAgICAgICAgICBvciBjdXJyZW50IG93bmVyIG9mIHRoZSBuYW1lLiBFYWNoIHBvdGVudGlhbCBvd25lciBpbiB0aGUgcXVldWUKKyAgICAgICAgICBtYWludGFpbnMgdGhlIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5UIGFuZAorICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSBzZXR0aW5ncyBmcm9tIGl0cyBsYXRlc3QgUmVxdWVzdE5hbWUKKyAgICAgICAgICBjYWxsLiAgV2hlbiBSZXF1ZXN0TmFtZSBpcyBpbnZva2VkIHRoZSBmb2xsb3dpbmcgb2NjdXJzOgorICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSBtZXRob2QgY2FsbGVyIGlzIGN1cnJlbnRseSB0aGUgcHJpbWFyeSBvd25lciBvZiB0aGUgbmFtZSwKKyAgICAgICAgICAgICAgICB0aGUgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgYW5kIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRQorICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwsIAorICAgICAgICAgICAgICAgIGFuZCBub3RoaW5nIGZ1cnRoZXIgaGFwcGVucy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBwcmltYXJ5IG93bmVyIChoZWFkIG9mIHRoZSBxdWV1ZSkgaGFzCisgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgc2V0LCBhbmQgdGhlIFJlcXVlc3ROYW1lCisgICAgICAgICAgICAgICAgaW52b2NhdGlvbiBoYXMgdGhlIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgZmxhZywgdGhlbgorICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgb2YgUmVxdWVzdE5hbWUgcmVwbGFjZXMgdGhlIGN1cnJlbnQgcHJpbWFyeSBvd25lciBhdAorICAgICAgICAgICAgICAgIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBhbmQgdGhlIGN1cnJlbnQgcHJpbWFyeSBvd25lciBtb3ZlcyB0byB0aGUKKyAgICAgICAgICAgICAgICBzZWNvbmQgcG9zaXRpb24gaW4gdGhlIHF1ZXVlLiBJZiB0aGUgY2FsbGVyIG9mIFJlcXVlc3ROYW1lIHdhcyAKKyAgICAgICAgICAgICAgICBpbiB0aGUgcXVldWUgcHJldmlvdXNseSBpdHMgZmxhZ3MgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWVzIGZyb20gCisgICAgICAgICAgICAgICAgdGhlIG5ldyBSZXF1ZXN0TmFtZSBpbiBhZGRpdGlvbiB0byBtb3ZpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHJlcGxhY2VtZW50IGlzIG5vdCBwb3NzaWJsZSwgYW5kIHRoZSBtZXRob2QgY2FsbGVyIGlzCisgICAgICAgICAgICAgICAgY3VycmVudGx5IGluIHRoZSBxdWV1ZSBidXQgbm90IHRoZSBwcmltYXJ5IG93bmVyLCBpdHMgZmxhZ3MgYXJlCisgICAgICAgICAgICAgICAgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgcmVwbGFjZW1lbnQgaXMgbm90IHBvc3NpYmxlLCBhbmQgdGhlIG1ldGhvZCBjYWxsZXIgaXMKKyAgICAgICAgICAgICAgICBjdXJyZW50bHkgbm90IGluIHRoZSBxdWV1ZSwgdGhlIG1ldGhvZCBjYWxsZXIgaXMgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgcXVldWUuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgYW55IGNvbm5lY3Rpb24gaW4gdGhlIHF1ZXVlIGhhcyBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUKKyAgICAgICAgICAgICAgICBzZXQgYW5kIGlzIG5vdCB0aGUgcHJpbWFyeSBvd25lciwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIHF1ZXVlLiBUaGlzIGNhbiBhcHBseSB0byB0aGUgcHJldmlvdXMgcHJpbWFyeSBvd25lciAoaWYgaXQKKyAgICAgICAgICAgICAgICB3YXMgcmVwbGFjZWQpIG9yIHRoZSBtZXRob2QgY2FsbGVyIChpZiBpdCB1cGRhdGVkIHRoZQorICAgICAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSBmbGFnIHdoaWxlIHN0aWxsIHN0dWNrIGluIHRoZQorICAgICAgICAgICAgICAgIHF1ZXVlLCBvciBpZiBpdCB3YXMganVzdCBhZGRlZCB0byB0aGUgcXVldWUgd2l0aCB0aGF0IGZsYWcgc2V0KS4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3RlIHRoYXQgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyByZXN1bHRzIGluICJqdW1waW5nIHRoZQorICAgICAgICAgIHF1ZXVlLCIgZXZlbiBpZiBhbm90aGVyIGFwcGxpY2F0aW9uIGFscmVhZHkgaW4gdGhlIHF1ZXVlIGhhZCBzcGVjaWZpZWQKKyAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HLiAgVGhpcyBjb21lcyB1cCBpZiBhIHByaW1hcnkgb3duZXIKKyAgICAgICAgICB0aGF0IGRvZXMgbm90IGFsbG93IHJlcGxhY2VtZW50IGdvZXMgYXdheSwgYW5kIHRoZSBuZXh0IHByaW1hcnkgb3duZXIKKyAgICAgICAgICBkb2VzIGFsbG93IHJlcGxhY2VtZW50LiBJbiB0aGlzIGNhc2UsIHF1ZXVlZCBpdGVtcyB0aGF0IHNwZWNpZmllZAorICAgICAgICAgIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgPGVtcGhhc2lzPmRvIG5vdDwvZW1waGFzaXM+CisgICAgICAgICAgYXV0b21hdGljYWxseSByZXBsYWNlIHRoZSBuZXcgcHJpbWFyeSBvd25lci4gSW4gb3RoZXIgd29yZHMsCisgICAgICAgICAgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBpcyBub3Qgc2F2ZWQsIGl0IGlzIG9ubHkgdXNlZCBhdCB0aGUKKyAgICAgICAgICB0aW1lIFJlcXVlc3ROYW1lIGlzIGNhbGxlZC4gVGhpcyBpcyBkZWxpYmVyYXRlIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AKKyAgICAgICAgICBhbnl0aW1lIHR3byBhcHBsaWNhdGlvbnMgYXJlIGJvdGggREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgCisgICAgICAgICAgYW5kIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGZsYWdzIGFyZ3VtZW50IGNvbnRhaW5zIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBsb2dpY2FsbHkgT1JlZAorICAgICAgICAgIHRvZ2V0aGVyOgorCisgICAgICAgICAgPGluZm9ybWFsdGFibGU+CisgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5Db252ZW50aW9uYWwgTmFtZTwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+VmFsdWU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjB4MTwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+CisKKyAgICAgICAgICAgICAgICAgICAgSWYgYW4gYXBwbGljYXRpb24gQSBzcGVjaWZpZXMgdGhpcyBmbGFnIGFuZCBzdWNjZWVkcyBpbgorICAgICAgICAgICAgICAgICAgICBiZWNvbWluZyB0aGUgb3duZXIgb2YgdGhlIG5hbWUsIGFuZCBhbm90aGVyIGFwcGxpY2F0aW9uIEIKKyAgICAgICAgICAgICAgICAgICAgbGF0ZXIgY2FsbHMgUmVxdWVzdE5hbWUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBmbGFnLCB0aGVuIGFwcGxpY2F0aW9uIEEKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBsb3NlIG93bmVyc2hpcCBhbmQgcmVjZWl2ZSBhCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLk5hbWVMb3N0PC9saXRlcmFsPiBzaWduYWwsIGFuZAorICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBCIHdpbGwgYmVjb21lIHRoZSBuZXcgb3duZXIuIElmIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5UCisgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQgYnkgYXBwbGljYXRpb24gQSwgb3IgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORworICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkIGJ5IGFwcGxpY2F0aW9uIEIsIHRoZW4gYXBwbGljYXRpb24gQiB3aWxsIG5vdCByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIEEgYXMgdGhlIG93bmVyLgorCisgICAgICAgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORzwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MHgyPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKworICAgICAgICAgICAgICAgICAgICBUcnkgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBvd25lciBpZiB0aGVyZSBpcyBvbmUuIElmIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBub3Qgc2V0IHRoZSBhcHBsaWNhdGlvbiB3aWxsIG9ubHkgYmVjb21lIHRoZSBvd25lciBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBpZiB0aGVyZSBpcyBubyBjdXJyZW50IG93bmVyLiBJZiB0aGlzIGZsYWcgaXMgc2V0LAorICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IG93bmVyIGlmCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IG93bmVyIHNwZWNpZmllZCBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVC4KKworICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRTwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MHg0PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKworICAgICAgICAgICAgICAgICAgICBXaXRob3V0IHRoaXMgZmxhZywgaWYgYW4gYXBwbGljYXRpb24gcmVxdWVzdHMgYSBuYW1lIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBvd25lZCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgcGxhY2VkIGluIGEgcXVldWUgdG8KKyAgICAgICAgICAgICAgICAgICAgb3duIHRoZSBuYW1lIHdoZW4gdGhlIGN1cnJlbnQgb3duZXIgZ2l2ZXMgaXQgdXAuIElmIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBnaXZlbiwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcXVldWUsIHRoZSByZXF1ZXN0IGZvciB0aGUgbmFtZSB3aWxsIHNpbXBseSBmYWlsLiAgVGhpcyBmbGFnCisgICAgICAgICAgICAgICAgICAgIGFsc28gYWZmZWN0cyBiZWhhdmlvciB3aGVuIGFuIGFwcGxpY2F0aW9uIGlzIHJlcGxhY2VkIGFzCisgICAgICAgICAgICAgICAgICAgIG5hbWUgb3duZXI7IGJ5IGRlZmF1bHQgdGhlIGFwcGxpY2F0aW9uIG1vdmVzIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgd2FpdGluZyBxdWV1ZSwgdW5sZXNzIHRoaXMgZmxhZyB3YXMgcHJvdmlkZWQgd2hlbiB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYmVjYW1lIHRoZSBuYW1lIG93bmVyLgorCisgICAgICAgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorCisgICAgICAgICAgVGhlIHJldHVybiBjb2RlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkNvbnZlbnRpb25hbCBOYW1lPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5WYWx1ZTwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9QUklNQVJZX09XTkVSPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4xPC9lbnRyeT4gPGVudHJ5PlRoZSBjYWxsZXIgaXMgbm93IHRoZSBwcmltYXJ5IG93bmVyIG9mCisgICAgICAgICAgICAgICAgICB0aGUgbmFtZSwgcmVwbGFjaW5nIGFueSBwcmV2aW91cyBvd25lci4gRWl0aGVyIHRoZSBuYW1lIGhhZCBubworICAgICAgICAgICAgICAgICAgb3duZXIgYmVmb3JlLCBvciB0aGUgY2FsbGVyIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBhbmQgdGhlIGN1cnJlbnQgb3duZXIgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVC48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19SRVFVRVNUX05BTUVfUkVQTFlfSU5fUVVFVUU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjI8L2VudHJ5PgorCisgICAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIG5hbWUgYWxyZWFkeSBoYWQgYW4gb3duZXIsCisgICAgICAgICAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSB3YXMgbm90IHNwZWNpZmllZCwgYW5kIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBvd25lciBkaWQgbm90IHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgb3IgdGhlIHJlcXVlc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGlkIG5vdCBzcGVjaWZ5IERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcuCisgICAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9FWElTVFM8L2VudHJ5PiA8ZW50cnk+MzwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIG5hbWUgYWxyZWFkeSBoYXMgYW4gb3duZXIsCisgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUgd2FzIHNwZWNpZmllZCwgYW5kIGVpdGhlcgorICAgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgd2FzIG5vdCBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICBjdXJyZW50IG93bmVyLCBvciBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HIHdhcyBub3QKKyAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgcmVxdWVzdGluZyBhcHBsaWNhdGlvbi48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19SRVFVRVNUX05BTUVfUkVQTFlfQUxSRUFEWV9PV05FUjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+NDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIGFwcGxpY2F0aW9uIHRyeWluZyB0byByZXF1ZXN0IG93bmVyc2hpcCBvZiBhIG5hbWUgaXMgYWxyZWFkeSB0aGUgb3duZXIgb2YgaXQuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvc2VjdDM+CisKKyAgICAgICA8c2VjdDMgaWQ9ImJ1cy1tZXNzYWdlcy1yZWxlYXNlLW5hbWUiPgorICAgICAgICA8dGl0bGU+PGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVsZWFzZU5hbWU8L2xpdGVyYWw+PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXMgYSBtZXRob2Q6CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgVUlOVDMyIFJlbGVhc2VOYW1lIChpbiBTVFJJTkcgbmFtZSkKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgorICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgorICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KKyAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QXJndW1lbnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+U1RSSU5HPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5OYW1lIHRvIHJlbGVhc2U8L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICAgIFJlcGx5IGFyZ3VtZW50czoKKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkFyZ3VtZW50PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PjA8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlVJTlQzMjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+UmV0dXJuIHZhbHVlPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIG1ldGhvZCBjYWxsIHNob3VsZCBiZSBzZW50IHRvCisgICAgICAgICAgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXM8L2xpdGVyYWw+IGFuZCBhc2tzIHRoZSBtZXNzYWdlIGJ1cyB0bworICAgICAgICAgIHJlbGVhc2UgdGhlIG1ldGhvZCBjYWxsZXIncyBjbGFpbSB0byB0aGUgZ2l2ZW4gbmFtZS4gSWYgdGhlIGNhbGxlciBpcworICAgICAgICAgIHRoZSBwcmltYXJ5IG93bmVyLCBhIG5ldyBwcmltYXJ5IG93bmVyIHdpbGwgYmUgc2VsZWN0ZWQgZnJvbSB0aGUKKyAgICAgICAgICBxdWV1ZSBpZiBhbnkgb3RoZXIgb3duZXJzIGFyZSB3YWl0aW5nLiBJZiB0aGUgY2FsbGVyIGlzIHdhaXRpbmcgaW4KKyAgICAgICAgICB0aGUgcXVldWUgZm9yIHRoZSBuYW1lLCB0aGUgY2FsbGVyIHdpbGwgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSBhbmQKKyAgICAgICAgICB3aWxsIG5vdCBiZSBtYWRlIGFuIG93bmVyIG9mIHRoZSBuYW1lIGlmIGl0IGxhdGVyIGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICAgIElmIHRoZXJlIGFyZSBubyBvdGhlciBvd25lcnMgaW4gdGhlIHF1ZXVlIGZvciB0aGUgbmFtZSwgaXQgd2lsbCBiZQorICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgYnVzIGVudGlyZWx5LgorCisgICAgICAgICAgVGhlIHJldHVybiBjb2RlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkNvbnZlbnRpb25hbCBOYW1lPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5WYWx1ZTwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX1JFTEVBU0VfTkFNRV9SRVBMWV9SRUxFQVNFRDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MTwvZW50cnk+IDxlbnRyeT5UaGUgY2FsbGVyIGhhcyByZWxlYXNlZCBoaXMgY2xhaW0gb24KKyAgICAgICAgICAgICAgICAgIHRoZSBnaXZlbiBuYW1lLiBFaXRoZXIgdGhlIGNhbGxlciB3YXMgdGhlIHByaW1hcnkgb3duZXIgb2YKKyAgICAgICAgICAgICAgICAgIHRoZSBuYW1lLCBhbmQgdGhlIG5hbWUgaXMgbm93IHVudXNlZCBvciB0YWtlbiBieSBzb21lYm9keQorICAgICAgICAgICAgICAgICAgd2FpdGluZyBpbiB0aGUgcXVldWUgZm9yIHRoZSBuYW1lLCBvciB0aGUgY2FsbGVyIHdhcyB3YWl0aW5nCisgICAgICAgICAgICAgICAgICBpbiB0aGUgcXVldWUgZm9yIHRoZSBuYW1lIGFuZCBoYXMgbm93IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgcXVldWUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfUkVMRUFTRV9OQU1FX1JFUExZX05PTl9FWElTVEVOVDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBidXMuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfUkVMRUFTRV9OQU1FX1JFUExZX05PVF9PV05FUjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MzwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+VGhlIGNhbGxlciB3YXMgbm90IHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoaXMgbmFtZSwKKyAgICAgICAgICAgICAgICAgIGFuZCB3YXMgYWxzbyBub3Qgd2FpdGluZyBpbiB0aGUgcXVldWUgdG8gb3duIHRoaXMgbmFtZS48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9zZWN0Mz4KKworICAgICAgIDxzZWN0MyBpZD0iYnVzLW1lc3NhZ2VzLWxpc3QtcXVldWVkLW93bmVycyI+CisgICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5MaXN0UXVldWVkT3duZXJzPC9saXRlcmFsPjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIGEgbWV0aG9kOgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIEFSUkFZIG9mIFNUUklORyBMaXN0UXVldWVkT3duZXJzIChpbiBTVFJJTkcgbmFtZSkKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIE1lc3NhZ2UgYXJndW1lbnRzOgorICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgorICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KKyAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QXJndW1lbnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+U1RSSU5HPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgd2VsbC1rbm93biBidXMgbmFtZSB0byBxdWVyeSwgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5jYXBwdWNjaW5vPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgICAgUmVwbHkgYXJndW1lbnRzOgorICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgorICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KKyAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QXJndW1lbnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+MDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QVJSQVkgb2YgU1RSSU5HPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgdW5pcXVlIGJ1cyBuYW1lcyBvZiBjb25uZWN0aW9ucyBjdXJyZW50bHkgcXVldWVkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbmFtZTwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBtZXRob2QgY2FsbCBzaG91bGQgYmUgc2VudCB0bworICAgICAgICAgIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9saXRlcmFsPiBhbmQgbGlzdHMgdGhlIGNvbm5lY3Rpb25zCisgICAgICAgICAgY3VycmVudGx5IHF1ZXVlZCBmb3IgYSBidXMgbmFtZSAoc2VlCisgICAgICAgICAgPHhyZWYgbGlua2VuZD0idGVybS1xdWV1ZWQtb3duZXIiLz4pLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9zZWN0Mz4KICAgICA8L3NlY3QyPgogCiAgICAgPHNlY3QyIGlkPSJtZXNzYWdlLWJ1cy1yb3V0aW5nIj4KQEAgLTQzOTEsMTQgKzQ2MzYsNiBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRWF2ZXNkcm9wcGluZyBpbnRlcmFjdHMgcG9vcmx5IHdpdGggYnVzZXMgd2l0aCBub24tdHJpdmlhbAotICAgICAgICAgIGFjY2VzcyBjb250cm9sIHJlc3RyaWN0aW9ucywgYW5kIGlzIGRlcHJlY2F0ZWQuIFRoZQotICAgICAgICAgIDxsaXRlcmFsPkJlY29tZU1vbml0b3I8L2xpdGVyYWw+IG1ldGhvZCAoc2VlCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0iYnVzLW1lc3NhZ2VzLWJlY29tZS1tb25pdG9yIi8+KSBwcm92aWRlcwotICAgICAgICAgIGEgcHJlZmVyYWJsZSB3YXkgdG8gbW9uaXRvciBidXNlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgogICAgICAgICAgIEVhdmVzZHJvcHBpbmcgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRvb2xzLCBzdWNoIGFzCiAgICAgICAgICAgdGhlIDxsaXRlcmFsPmRidXMtbW9uaXRvcjwvbGl0ZXJhbD4gdG9vbCBpbiB0aGUgcmVmZXJlbmNlCiAgICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgRC1CdXMuIFRvb2xzIHdoaWNoIGVhdmVzZHJvcCBvbiB0aGUgbWVzc2FnZSBidXMKQEAgLTQ0MDksMTIgKzQ2NDYsMjEgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgQ2xpZW50cyBtYXkgYXR0ZW1wdCB0byBlYXZlc2Ryb3AgYnkgYWRkaW5nIG1hdGNoIHJ1bGVzCiAgICAgICAgICAgKHNlZSA8eHJlZiBsaW5rZW5kPSJtZXNzYWdlLWJ1cy1yb3V0aW5nLW1hdGNoLXJ1bGVzIi8+KSBjb250YWluaW5nCi0gICAgICAgICAgdGhlIDxsaXRlcmFsPmVhdmVzZHJvcD0ndHJ1ZSc8L2xpdGVyYWw+IG1hdGNoLiBGb3IKKyAgICAgICAgICB0aGUgPGxpdGVyYWw+ZWF2ZXNkcm9wPSd0cnVlJzwvbGl0ZXJhbD4gbWF0Y2guIElmIHRoZSBtZXNzYWdlIGJ1cycKKyAgICAgICAgICBzZWN1cml0eSBwb2xpY3kgZG9lcyBub3QgYWxsb3cgZWF2ZXNkcm9wcGluZywgdGhlIG1hdGNoIHJ1bGUgY2FuCisgICAgICAgICAgc3RpbGwgYmUgYWRkZWQsIGJ1dCB3aWxsIG5vdCBoYXZlIGFueSBwcmFjdGljYWwgZWZmZWN0LiBGb3IKICAgICAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbWVzc2FnZSBidXMgaW1wbGVtZW50YXRpb25zLCBpZiBhZGRpbmcgc3VjaAogICAgICAgICAgIGEgbWF0Y2ggcnVsZSByZXN1bHRzIGluIGFuIGVycm9yIHJlcGx5LCB0aGUgY2xpZW50IG1heSBmYWxsIGJhY2sgdG8KICAgICAgICAgICBhZGRpbmcgdGhlIHNhbWUgcnVsZSB3aXRoIHRoZSA8bGl0ZXJhbD5lYXZlc2Ryb3A8L2xpdGVyYWw+IG1hdGNoCiAgICAgICAgICAgb21pdHRlZC4KICAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVhdmVzZHJvcHBpbmcgaW50ZXJhY3RzIHBvb3JseSB3aXRoIGJ1c2VzIHdpdGggbm9uLXRyaXZpYWwKKyAgICAgICAgICBhY2Nlc3MgY29udHJvbCByZXN0cmljdGlvbnMuIFRoZQorICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImJ1cy1tZXNzYWdlcy1iZWNvbWUtbW9uaXRvciIvPiBtZXRob2QgcHJvdmlkZXMKKyAgICAgICAgICBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gbW9uaXRvciBidXNlcy4KKyAgICAgICAgPC9wYXJhPgogICAgICAgPC9zZWN0Mz4KIAogICAgICAgPHNlY3QzIGlkPSJtZXNzYWdlLWJ1cy1yb3V0aW5nLW1hdGNoLXJ1bGVzIj4KQEAgLTQ0MzYsMTggKzQ2ODIsMTYgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgTWF0Y2ggcnVsZXMgY2FuIGFsc28gYmUgdXNlZCBmb3IgZWF2ZXNkcm9wcGluZwogICAgICAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0ibWVzc2FnZS1idXMtcm91dGluZy1lYXZlc2Ryb3BwaW5nIi8+KSwKLSAgICAgICAgICBpZiB0aGUgc2VjdXJpdHkgcG9saWN5IG9mIHRoZSBtZXNzYWdlIGJ1cyBhbGxvd3MgaXQsIGJ1dCB0aGlzCi0gICAgICAgICAgdXNhZ2UgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIDxsaXRlcmFsPkJlY29tZU1vbml0b3I8L2xpdGVyYWw+Ci0gICAgICAgICAgbWV0aG9kIChzZWUgPHhyZWYgbGlua2VuZD0iYnVzLW1lc3NhZ2VzLWJlY29tZS1tb25pdG9yIi8+KS4KKyAgICAgICAgICBpZiB0aGUgc2VjdXJpdHkgcG9saWN5IG9mIHRoZSBtZXNzYWdlIGJ1cyBhbGxvd3MgaXQuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWF0Y2ggcnVsZXMgYXJlIGFkZGVkIHVzaW5nIHRoZSBBZGRNYXRjaCBidXMgbWV0aG9kCisgICAgICAgICAgTWF0Y2ggcnVsZXMgYXJlIGFkZGVkIHVzaW5nIHRoZSBBZGRNYXRjaCBidXMgbWV0aG9kIAogICAgICAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0iYnVzLW1lc3NhZ2VzLWFkZC1tYXRjaCIvPikuICBSdWxlcyBhcmUKLSAgICAgICAgICBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIGtleS92YWx1ZSBwYWlycy4KLSAgICAgICAgICBFeGNsdWRpbmcgYSBrZXkgZnJvbSB0aGUgcnVsZSBpbmRpY2F0ZXMgYSB3aWxkY2FyZCBtYXRjaC4KLSAgICAgICAgICBGb3IgaW5zdGFuY2UgZXhjbHVkaW5nIHRoZSB0aGUgbWVtYmVyIGZyb20gYSBtYXRjaCBydWxlIGJ1dAorICAgICAgICAgIHNwZWNpZmllZCBhcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQga2V5L3ZhbHVlIHBhaXJzLiAKKyAgICAgICAgICBFeGNsdWRpbmcgYSBrZXkgZnJvbSB0aGUgcnVsZSBpbmRpY2F0ZXMgYSB3aWxkY2FyZCBtYXRjaC4gIAorICAgICAgICAgIEZvciBpbnN0YW5jZSBleGNsdWRpbmcgdGhlIHRoZSBtZW1iZXIgZnJvbSBhIG1hdGNoIHJ1bGUgYnV0IAogICAgICAgICAgIGFkZGluZyBhIHNlbmRlciB3b3VsZCBsZXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhhdCBzZW5kZXIgdGhyb3VnaC4KLSAgICAgICAgICBBbiBleGFtcGxlIG9mIGEgY29tcGxldGUgcnVsZSB3b3VsZCBiZQorICAgICAgICAgIEFuIGV4YW1wbGUgb2YgYSBjb21wbGV0ZSBydWxlIHdvdWxkIGJlIAogICAgICAgICAgICJ0eXBlPSdzaWduYWwnLHNlbmRlcj0nb3JnLmZyZWVkZXNrdG9wLkRCdXMnLGludGVyZmFjZT0nb3JnLmZyZWVkZXNrdG9wLkRCdXMnLG1lbWJlcj0nRm9vJyxwYXRoPScvYmFyL2ZvbycsZGVzdGluYXRpb249Jzo0NTIzNDUuMzQnLGFyZzI9J2JhciciCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+CkBAIC00NDc3LDcgKzQ3MjEsNyBAQAogICAgICAgICAgIDwvZm9vdG5vdGU+LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSBrZXlzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICAgICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGtleXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgCiAgICAgICAgICAgYSBtYXRjaCBydWxlLgogICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgogICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KQEAgLTQ1MDcsNyArNDc1MSw3IEBACiAgICAgICAgICAgICAgICAgICA8ZW50cnk+QW4gaW50ZXJmYWNlIG5hbWUgKHNlZSA8eHJlZiBsaW5rZW5kPSJtZXNzYWdlLXByb3RvY29sLW5hbWVzLWludGVyZmFjZSIvPik8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgPGVudHJ5Pk1hdGNoIG1lc3NhZ2VzIHNlbnQgb3ZlciBvciB0byBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiAgQW4gZXhhbXBsZSBvZiBhbgogICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIG1hdGNoIGlzIGludGVyZmFjZT0nb3JnLmZyZWVkZXNrdG9wLkhhbC5NYW5hZ2VyJy4KLSAgICAgICAgICAgICAgICAgIElmIGEgbWVzc2FnZSBvbWl0cyB0aGUgaW50ZXJmYWNlIGhlYWRlciwgaXQgbXVzdCBub3QgbWF0Y2ggYW55IHJ1bGUKKyAgICAgICAgICAgICAgICAgIElmIGEgbWVzc2FnZSBvbWl0cyB0aGUgaW50ZXJmYWNlIGhlYWRlciwgaXQgbXVzdCBub3QgbWF0Y2ggYW55IHJ1bGUgCiAgICAgICAgICAgICAgICAgICB0aGF0IHNwZWNpZmllcyB0aGlzIGtleS48L2VudHJ5PgogICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgIDxyb3c+CkBAIC00NTY4LDEwICs0ODEyLDEwIEBACiAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgIDxlbnRyeT48bGl0ZXJhbD5hcmdbMCwgMSwgMiwgMywgLi4uXTwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgICAgICAgICAgICAgPGVudHJ5PkFueSBzdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkFyZyBtYXRjaGVzIGFyZSBzcGVjaWFsIGFuZCBhcmUgdXNlZCBmb3IgZnVydGhlciByZXN0cmljdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5BcmcgbWF0Y2hlcyBhcmUgc3BlY2lhbCBhbmQgYXJlIHVzZWQgZm9yIGZ1cnRoZXIgcmVzdHJpY3RpbmcgdGhlIAogICAgICAgICAgICAgICAgICAgbWF0Y2ggYmFzZWQgb24gdGhlIGFyZ3VtZW50cyBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UuIE9ubHkgYXJndW1lbnRzIG9mIHR5cGUKLSAgICAgICAgICAgICAgICAgIFNUUklORyBjYW4gYmUgbWF0Y2hlZCBpbiB0aGlzIHdheS4gQW4gZXhhbXBsZSBvZiBhbiBhcmd1bWVudCBtYXRjaAotICAgICAgICAgICAgICAgICAgd291bGQgYmUgYXJnMz0nRm9vJy4gT25seSBhcmd1bWVudCBpbmRleGVzIGZyb20gMCB0byA2MyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIFNUUklORyBjYW4gYmUgbWF0Y2hlZCBpbiB0aGlzIHdheS4gQW4gZXhhbXBsZSBvZiBhbiBhcmd1bWVudCBtYXRjaCAKKyAgICAgICAgICAgICAgICAgIHdvdWxkIGJlIGFyZzM9J0ZvbycuIE9ubHkgYXJndW1lbnQgaW5kZXhlcyBmcm9tIDAgdG8gNjMgc2hvdWxkIGJlIAogICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQuPC9lbnRyeT4KICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICA8cm93PgpAQCAtNDYyNSwxMSArNDg2OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGludGVyZmFjZSBuYW1lLjwvcGFyYT4KIAogICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgZXhhbXBsZSwgdGhlIG1hdGNoIHJ1bGUKLSAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5tZW1iZXI9J05hbWVPd25lckNoYW5nZWQnLGFyZzBuYW1lc3BhY2U9J2NvbS5leGFtcGxlLmJhY2tlbmQxJzwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5tZW1iZXI9J05hbWVPd25lckNoYW5nZWQnLGFyZzBuYW1lc3BhY2U9J2NvbS5leGFtcGxlLmJhY2tlbmQnPC9saXRlcmFsPgogICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgbmFtZSBvd25lciBjaGFuZ2VzIGZvciBidXMgbmFtZXMgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmNvbS5leGFtcGxlLmJhY2tlbmQxLmZvbzwvbGl0ZXJhbD4sCi0gICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+Y29tLmV4YW1wbGUuYmFja2VuZDEuZm9vLmJhcjwvbGl0ZXJhbD4sIGFuZAotICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmNvbS5leGFtcGxlLmJhY2tlbmQxPC9saXRlcmFsPiBpdHNlbGYuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmNvbS5leGFtcGxlLmJhY2tlbmQuZm9vPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5iYWNrZW5kLmZvby5iYXI8L2xpdGVyYWw+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5iYWNrZW5kPC9saXRlcmFsPiBpdHNlbGYuPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9J2J1cy1tZXNzYWdlcy1uYW1lLW93bmVyLWNoYW5nZWQnLz4uPC9wYXJhPgogICAgICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTQ2NDQsNDQgKzQ4ODgsMjMgQEAKICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPmVhdmVzZHJvcDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgICAgICAgICAgICAgPGVudHJ5PjxsaXRlcmFsPid0cnVlJzwvbGl0ZXJhbD4sIDxsaXRlcmFsPidmYWxzZSc8L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgU2luY2UgRC1CdXMgMS41LjYsIG1hdGNoIHJ1bGVzIGRvIG5vdAotICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIG1lc3NhZ2VzIHdoaWNoIGhhdmUgYSA8bGl0ZXJhbD5ERVNUSU5BVElPTjwvbGl0ZXJhbD4KLSAgICAgICAgICAgICAgICAgICAgICBmaWVsZCB1bmxlc3MgdGhlIG1hdGNoIHJ1bGUgc3BlY2lmaWNhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgdGhpcwotICAgICAgICAgICAgICAgICAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0ibWVzc2FnZS1idXMtcm91dGluZy1lYXZlc2Ryb3BwaW5nIi8+KQotICAgICAgICAgICAgICAgICAgICAgIGJ5IHNwZWNpZnlpbmcgPGxpdGVyYWw+ZWF2ZXNkcm9wPSd0cnVlJzwvbGl0ZXJhbD4KLSAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbWF0Y2ggcnVsZS4gIDxsaXRlcmFsPmVhdmVzZHJvcD0nZmFsc2UnPC9saXRlcmFsPgotICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gTWVzc2FnZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcmVkIHRvIHRoZWlyIDxsaXRlcmFsPkRFU1RJTkFUSU9OPC9saXRlcmFsPgotICAgICAgICAgICAgICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgbWF0Y2ggcnVsZXMsIHNvIHRoaXMgbWF0Y2ggZG9lcyBub3QKLSAgICAgICAgICAgICAgICAgICAgICBhZmZlY3Qgbm9ybWFsIGRlbGl2ZXJ5IG9mIHVuaWNhc3QgbWVzc2FnZXMuCi0gICAgICAgICAgICAgICAgICAgICAgSW4gb2xkZXIgdmVyc2lvbnMgb2YgRC1CdXMsIHRoaXMgbWF0Y2ggd2FzIG5vdCBhbGxvd2VkCi0gICAgICAgICAgICAgICAgICAgICAgaW4gbWF0Y2ggcnVsZXMsIGFuZCBhbGwgbWF0Y2ggcnVsZXMgYmVoYXZlZCBhcyBpZgotICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmVhdmVzZHJvcD0ndHJ1ZSc8L2xpdGVyYWw+IGhhZCBiZWVuIHVzZWQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgVXNlIG9mIDxsaXRlcmFsPmVhdmVzZHJvcD0ndHJ1ZSc8L2xpdGVyYWw+IGlzCi0gICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZC4gTW9uaXRvcnMgc2hvdWxkIHByZWZlciB0byB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+QmVjb21lTW9uaXRvcjwvbGl0ZXJhbD4gbWV0aG9kIChzZWUKLSAgICAgICAgICAgICAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJidXMtbWVzc2FnZXMtYmVjb21lLW1vbml0b3IiLz4pLAotICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMC4yNiBvZiB0aGUgRC1CdXMKLSAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uIGFuZCB2ZXJzaW9uIDEuOS4xMCBvZiB0aGUgcmVmZXJlbmNlCi0gICAgICAgICAgICAgICAgICAgICAgZGJ1cy1kYWVtb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSBidXMgaW1wbGVtZW50YXRpb25zIG1heSByZXN0cmljdCBtYXRjaCBydWxlcwotICAgICAgICAgICAgICAgICAgICAgIHdpdGggPGxpdGVyYWw+ZWF2ZXNkcm9wPSd0cnVlJzwvbGl0ZXJhbD4gc28gdGhhdCB0aGV5Ci0gICAgICAgICAgICAgICAgICAgICAgY2FuIG9ubHkgYmUgYWRkZWQgYnkgcHJpdmlsZWdlZCBjb25uZWN0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1hdGNoIGtleSB3YXMgYWRkZWQgaW4gdmVyc2lvbiAwLjE4IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgRC1CdXMgc3BlY2lmaWNhdGlvbiBhbmQgaW1wbGVtZW50ZWQgYnkgdGhlIGJ1cwotICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uIGluIGRidXMgMS41LjYgYW5kIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5TaW5jZSBELUJ1cyAxLjUuNiwgbWF0Y2ggcnVsZXMgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIG1lc3NhZ2VzIHdoaWNoIGhhdmUgYSA8bGl0ZXJhbD5ERVNUSU5BVElPTjwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgICAgICAgZmllbGQgdW5sZXNzIHRoZSBtYXRjaCBydWxlIHNwZWNpZmljYWxseQorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyB0aGlzCisgICAgICAgICAgICAgICAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0ibWVzc2FnZS1idXMtcm91dGluZy1lYXZlc2Ryb3BwaW5nIi8+KQorICAgICAgICAgICAgICAgICAgICBieSBzcGVjaWZ5aW5nIDxsaXRlcmFsPmVhdmVzZHJvcD0ndHJ1ZSc8L2xpdGVyYWw+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtYXRjaCBydWxlLiAgPGxpdGVyYWw+ZWF2ZXNkcm9wPSdmYWxzZSc8L2xpdGVyYWw+CisgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gTWVzc2FnZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJlZCB0byB0aGVpciA8bGl0ZXJhbD5ERVNUSU5BVElPTjwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiBtYXRjaCBydWxlcywgc28gdGhpcyBtYXRjaCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBhZmZlY3Qgbm9ybWFsIGRlbGl2ZXJ5IG9mIHVuaWNhc3QgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBtZXNzYWdlIGJ1cyBoYXMgYSBzZWN1cml0eSBwb2xpY3kgd2hpY2ggZm9yYmlkcworICAgICAgICAgICAgICAgICAgICBlYXZlc2Ryb3BwaW5nLCB0aGlzIG1hdGNoIG1heSBzdGlsbCBiZSB1c2VkIHdpdGhvdXQgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgIGJ1dCB3aWxsIG5vdCBoYXZlIGFueSBwcmFjdGljYWwgZWZmZWN0LgorICAgICAgICAgICAgICAgICAgICBJbiBvbGRlciB2ZXJzaW9ucyBvZiBELUJ1cywgdGhpcyBtYXRjaCB3YXMgbm90IGFsbG93ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gbWF0Y2ggcnVsZXMsIGFuZCBhbGwgbWF0Y2ggcnVsZXMgYmVoYXZlZCBhcyBpZgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5lYXZlc2Ryb3A9J3RydWUnPC9saXRlcmFsPiBoYWQgYmVlbiB1c2VkLgogICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgPC90Ym9keT4KQEAgLTQ2OTEsNDggKzQ5MTQsMjIgQEAKICAgICAgIDwvc2VjdDM+CiAgICAgPC9zZWN0Mj4KICAgICA8c2VjdDIgaWQ9Im1lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzIj4KLSAgICAgIDx0aXRsZT5NZXNzYWdlIEJ1cyBTdGFydGluZyBTZXJ2aWNlcyAoQWN0aXZhdGlvbik8L3RpdGxlPgorICAgICAgPHRpdGxlPk1lc3NhZ2UgQnVzIFN0YXJ0aW5nIFNlcnZpY2VzPC90aXRsZT4KICAgICAgIDxwYXJhPgogICAgICAgICBUaGUgbWVzc2FnZSBidXMgY2FuIHN0YXJ0IGFwcGxpY2F0aW9ucyBvbiBiZWhhbGYgb2Ygb3RoZXIgYXBwbGljYXRpb25zLgotICAgICAgICBUaGlzIGlzIHJlZmVycmVkIHRvIGFzIDxmaXJzdHRlcm0+c2VydmljZSBhY3RpdmF0aW9uPC9maXJzdHRlcm0+IG9yCi0gICAgICAgIDxmaXJzdHRlcm0+YWN0aXZhdGlvbjwvZmlyc3R0ZXJtPi4KKyAgICAgICAgSW4gQ09SQkEgdGVybXMsIHRoaXMgd291bGQgYmUgY2FsbGVkIDxmaXJzdHRlcm0+YWN0aXZhdGlvbjwvZmlyc3R0ZXJtPi4KICAgICAgICAgQW4gYXBwbGljYXRpb24gdGhhdCBjYW4gYmUgc3RhcnRlZCBpbiB0aGlzIHdheSBpcyBjYWxsZWQgYQotICAgICAgICA8Zmlyc3R0ZXJtPnNlcnZpY2U8L2ZpcnN0dGVybT4gb3IgYW4KLSAgICAgICAgPGZpcnN0dGVybT5hY3RpdmF0YWJsZSBzZXJ2aWNlPC9maXJzdHRlcm0+LgorICAgICAgICA8Zmlyc3R0ZXJtPnNlcnZpY2U8L2ZpcnN0dGVybT4uCiAgICAgICA8L3BhcmE+Ci0KICAgICAgIDxwYXJhPgotICAgICAgICA8Zmlyc3R0ZXJtPlN0YXJ0aW5nIGEgc2VydmljZTwvZmlyc3R0ZXJtPiBzaG91bGQgYmUgcmVhZCBhcyBzeW5vbnltb3VzCi0gICAgICAgIHdpdGggc2VydmljZSBhY3RpdmF0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gRC1CdXMsIHNlcnZpY2UgYWN0aXZhdGlvbiBpcyBub3JtYWxseSBkb25lIGJ5Ci0gICAgICAgIDxmaXJzdHRlcm0+YXV0by1zdGFydGluZzwvZmlyc3R0ZXJtPi4KLSAgICAgICAgSW4gYXV0by1zdGFydGluZywgYXBwbGljYXRpb25zIHNlbmQgYQotICAgICAgICBtZXNzYWdlIHRvIGEgcGFydGljdWxhciB3ZWxsLWtub3duIG5hbWUsIHN1Y2ggYXMKLSAgICAgICAgPGxpdGVyYWw+Y29tLmV4YW1wbGUuVGV4dEVkaXRvcjE8L2xpdGVyYWw+LCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlCi0gICAgICAgIDxsaXRlcmFsPk5PX0FVVE9fU1RBUlQ8L2xpdGVyYWw+IGZsYWcgaW4gdGhlIG1lc3NhZ2UgaGVhZGVyLgotICAgICAgICBJZiBubyBhcHBsaWNhdGlvbiBvbiB0aGUgYnVzIG93bnMgdGhlIHJlcXVlc3RlZCBuYW1lLCBidXQgdGhlIGJ1cwotICAgICAgICBkYWVtb24gZG9lcyBrbm93IGhvdyB0byBzdGFydCBhbiBhY3RpdmF0YWJsZSBzZXJ2aWNlIGZvciB0aGF0IG5hbWUsCi0gICAgICAgIHRoZW4gdGhlIGJ1cyBkYWVtb24gd2lsbCBzdGFydCB0aGF0IHNlcnZpY2UsIHdhaXQgZm9yIGl0IHRvIHJlcXVlc3QKLSAgICAgICAgdGhhdCBuYW1lLCBhbmQgZGVsaXZlciB0aGUgbWVzc2FnZSB0byBpdC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgZm9yIGFwcGxpY2F0aW9ucyB0byBzZW5kIGFuIGV4cGxpY2l0IHJlcXVlc3QgdG8KLSAgICAgICAgc3RhcnQgYSBzZXJ2aWNlOiB0aGlzIGlzIGFub3RoZXIgZm9ybSBvZiBhY3RpdmF0aW9uLCBkaXN0aW5jdCBmcm9tCi0gICAgICAgIGF1dG8tc3RhcnRpbmcuIFNlZQotICAgICAgICA8eHJlZiBsaW5rZW5kPSJidXMtbWVzc2FnZXMtc3RhcnQtc2VydmljZS1ieS1uYW1lIi8+IGZvciBkZXRhaWxzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gZWl0aGVyIGNhc2UsIHRoaXMgaW1wbGllcyBhIGNvbnRyYWN0IGRvY3VtZW50ZWQgYWxvbmcgd2l0aCB0aGUgbmFtZQotICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5UZXh0RWRpdG9yMTwvbGl0ZXJhbD4gZm9yIHdoaWNoIG9iamVjdAotICAgICAgICB0aGUgb3duZXIgb2YgdGhhdCBuYW1lIHdpbGwgcHJvdmlkZSwgYW5kIHdoYXQgaW50ZXJmYWNlcyB0aG9zZQorICAgICAgICBXaXRoIEQtQnVzLCBzdGFydGluZyBhIHNlcnZpY2UgaXMgbm9ybWFsbHkgZG9uZSBieSBuYW1lLiBUaGF0IGlzLAorICAgICAgICBhcHBsaWNhdGlvbnMgYXNrIHRoZSBtZXNzYWdlIGJ1cyB0byBzdGFydCBzb21lIHByb2dyYW0gdGhhdCB3aWxsIG93biBhCisgICAgICAgIHdlbGwta25vd24gbmFtZSwgc3VjaCBhcyA8bGl0ZXJhbD5jb20uZXhhbXBsZS5UZXh0RWRpdG9yPC9saXRlcmFsPi4KKyAgICAgICAgVGhpcyBpbXBsaWVzIGEgY29udHJhY3QgZG9jdW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBuYW1lCisgICAgICAgIDxsaXRlcmFsPmNvbS5leGFtcGxlLlRleHRFZGl0b3I8L2xpdGVyYWw+IGZvciB3aGljaCBvYmplY3QKKyAgICAgICAgdGhlIG93bmVyIG9mIHRoYXQgbmFtZSB3aWxsIHByb3ZpZGUsIGFuZCB3aGF0IGludGVyZmFjZXMgdGhvc2UgCiAgICAgICAgIG9iamVjdHMgd2lsbCBoYXZlLgogICAgICAgPC9wYXJhPgotCiAgICAgICA8cGFyYT4KICAgICAgICAgVG8gZmluZCBhbiBleGVjdXRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gYSBwYXJ0aWN1bGFyIG5hbWUsIHRoZSBidXMgZGFlbW9uCiAgICAgICAgIGxvb2tzIGZvciA8Zmlyc3R0ZXJtPnNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZXM8L2ZpcnN0dGVybT4uICBTZXJ2aWNlCkBAIC00NzU2LDcgKzQ5NTMsNyBAQAogICAgICAgICBPbiB0aGUgd2VsbC1rbm93biBzeXN0ZW0gYnVzLCB0aGUgbmFtZSBvZiBhIHNlcnZpY2UgZGVzY3JpcHRpb24gZmlsZQogICAgICAgICBtdXN0IGJlIGl0cyB3ZWxsLWtub3duIG5hbWUgcGx1cyA8bGl0ZXJhbD4uc2VydmljZTwvbGl0ZXJhbD4sCiAgICAgICAgIGZvciBpbnN0YW5jZQotICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5Db25maWd1cmF0aW9uRGF0YWJhc2UxLnNlcnZpY2U8L2xpdGVyYWw+LgorICAgICAgICA8bGl0ZXJhbD5jb20uZXhhbXBsZS5Db25maWd1cmF0aW9uRGF0YWJhc2Uuc2VydmljZTwvbGl0ZXJhbD4uCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtNDc4Niw3ICs0OTgzLDcgQEAKICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgICAjIFNhbXBsZSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGZpbGUKICAgICAgICAgICAgIFtELUJVUyBTZXJ2aWNlXQotICAgICAgICAgICAgTmFtZT1jb20uZXhhbXBsZS5Db25maWd1cmF0aW9uRGF0YWJhc2UxCisgICAgICAgICAgICBOYW1lPWNvbS5leGFtcGxlLkNvbmZpZ3VyYXRpb25EYXRhYmFzZQogICAgICAgICAgICAgRXhlYz0vdXNyL2Jpbi9zYW1wbGUtY29uZmlnZAogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgIDwvZmlndXJlPgpAQCAtNDg3MCwxMjggKzUwNjcsMTggQEAKICAgICAgICAgICBvbmx5IGJ5IG5hbWUuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIGEgcGVyLWRpc3BsYXkgc2NvcGUuIFRvIGFjaGlldmUgdGhhdCwgd2Ugd291bGQKKyAgICAgICAgICBDb250cmFzdCB0aGlzIHdpdGggYSBwZXItZGlzcGxheSBzY29wZS4gVG8gYWNoaWV2ZSB0aGF0LCB3ZSB3b3VsZCAKICAgICAgICAgICB3YW50IGEgc2luZ2xlIGJ1cyBzcGFubmluZyBhbGwgc2Vzc2lvbnMgdXNpbmcgYSBnaXZlbiBkaXNwbGF5LgotICAgICAgICAgIFNvIHdlIG1pZ2h0IHNldCBhIDxsaXRlcmFsPl9EQlVTX0RJU1BMQVlfQlVTX0FERFJFU1M8L2xpdGVyYWw+CisgICAgICAgICAgU28gd2UgbWlnaHQgc2V0IGEgPGxpdGVyYWw+X0RCVVNfRElTUExBWV9CVVNfQUREUkVTUzwvbGl0ZXJhbD4gCiAgICAgICAgICAgcHJvcGVydHkgb24gc2NyZWVuIDAgb2YgdGhlIGRpc3BsYXksIHBvaW50aW5nIHRvIHRoaXMgYnVzLgogICAgICAgICA8L3BhcmE+CiAgICAgICA8L3NlY3QzPgotCi0gICAgICA8c2VjdDMgaWQ9Im1lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzLXN5c3RlbWQiPgotICAgICAgICA8dGl0bGU+c3lzdGVtZCBBY3RpdmF0aW9uPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTZXJ2aWNlIGRlc2NyaXB0aW9uIGZpbGVzIG1heSBjb250YWluIGEKLSAgICAgICAgICA8bGl0ZXJhbD5TeXN0ZW1kU2VydmljZTwvbGl0ZXJhbD4ga2V5LiBJdHMgdmFsdWUgaXMgdGhlIG5hbWUgb2YgYQotICAgICAgICAgIDx1bGluawotICAgICAgICAgICAgdXJsPSJodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kLyI+c3lzdGVtZDwvdWxpbms+Ci0gICAgICAgICAgc2VydmljZSwgZm9yIGV4YW1wbGUKLSAgICAgICAgICA8bGl0ZXJhbD5kYnVzLWNvbS5leGFtcGxlLk15RGFlbW9uLnNlcnZpY2U8L2xpdGVyYWw+LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgdGhpcyBrZXkgaXMgcHJlc2VudCwgdGhlIGJ1cyBkYWVtb24gbWF5IGNhcnJ5IG91dCBhY3RpdmF0aW9uIGZvcgotICAgICAgICAgIHRoaXMgRC1CdXMgc2VydmljZSBieSBzZW5kaW5nIGEgcmVxdWVzdCB0byBzeXN0ZW1kIGFza2luZyBpdCB0bwotICAgICAgICAgIHN0YXJ0IHRoZSBzeXN0ZW1kIHNlcnZpY2Ugd2hvc2UgbmFtZSBpcyB0aGUgdmFsdWUgb2YKLSAgICAgICAgICA8bGl0ZXJhbD5TeXN0ZW1kU2VydmljZTwvbGl0ZXJhbD4uIEZvciBleGFtcGxlLCB0aGUgcmVmZXJlbmNlCi0gICAgICAgICAgPGxpdGVyYWw+ZGJ1cy1kYWVtb248L2xpdGVyYWw+IGhhcyBhCi0gICAgICAgICAgPGxpdGVyYWw+LS1zeXN0ZW1kLWFjdGl2YXRpb248L2xpdGVyYWw+IG9wdGlvbiB0aGF0IGVuYWJsZXMgdGhpcwotICAgICAgICAgIGZlYXR1cmUsIGFuZCB0aGF0IG9wdGlvbiBpcyBnaXZlbiB3aGVuIGl0IGlzIHN0YXJ0ZWQgYnkgc3lzdGVtZC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE9uIHRoZSB3ZWxsLWtub3duIHN5c3RlbSBidXMsIGl0IGlzIGEgY29tbW9uIHByYWN0aWNlIHRvIHNldAotICAgICAgICAgIDxsaXRlcmFsPlN5c3RlbWRTZXJ2aWNlPC9saXRlcmFsPiB0byA8bGl0ZXJhbD5kYnVzLTwvbGl0ZXJhbD4sCi0gICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIHdlbGwta25vd24gYnVzIG5hbWUsIGZvbGxvd2VkIGJ5Ci0gICAgICAgICAgPGxpdGVyYWw+LnNlcnZpY2U8L2xpdGVyYWw+LCB0aGVuIHJlZ2lzdGVyIHRoYXQgbmFtZSBhcyBhbiBhbGlhcwotICAgICAgICAgIGZvciB0aGUgcmVhbCBzeXN0ZW1kIHNlcnZpY2UuIFRoaXMgYWxsb3dzIEQtQnVzIGFjdGl2YXRpb24gb2YgYQotICAgICAgICAgIHNlcnZpY2UgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBpbmRlcGVuZGVudGx5IG9mIHdoZXRoZXIgdGhlCi0gICAgICAgICAgc2VydmljZSBpcyBzdGFydGVkIGJ5IHN5c3RlbWQgZHVyaW5nIGJvb3QuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+Ci0KLSAgICAgIDxzZWN0MyBpZD0ibWVzc2FnZS1idXMtc3RhcnRpbmctc2VydmljZXMtYXBwYXJtb3IiPgotICAgICAgICA8dGl0bGU+TWVkaWF0aW5nIEFjdGl2YXRpb24gd2l0aCBBcHBBcm1vcjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgUGxlYXNlIHJlZmVyIHRvCi0gICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3dpa2kuYXBwYXJtb3IubmV0L2luZGV4LnBocC9Eb2N1bWVudGF0aW9uIj5BcHBBcm1vciBkb2N1bWVudGF0aW9uPC91bGluaz4KLSAgICAgICAgICBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBBcHBBcm1vciwgYW5kIGhvdyBpdCBtZWRpYXRlcyBELUJ1cwotICAgICAgICAgIG1lc3NhZ2VzIHdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEga2VybmVsIGFuZAotICAgICAgICAgIDxsaXRlcmFsPmRidXMtZGFlbW9uPC9saXRlcmFsPiB0aGF0IHN1cHBvcnQgdGhpcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEluIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgcmVmZXJlbmNlIDxsaXRlcmFsPmRidXMtZGFlbW9uPC9saXRlcmFsPiwKLSAgICAgICAgICBBcHBBcm1vciBwb2xpY3kgcnVsZXMgb2YgdHlwZSA8bGl0ZXJhbD5kYnVzIHNlbmQ8L2xpdGVyYWw+Ci0gICAgICAgICAgYXJlIGFsc28gdXNlZCB0byBjb250cm9sIGF1dG8tc3RhcnRpbmc6IGlmIGEgbWVzc2FnZSBpcyBzZW50IHRvCi0gICAgICAgICAgdGhlIHdlbGwta25vd24gbmFtZSBvZiBhbiBhY3RpdmF0YWJsZSBzZXJ2aWNlLCB0aGUKLSAgICAgICAgICA8bGl0ZXJhbD5kYnVzLWRhZW1vbjwvbGl0ZXJhbD4gd2lsbCBhdHRlbXB0IHRvIGRldGVybWluZSB3aGV0aGVyCi0gICAgICAgICAgaXQgd291bGQgZGVsaXZlciB0aGUgbWVzc2FnZSB0byB0aGF0IHNlcnZpY2UKLSAgICAgICAgICA8ZW1waGFzaXM+YmVmb3JlPC9lbXBoYXNpcz5hdXRvLXN0YXJ0aW5nIGl0LCBieSBtYWtpbmcgc29tZQotICAgICAgICAgIGFzc3VtcHRpb25zIGFib3V0IHRoZSByZXN1bHRpbmcgcHJvY2VzcydzIGNyZWRlbnRpYWxzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgaXQgZG9lcyBwcm9jZWVkIHdpdGggYXV0by1zdGFydGluZywgd2hlbiB0aGUgc2VydmljZSBhcHBlYXJzLCB0aGUKLSAgICAgICAgICA8bGl0ZXJhbD5kYnVzLWRhZW1vbjwvbGl0ZXJhbD4gcmVwZWF0cyB0aGUgcG9saWN5IGNoZWNrICh3aXRoCi0gICAgICAgICAgdGhlIHNlcnZpY2UncyB0cnVlIGNyZWRlbnRpYWxzLCB3aGljaCBtaWdodCBub3QgYmUgaWRlbnRpY2FsKQotICAgICAgICAgIGJlZm9yZSBkZWxpdmVyaW5nIHRoZSBtZXNzYWdlLiBJbiBwcmFjdGljZSwgdGhpcyBzZWNvbmQgY2hlY2sgd2lsbAotICAgICAgICAgIHVzdWFsbHkgYmUgbW9yZSBzdHJpY3QgdGhhbiB0aGUgZmlyc3Q7IHRoZSBmaXJzdCBjaGVjayB3b3VsZCBvbmx5Ci0gICAgICAgICAgYmUgbW9yZSBzdHJpY3QgaWYgdGhlcmUgYXJlICJibGFja2xpc3QiLXN0eWxlIHJ1bGVzIGxpa2UKLSAgICAgICAgICA8bGl0ZXJhbD5kZW55IGRidXMgc2VuZCBwZWVyPShsYWJlbD0vdXNyL2Jpbi9wcm90ZWN0ZWQpPC9saXRlcmFsPgotICAgICAgICAgIHRoYXQgbWF0Y2ggb24gdGhlIHBlZXIncyBzcGVjaWZpYyBjcmVkZW50aWFscywgYnV0IEFwcEFybW9yIGlzCi0gICAgICAgICAgbm9ybWFsbHkgdXNlZCBpbiBhICJ3aGl0ZWxpc3QiIHN0eWxlIHdoZXJlIHRoaXMgZG9lcyBub3QgYXBwbHkuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUbyBzdXBwb3J0IHRoaXMgcHJvY2Vzcywgc2VydmljZSBkZXNjcmlwdGlvbiBmaWxlcyBtYXkgY29udGFpbiBhCi0gICAgICAgICAgPGxpdGVyYWw+QXNzdW1lZEFwcEFybW9yTGFiZWw8L2xpdGVyYWw+IGtleS4gSXRzIHZhbHVlIGlzIHRoZSBuYW1lCi0gICAgICAgICAgb2YgYW4gQXBwQXJtb3IgbGFiZWwsIGZvciBleGFtcGxlCi0gICAgICAgICAgPGxpdGVyYWw+L3Vzci9zYmluL215ZGFlbW9uPC9saXRlcmFsPi4KLSAgICAgICAgICBJZiBwcmVzZW50LCBBcHBBcm1vciBtZWRpYXRpb24gb2YgbWVzc2FnZXMgdGhhdCBhdXRvLXN0YXJ0IGEKLSAgICAgICAgICBzZXJ2aWNlIHdpbGwgZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgYXV0by1zdGFydGluZyB0byBvY2N1ciBiYXNlZAotICAgICAgICAgIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGFjdGl2YXRlZCBzZXJ2aWNlIHdpbGwgYmUgY29uZmluZWQKLSAgICAgICAgICB1bmRlciB0aGUgc3BlY2lmaWVkIGxhYmVsOyBpbiBwYXJ0aWN1bGFyLCBydWxlcyBvZiB0aGUgZm9ybQotICAgICAgICAgIDxsaXRlcmFsPmRidXMgc2VuZCBwZWVyPShsYWJlbD0vdXNyL3NiaW4vbXlkYWVtb24pPC9saXRlcmFsPiBvcgotICAgICAgICAgIDxsaXRlcmFsPmRlbnkgZGJ1cyBzZW5kIHBlZXI9KGxhYmVsPS91c3Ivc2Jpbi9teWRhZW1vbik8L2xpdGVyYWw+Ci0gICAgICAgICAgd2lsbCBtYXRjaCBpdCwgYWxsb3dpbmcgb3IgZGVueWluZyBhcyBhcHByb3ByaWF0ZQotICAgICAgICAgIChldmVuIGlmIHRoZXJlIGlzIGluIGZhY3Qgbm8gcHJvZmlsZSBvZiB0aGF0IG5hbWUgbG9hZGVkKS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE90aGVyd2lzZSwgQXBwQXJtb3IgbWVkaWF0aW9uIG9mIG1lc3NhZ2VzIHRoYXQgYXV0by1zdGFydCBhCi0gICAgICAgICAgc2VydmljZSB3aWxsIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IGF1dG8tc3RhcnRpbmcgdG8gb2NjdXIKLSAgICAgICAgICB3aXRob3V0IHNwZWNpZnlpbmcgYW55IHBhcnRpY3VsYXIgbGFiZWwuIEluIHBhcnRpY3VsYXIsIGFueSBydWxlIG9mCi0gICAgICAgICAgdGhlIGZvcm0gPGxpdGVyYWw+ZGJ1cyBzZW5kIHBlZXI9KGxhYmVsPVgpPC9saXRlcmFsPiBvcgotICAgICAgICAgIDxsaXRlcmFsPmRlbnkgZGJ1cyBzZW5kIHBlZXI9KGxhYmVsPVgpPC9saXRlcmFsPgotICAgICAgICAgIChmb3IgYW55IHZhbHVlIG9mIFgsIGluY2x1ZGluZyB0aGUgc3BlY2lhbCBsYWJlbAotICAgICAgICAgIDxsaXRlcmFsPnVuY29uZmluZWQ8L2xpdGVyYWw+KSB3aWxsIG5vdCBpbmZsdWVuY2Ugd2hldGhlciB0aGUKLSAgICAgICAgICBhdXRvLXN0YXJ0IGlzIGFsbG93ZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBSdWxlcyBvZiB0eXBlIDxsaXRlcmFsPmRidXMgcmVjZWl2ZTwvbGl0ZXJhbD4gYXJlIG5vdCBjaGVja2VkCi0gICAgICAgICAgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGFsbG93IGF1dG8tc3RhcnRpbmc7IHRoZXkgYXJlIG9ubHkgY2hlY2tlZAotICAgICAgICAgIGFnYWluc3QgdGhlIHNlcnZpY2UncyBwcm9maWxlIGFmdGVyIHRoZSBzZXJ2aWNlIGhhcyBzdGFydGVkLCB3aGVuCi0gICAgICAgICAgZGVjaWRpbmcgd2hldGhlciB0byBkZWxpdmVyIHRoZSBtZXNzYWdlIHRoYXQgY2F1c2VkIHRoZSBhdXRvLXN0YXJ0aW5nCi0gICAgICAgICAgb3BlcmF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRXhwbGljaXQgYWN0aXZhdGlvbiB2aWEKLSAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJidXMtbWVzc2FnZXMtc3RhcnQtc2VydmljZS1ieS1uYW1lIi8+IGlzIG5vdCBjdXJyZW50bHkKLSAgICAgICAgICBhZmZlY3RlZCBieSB0aGlzIG1lZGlhdGlvbjogaWYgYSBjb25maW5lZCBwcm9jZXNzIGlzIHRvIGJlIHByZXZlbnRlZAotICAgICAgICAgIGZyb20gc3RhcnRpbmcgYXJiaXRyYXJ5IHNlcnZpY2VzLCB0aGVuIGl0IG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gY2FsbAotICAgICAgICAgIHRoYXQgbWV0aG9kLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPgogICAgIDwvc2VjdDI+CiAKICAgICA8c2VjdDIgaWQ9Im1lc3NhZ2UtYnVzLXR5cGVzIj4KICAgICAgIDx0aXRsZT5XZWxsLWtub3duIE1lc3NhZ2UgQnVzIEluc3RhbmNlczwvdGl0bGU+CiAgICAgICA8cGFyYT4KLSAgICAgICAgVHdvIHN0YW5kYXJkIG1lc3NhZ2UgYnVzIGluc3RhbmNlcyBhcmUgZGVmaW5lZCBoZXJlLCBhbG9uZyB3aXRoIGhvdworICAgICAgICBUd28gc3RhbmRhcmQgbWVzc2FnZSBidXMgaW5zdGFuY2VzIGFyZSBkZWZpbmVkIGhlcmUsIGFsb25nIHdpdGggaG93IAogICAgICAgICB0byBsb2NhdGUgdGhlbSBhbmQgd2hlcmUgdGhlaXIgc2VydmljZSBmaWxlcyBsaXZlLgogICAgICAgPC9wYXJhPgogICAgICAgPHNlY3QzIGlkPSJtZXNzYWdlLWJ1cy10eXBlcy1sb2dpbiI+CkBAIC01MDAyLDEzICs1MDg5LDEzIEBACiAgICAgICAgICAgc2Vzc2lvbiBtYXkgaW50ZXJhY3Qgd2l0aCBvbmUgYW5vdGhlciB1c2luZyB0aGlzIG1lc3NhZ2UgYnVzLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBsb2dpbiBzZXNzaW9uIG1lc3NhZ2UgYnVzIGlzIGdpdmVuCi0gICAgICAgICAgaW4gdGhlIDxsaXRlcmFsPkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUzwvbGl0ZXJhbD4gZW52aXJvbm1lbnQKLSAgICAgICAgICB2YXJpYWJsZS4gSWYgdGhhdCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhcHBsaWNhdGlvbnMgbWF5Ci0gICAgICAgICAgYWxzbyB0cnkgdG8gcmVhZCB0aGUgYWRkcmVzcyBmcm9tIHRoZSBYIFdpbmRvdyBTeXN0ZW0gcm9vdAorICAgICAgICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBsb2dpbiBzZXNzaW9uIG1lc3NhZ2UgYnVzIGlzIGdpdmVuIAorICAgICAgICAgIGluIHRoZSA8bGl0ZXJhbD5EQlVTX1NFU1NJT05fQlVTX0FERFJFU1M8L2xpdGVyYWw+IGVudmlyb25tZW50IAorICAgICAgICAgIHZhcmlhYmxlLiBJZiB0aGF0IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFwcGxpY2F0aW9ucyBtYXkgCisgICAgICAgICAgYWxzbyB0cnkgdG8gcmVhZCB0aGUgYWRkcmVzcyBmcm9tIHRoZSBYIFdpbmRvdyBTeXN0ZW0gcm9vdCAKICAgICAgICAgICB3aW5kb3cgcHJvcGVydHkgPGxpdGVyYWw+X0RCVVNfU0VTU0lPTl9CVVNfQUREUkVTUzwvbGl0ZXJhbD4uCiAgICAgICAgICAgVGhlIHJvb3Qgd2luZG93IHByb3BlcnR5IG11c3QgaGF2ZSB0eXBlIDxsaXRlcmFsPlNUUklORzwvbGl0ZXJhbD4uCi0gICAgICAgICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHNob3VsZCBoYXZlIHByZWNlZGVuY2Ugb3ZlciB0aGUKKyAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoZSAKICAgICAgICAgICByb290IHdpbmRvdyBwcm9wZXJ0eS4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT5UaGUgYWRkcmVzcyBvZiB0aGUgbG9naW4gc2Vzc2lvbiBtZXNzYWdlIGJ1cyBpcyBnaXZlbiBpbiB0aGUKQEAgLTUyMTksMTQgKzUzMDYsMTggQEAKICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdDQ+CiAgICAgICAgIDxzZWN0ND4KLSAgICAgICAgICA8dGl0bGU+RmluZGluZyBzZXNzaW9uIHNlcnZpY2VzPC90aXRsZT4KKyAgICAgICAgICA8dGl0bGU+PC90aXRsZT4KICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIE9uIFVuaXggc3lzdGVtcywgdGhlIHNlc3Npb24gYnVzIHNob3VsZCBzZWFyY2ggZm9yIC5zZXJ2aWNlIGZpbGVzCiAgICAgICAgICAgICBpbiA8bGl0ZXJhbD4kWERHX0RBVEFfRElSUy9kYnVzLTEvc2VydmljZXM8L2xpdGVyYWw+IGFzIGRlZmluZWQKICAgICAgICAgICAgIGJ5IHRoZQogICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbCI+WERHIEJhc2UgRGlyZWN0b3J5IFNwZWNpZmljYXRpb248L3VsaW5rPi4KLSAgICAgICAgICAgIEltcGxlbWVudGF0aW9ucyBtYXkgYWxzbyBzZWFyY2ggYWRkaXRpb25hbCBsb2NhdGlvbnMsCi0gICAgICAgICAgICB3aXRoIGEgaGlnaGVyIG9yIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIFhERyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9ucyBtYXkgYWxzbyBzZWFyY2ggYWRkaXRpb25hbCBsb2NhdGlvbnMsIHdoaWNoCisgICAgICAgICAgICBzaG91bGQgYmUgc2VhcmNoZWQgd2l0aCBsb3dlciBwcmlvcml0eSB0aGFuIGFueXRoaW5nIGluCisgICAgICAgICAgICBYREdfREFUQV9IT01FLCBYREdfREFUQV9ESVJTIG9yIHRoZWlyIHJlc3BlY3RpdmUgZGVmYXVsdHM7CisgICAgICAgICAgICBmb3IgZXhhbXBsZSwgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhbHNvCisgICAgICAgICAgICBsb29rcyBpbiA8bGl0ZXJhbD4ke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlczwvbGl0ZXJhbD4gYXMKKyAgICAgICAgICAgIHNldCBhdCBjb21waWxlIHRpbWUuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZSBYREcgQmFzZSBEaXJlY3RvcnkgU3BlY2lmaWNhdGlvbiwgc29mdHdhcmUKQEAgLTUyNDQsMTkgKzUzMzUsMTkgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgQSBjb21wdXRlciBtYXkgaGF2ZSBhIDxmaXJzdHRlcm0+c3lzdGVtIG1lc3NhZ2UgYnVzPC9maXJzdHRlcm0+LAogICAgICAgICAgIGFjY2Vzc2libGUgdG8gYWxsIGFwcGxpY2F0aW9ucyBvbiB0aGUgc3lzdGVtLiBUaGlzIG1lc3NhZ2UgYnVzIG1heSBiZQotICAgICAgICAgIHVzZWQgdG8gYnJvYWRjYXN0IHN5c3RlbSBldmVudHMsIHN1Y2ggYXMgYWRkaW5nIG5ldyBoYXJkd2FyZSBkZXZpY2VzLAorICAgICAgICAgIHVzZWQgdG8gYnJvYWRjYXN0IHN5c3RlbSBldmVudHMsIHN1Y2ggYXMgYWRkaW5nIG5ldyBoYXJkd2FyZSBkZXZpY2VzLCAKICAgICAgICAgICBjaGFuZ2VzIGluIHRoZSBwcmludGVyIHF1ZXVlLCBhbmQgc28gZm9ydGguCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHN5c3RlbSBtZXNzYWdlIGJ1cyBpcyBnaXZlbgotICAgICAgICAgIGluIHRoZSA8bGl0ZXJhbD5EQlVTX1NZU1RFTV9CVVNfQUREUkVTUzwvbGl0ZXJhbD4gZW52aXJvbm1lbnQKLSAgICAgICAgICB2YXJpYWJsZS4gSWYgdGhhdCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhcHBsaWNhdGlvbnMgc2hvdWxkIHRyeQorICAgICAgICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBzeXN0ZW0gbWVzc2FnZSBidXMgaXMgZ2l2ZW4gCisgICAgICAgICAgaW4gdGhlIDxsaXRlcmFsPkRCVVNfU1lTVEVNX0JVU19BRERSRVNTPC9saXRlcmFsPiBlbnZpcm9ubWVudCAKKyAgICAgICAgICB2YXJpYWJsZS4gSWYgdGhhdCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhcHBsaWNhdGlvbnMgc2hvdWxkIHRyeSAKICAgICAgICAgICB0byBjb25uZWN0IHRvIHRoZSB3ZWxsLWtub3duIGFkZHJlc3MKICAgICAgICAgICA8bGl0ZXJhbD51bml4OnBhdGg9L3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldDwvbGl0ZXJhbD4uCiAgICAgICAgICAgPGZvb3Rub3RlPgogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgIFRoZSBELUJ1cyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgaG9ub3JzIHRoZQotICAgICAgICAgICAgICA8bGl0ZXJhbD4kKGxvY2Fsc3RhdGVkaXIpPC9saXRlcmFsPiBjb25maWd1cmUgb3B0aW9uCisgICAgICAgICAgICAgIFRoZSBELUJ1cyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgaG9ub3JzIHRoZSAKKyAgICAgICAgICAgICAgPGxpdGVyYWw+JChsb2NhbHN0YXRlZGlyKTwvbGl0ZXJhbD4gY29uZmlndXJlIG9wdGlvbiAKICAgICAgICAgICAgICAgZm9yIHRoaXMgYWRkcmVzcywgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciBzaWRlLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgIDwvZm9vdG5vdGU+CkBAIC01Mjk2LDMzICs1Mzg3LDcgQEAKICAgICAgIDx0aXRsZT5NZXNzYWdlIEJ1cyBNZXNzYWdlczwvdGl0bGU+CiAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIHNwZWNpYWwgbWVzc2FnZSBidXMgbmFtZSA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1czwvbGl0ZXJhbD4KLSAgICAgICAgcmVzcG9uZHMgdG8gYSBudW1iZXIgb2YgYWRkaXRpb25hbCBtZXNzYWdlcyBhdCB0aGUgb2JqZWN0IHBhdGgKLSAgICAgICAgPGxpdGVyYWw+L29yZy9mcmVlZGVza3RvcC9EQnVzPC9saXRlcmFsPi4KLSAgICAgICAgVGhhdCBvYmplY3QgcGF0aCBpcyBhbHNvIHVzZWQgd2hlbiBlbWl0dGluZyB0aGUKLSAgICAgICAgPHhyZWYgbGlua2VuZD0nYnVzLW1lc3NhZ2VzLW5hbWUtb3duZXItY2hhbmdlZCcvPiBzaWduYWwuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzb21lIG9mIHRoZSBtZXRob2RzIGluIHRoZQotICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1czwvbGl0ZXJhbD4gaW50ZXJmYWNlIGFyZSBhdmFpbGFibGUKLSAgICAgICAgb24gbXVsdGlwbGUgb2JqZWN0IHBhdGhzLiBNZXNzYWdlIGJ1cyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkCi0gICAgICAgIGFjY2VwdCBtZXRob2QgY2FsbHMgdGhhdCB3ZXJlIGFkZGVkIGJlZm9yZSBzcGVjaWZpY2F0aW9uIHZlcnNpb24KLSAgICAgICAgMC4yNiBvbiBhbnkgb2JqZWN0IHBhdGguIE1lc3NhZ2UgYnVzIGltcGxlbWVudGF0aW9ucyBzaG91bGQKLSAgICAgICAgbm90IGFjY2VwdCBuZXdlciBtZXRob2QgY2FsbHMgb24gdW5leHBlY3RlZCBvYmplY3QgcGF0aHMsCi0gICAgICAgIGFuZCBhcyBhIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlLCBvbGRlciBtZXRob2QgY2FsbHMKLSAgICAgICAgdGhhdCBhcmUgc2VjdXJpdHktc2Vuc2l0aXZlIG1heSBiZSByZWplY3RlZCB3aXRoIHRoZSBlcnJvcgotICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5FcnJvci5BY2Nlc3NEZW5pZWQ8L2xpdGVyYWw+IHdoZW4KLSAgICAgICAgY2FsbGVkIG9uIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IHBhdGguIENsaWVudCBzb2Z0d2FyZSBzaG91bGQgc2VuZAotICAgICAgICBhbGwgbWV0aG9kIGNhbGxzIHRvIDxsaXRlcmFsPi9vcmcvZnJlZWRlc2t0b3AvREJ1czwvbGl0ZXJhbD4KLSAgICAgICAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoaXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgbWV0aG9kIGNhbGxzIGxpc3RlZCBiZWxvdywgdGhlIG1lc3NhZ2UgYnVzCi0gICAgICAgIHNob3VsZCBpbXBsZW1lbnQgdGhlIHN0YW5kYXJkIEludHJvc3BlY3RhYmxlLCBQcm9wZXJ0aWVzIGFuZCBQZWVyCi0gICAgICAgIGludGVyZmFjZXMgKHNlZSA8eHJlZiBsaW5rZW5kPSJzdGFuZGFyZC1pbnRlcmZhY2VzIi8+KS4KLSAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFByb3BlcnRpZXMgYW5kIFBlZXIgaW50ZXJmYWNlcyB3YXMgYWRkZWQgaW4gdmVyc2lvbgotICAgICAgICAxLjExLnggb2YgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBidXMuCisgICAgICAgIHJlc3BvbmRzIHRvIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbWVzc2FnZXMuCiAgICAgICA8L3BhcmE+CiAKICAgICAgIDxzZWN0MyBpZD0iYnVzLW1lc3NhZ2VzLWhlbGxvIj4KQEAgLTUzNjMsMzk2ICs1NDI4LDEwIEBACiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyAiZGlzY29ubmVjdCIgcmVxdWVzdDsgaWYgYSBjbGllbnQgd2lzaGVzIHRvCi0gICAgICAgICAgZGlzY29ubmVjdCBmcm9tIHRoZSBidXMsIGl0IHNpbXBseSBjbG9zZXMgdGhlIHNvY2tldCAob3Igb3RoZXIKKyAgICAgICAgICBkaXNjb25uZWN0IGZyb20gdGhlIGJ1cywgaXQgc2ltcGx5IGNsb3NlcyB0aGUgc29ja2V0IChvciBvdGhlciAKICAgICAgICAgICBjb21tdW5pY2F0aW9uIGNoYW5uZWwpLgogICAgICAgICA8L3BhcmE+CiAgICAgICA8L3NlY3QzPgotCi0gICAgICA8c2VjdDMgaWQ9ImJ1cy1tZXNzYWdlcy1yZXF1ZXN0LW5hbWUiPgotICAgICAgICA8dGl0bGU+PGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUmVxdWVzdE5hbWU8L2xpdGVyYWw+PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXMgYSBtZXRob2Q6Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotICAgICAgICAgICAgVUlOVDMyIFJlcXVlc3ROYW1lIChpbiBTVFJJTkcgbmFtZSwgaW4gVUlOVDMyIGZsYWdzKQotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6Ci0gICAgICAgICAgPGluZm9ybWFsdGFibGU+Ci0gICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgotICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5Bcmd1bWVudDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4wPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5TVFJJTkc8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5hbWUgdG8gcmVxdWVzdDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4xPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5VSU5UMzI8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkZsYWdzPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDwvdGdyb3VwPgotICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KLSAgICAgICAgICBSZXBseSBhcmd1bWVudHM6Ci0gICAgICAgICAgPGluZm9ybWFsdGFibGU+Ci0gICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgotICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5Bcmd1bWVudDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4wPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5VSU5UMzI8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlJldHVybiB2YWx1ZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICA8L3Rncm91cD4KLSAgICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXNrIHRoZSBtZXNzYWdlIGJ1cyB0byBhc3NpZ24gdGhlIGdpdmVuIG5hbWUgdG8gdGhlIG1ldGhvZCBjYWxsZXIuIEVhY2gKLSAgICAgICAgICBuYW1lIG1haW50YWlucyBhIHF1ZXVlIG9mIHBvc3NpYmxlIG93bmVycywgd2hlcmUgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGlzCi0gICAgICAgICAgdGhlIHByaW1hcnkgb3IgY3VycmVudCBvd25lciBvZiB0aGUgbmFtZS4gRWFjaCBwb3RlbnRpYWwgb3duZXIgaW4gdGhlCi0gICAgICAgICAgcXVldWUgbWFpbnRhaW5zIHRoZSBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCBhbmQKLSAgICAgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUgc2V0dGluZ3MgZnJvbSBpdHMgbGF0ZXN0IFJlcXVlc3ROYW1lIGNhbGwuCi0gICAgICAgICAgV2hlbiBSZXF1ZXN0TmFtZSBpcyBpbnZva2VkIHRoZSBmb2xsb3dpbmcgb2NjdXJzOgotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHRoZSBtZXRob2QgY2FsbGVyIGlzIGN1cnJlbnRseSB0aGUgcHJpbWFyeSBvd25lciBvZiB0aGUgbmFtZSwKLSAgICAgICAgICAgICAgICB0aGUgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQgYW5kIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRQotICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwsCi0gICAgICAgICAgICAgICAgYW5kIG5vdGhpbmcgZnVydGhlciBoYXBwZW5zLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IHByaW1hcnkgb3duZXIgKGhlYWQgb2YgdGhlIHF1ZXVlKSBoYXMKLSAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCBzZXQsIGFuZCB0aGUgUmVxdWVzdE5hbWUKLSAgICAgICAgICAgICAgICBpbnZvY2F0aW9uIGhhcyB0aGUgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBmbGFnLCB0aGVuCi0gICAgICAgICAgICAgICAgdGhlIGNhbGxlciBvZiBSZXF1ZXN0TmFtZSByZXBsYWNlcyB0aGUgY3VycmVudCBwcmltYXJ5IG93bmVyIGF0Ci0gICAgICAgICAgICAgICAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGFuZCB0aGUgY3VycmVudCBwcmltYXJ5IG93bmVyIG1vdmVzIHRvIHRoZQotICAgICAgICAgICAgICAgIHNlY29uZCBwb3NpdGlvbiBpbiB0aGUgcXVldWUuIElmIHRoZSBjYWxsZXIgb2YgUmVxdWVzdE5hbWUgd2FzCi0gICAgICAgICAgICAgICAgaW4gdGhlIHF1ZXVlIHByZXZpb3VzbHkgaXRzIGZsYWdzIGFyZSB1cGRhdGVkIHdpdGggdGhlIHZhbHVlcyBmcm9tCi0gICAgICAgICAgICAgICAgdGhlIG5ldyBSZXF1ZXN0TmFtZSBpbiBhZGRpdGlvbiB0byBtb3ZpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHJlcGxhY2VtZW50IGlzIG5vdCBwb3NzaWJsZSwgYW5kIHRoZSBtZXRob2QgY2FsbGVyIGlzCi0gICAgICAgICAgICAgICAgY3VycmVudGx5IGluIHRoZSBxdWV1ZSBidXQgbm90IHRoZSBwcmltYXJ5IG93bmVyLCBpdHMgZmxhZ3MgYXJlCi0gICAgICAgICAgICAgICAgdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgbmV3IFJlcXVlc3ROYW1lIGNhbGwuCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgcmVwbGFjZW1lbnQgaXMgbm90IHBvc3NpYmxlLCBhbmQgdGhlIG1ldGhvZCBjYWxsZXIgaXMKLSAgICAgICAgICAgICAgICBjdXJyZW50bHkgbm90IGluIHRoZSBxdWV1ZSwgdGhlIG1ldGhvZCBjYWxsZXIgaXMgYXBwZW5kZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgcXVldWUuCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgYW55IGNvbm5lY3Rpb24gaW4gdGhlIHF1ZXVlIGhhcyBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUKLSAgICAgICAgICAgICAgICBzZXQgYW5kIGlzIG5vdCB0aGUgcHJpbWFyeSBvd25lciwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZQotICAgICAgICAgICAgICAgIHF1ZXVlLiBUaGlzIGNhbiBhcHBseSB0byB0aGUgcHJldmlvdXMgcHJpbWFyeSBvd25lciAoaWYgaXQKLSAgICAgICAgICAgICAgICB3YXMgcmVwbGFjZWQpIG9yIHRoZSBtZXRob2QgY2FsbGVyIChpZiBpdCB1cGRhdGVkIHRoZQotICAgICAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSBmbGFnIHdoaWxlIHN0aWxsIHN0dWNrIGluIHRoZQotICAgICAgICAgICAgICAgIHF1ZXVlLCBvciBpZiBpdCB3YXMganVzdCBhZGRlZCB0byB0aGUgcXVldWUgd2l0aCB0aGF0IGZsYWcgc2V0KS4KLSAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBOb3RlIHRoYXQgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyByZXN1bHRzIGluICJqdW1waW5nIHRoZQotICAgICAgICAgIHF1ZXVlLCIgZXZlbiBpZiBhbm90aGVyIGFwcGxpY2F0aW9uIGFscmVhZHkgaW4gdGhlIHF1ZXVlIGhhZCBzcGVjaWZpZWQKLSAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HLiAgVGhpcyBjb21lcyB1cCBpZiBhIHByaW1hcnkgb3duZXIKLSAgICAgICAgICB0aGF0IGRvZXMgbm90IGFsbG93IHJlcGxhY2VtZW50IGdvZXMgYXdheSwgYW5kIHRoZSBuZXh0IHByaW1hcnkgb3duZXIKLSAgICAgICAgICBkb2VzIGFsbG93IHJlcGxhY2VtZW50LiBJbiB0aGlzIGNhc2UsIHF1ZXVlZCBpdGVtcyB0aGF0IHNwZWNpZmllZAotICAgICAgICAgIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgPGVtcGhhc2lzPmRvIG5vdDwvZW1waGFzaXM+Ci0gICAgICAgICAgYXV0b21hdGljYWxseSByZXBsYWNlIHRoZSBuZXcgcHJpbWFyeSBvd25lci4gSW4gb3RoZXIgd29yZHMsCi0gICAgICAgICAgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORyBpcyBub3Qgc2F2ZWQsIGl0IGlzIG9ubHkgdXNlZCBhdCB0aGUKLSAgICAgICAgICB0aW1lIFJlcXVlc3ROYW1lIGlzIGNhbGxlZC4gVGhpcyBpcyBkZWxpYmVyYXRlIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AKLSAgICAgICAgICBhbnl0aW1lIHR3byBhcHBsaWNhdGlvbnMgYXJlIGJvdGggREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQKLSAgICAgICAgICBhbmQgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgZmxhZ3MgYXJndW1lbnQgY29udGFpbnMgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGxvZ2ljYWxseSBPUmVkCi0gICAgICAgICAgdG9nZXRoZXI6Ci0KLSAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KLSAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+Ci0gICAgICAgICAgICAgIDx0aGVhZD4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkNvbnZlbnRpb25hbCBOYW1lPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5WYWx1ZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+MHgxPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4KLQotICAgICAgICAgICAgICAgICAgICBJZiBhbiBhcHBsaWNhdGlvbiBBIHNwZWNpZmllcyB0aGlzIGZsYWcgYW5kIHN1Y2NlZWRzIGluCi0gICAgICAgICAgICAgICAgICAgIGJlY29taW5nIHRoZSBvd25lciBvZiB0aGUgbmFtZSwgYW5kIGFub3RoZXIgYXBwbGljYXRpb24gQgotICAgICAgICAgICAgICAgICAgICBsYXRlciBjYWxscyBSZXF1ZXN0TmFtZSB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HIGZsYWcsIHRoZW4gYXBwbGljYXRpb24gQQotICAgICAgICAgICAgICAgICAgICB3aWxsIGxvc2Ugb3duZXJzaGlwIGFuZCByZWNlaXZlIGEKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuTmFtZUxvc3Q8L2xpdGVyYWw+IHNpZ25hbCwgYW5kCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIEIgd2lsbCBiZWNvbWUgdGhlIG5ldyBvd25lci4gSWYgREJVU19OQU1FX0ZMQUdfQUxMT1dfUkVQTEFDRU1FTlQKLSAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCBieSBhcHBsaWNhdGlvbiBBLCBvciBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HCi0gICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQgYnkgYXBwbGljYXRpb24gQiwgdGhlbiBhcHBsaWNhdGlvbiBCIHdpbGwgbm90IHJlcGxhY2UKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gQSBhcyB0aGUgb3duZXIuCi0KLSAgICAgICAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4weDI8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PgotCi0gICAgICAgICAgICAgICAgICAgIFRyeSB0byByZXBsYWNlIHRoZSBjdXJyZW50IG93bmVyIGlmIHRoZXJlIGlzIG9uZS4gSWYgdGhpcwotICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIG5vdCBzZXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgb25seSBiZWNvbWUgdGhlIG93bmVyIG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgb3duZXIuIElmIHRoaXMgZmxhZyBpcyBzZXQsCi0gICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgb3duZXIgaWYKLSAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgb3duZXIgc3BlY2lmaWVkIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5ULgotCi0gICAgICAgICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19OQU1FX0ZMQUdfRE9fTk9UX1FVRVVFPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4weDQ8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PgotCi0gICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgdGhpcyBmbGFnLCBpZiBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBhIG5hbWUgdGhhdCBpcwotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IG93bmVkLCB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwbGFjZWQgaW4gYSBxdWV1ZSB0bwotICAgICAgICAgICAgICAgICAgICBvd24gdGhlIG5hbWUgd2hlbiB0aGUgY3VycmVudCBvd25lciBnaXZlcyBpdCB1cC4gSWYgdGhpcwotICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGdpdmVuLCB0aGUgYXBwbGljYXRpb24gd2lsbCBub3QgYmUgcGxhY2VkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBxdWV1ZSwgdGhlIHJlcXVlc3QgZm9yIHRoZSBuYW1lIHdpbGwgc2ltcGx5IGZhaWwuICBUaGlzIGZsYWcKLSAgICAgICAgICAgICAgICAgICAgYWxzbyBhZmZlY3RzIGJlaGF2aW9yIHdoZW4gYW4gYXBwbGljYXRpb24gaXMgcmVwbGFjZWQgYXMKLSAgICAgICAgICAgICAgICAgICAgbmFtZSBvd25lcjsgYnkgZGVmYXVsdCB0aGUgYXBwbGljYXRpb24gbW92ZXMgYmFjayBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIHF1ZXVlLCB1bmxlc3MgdGhpcyBmbGFnIHdhcyBwcm92aWRlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBiZWNhbWUgdGhlIG5hbWUgb3duZXIuCi0KLSAgICAgICAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICA8L3Rncm91cD4KLSAgICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0KLSAgICAgICAgICBUaGUgcmV0dXJuIGNvZGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLQotICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgotICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KLSAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+Q29udmVudGlvbmFsIE5hbWU8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlZhbHVlPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGhlYWQ+Ci0gICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfUkVRVUVTVF9OQU1FX1JFUExZX1BSSU1BUllfT1dORVI8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PjE8L2VudHJ5PiA8ZW50cnk+VGhlIGNhbGxlciBpcyBub3cgdGhlIHByaW1hcnkgb3duZXIgb2YKLSAgICAgICAgICAgICAgICAgIHRoZSBuYW1lLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIG93bmVyLiBFaXRoZXIgdGhlIG5hbWUgaGFkIG5vCi0gICAgICAgICAgICAgICAgICBvd25lciBiZWZvcmUsIG9yIHRoZSBjYWxsZXIgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19SRVBMQUNFX0VYSVNUSU5HIGFuZCB0aGUgY3VycmVudCBvd25lciBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0FMTE9XX1JFUExBQ0VNRU5ULjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9JTl9RVUVVRTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+MjwvZW50cnk+Ci0KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgbmFtZSBhbHJlYWR5IGhhZCBhbiBvd25lciwKLSAgICAgICAgICAgICAgICAgICAgREJVU19OQU1FX0ZMQUdfRE9fTk9UX1FVRVVFIHdhcyBub3Qgc3BlY2lmaWVkLCBhbmQgZWl0aGVyCi0gICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IG93bmVyIGRpZCBub3Qgc3BlY2lmeQotICAgICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCBvciB0aGUgcmVxdWVzdGluZwotICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkaWQgbm90IHNwZWNpZnkgREJVU19OQU1FX0ZMQUdfUkVQTEFDRV9FWElTVElORy4KLSAgICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfUkVRVUVTVF9OQU1FX1JFUExZX0VYSVNUUzwvZW50cnk+IDxlbnRyeT4zPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgbmFtZSBhbHJlYWR5IGhhcyBhbiBvd25lciwKLSAgICAgICAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSB3YXMgc3BlY2lmaWVkLCBhbmQgZWl0aGVyCi0gICAgICAgICAgICAgICAgICBEQlVTX05BTUVfRkxBR19BTExPV19SRVBMQUNFTUVOVCB3YXMgbm90IHNwZWNpZmllZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgIGN1cnJlbnQgb3duZXIsIG9yIERCVVNfTkFNRV9GTEFHX1JFUExBQ0VfRVhJU1RJTkcgd2FzIG5vdAotICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSByZXF1ZXN0aW5nIGFwcGxpY2F0aW9uLjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9BTFJFQURZX09XTkVSPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT40PC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgYXBwbGljYXRpb24gdHJ5aW5nIHRvIHJlcXVlc3Qgb3duZXJzaGlwIG9mIGEgbmFtZSBpcyBhbHJlYWR5IHRoZSBvd25lciBvZiBpdC48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgPC90Z3JvdXA+Ci0gICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9zZWN0Mz4KLQotICAgICAgIDxzZWN0MyBpZD0iYnVzLW1lc3NhZ2VzLXJlbGVhc2UtbmFtZSI+Ci0gICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5SZWxlYXNlTmFtZTwvbGl0ZXJhbD48L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBcyBhIG1ldGhvZDoKLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgICBVSU5UMzIgUmVsZWFzZU5hbWUgKGluIFNUUklORyBuYW1lKQotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6Ci0gICAgICAgICAgPGluZm9ybWFsdGFibGU+Ci0gICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgotICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5Bcmd1bWVudDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4wPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5TVFJJTkc8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5hbWUgdG8gcmVsZWFzZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICA8L3Rncm91cD4KLSAgICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0gICAgICAgICAgUmVwbHkgYXJndW1lbnRzOgotICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgotICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KLSAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+QXJndW1lbnQ8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGU8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgPC90aGVhZD4KLSAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+MDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VUlOVDMyPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5SZXR1cm4gdmFsdWU8L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgPC90Z3JvdXA+Ci0gICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzayB0aGUgbWVzc2FnZSBidXMgdG8gcmVsZWFzZSB0aGUgbWV0aG9kIGNhbGxlcidzIGNsYWltIHRvIHRoZSBnaXZlbgotICAgICAgICAgIG5hbWUuIElmIHRoZSBjYWxsZXIgaXMgdGhlIHByaW1hcnkgb3duZXIsIGEgbmV3IHByaW1hcnkgb3duZXIgd2lsbCBiZQotICAgICAgICAgIHNlbGVjdGVkIGZyb20gdGhlIHF1ZXVlIGlmIGFueSBvdGhlciBvd25lcnMgYXJlIHdhaXRpbmcuIElmIHRoZQotICAgICAgICAgIGNhbGxlciBpcyB3YWl0aW5nIGluIHRoZSBxdWV1ZSBmb3IgdGhlIG5hbWUsIHRoZSBjYWxsZXIgd2lsbCByZW1vdmVkCi0gICAgICAgICAgZnJvbSB0aGUgcXVldWUgYW5kIHdpbGwgbm90IGJlIG1hZGUgYW4gb3duZXIgb2YgdGhlIG5hbWUgaWYgaXQgbGF0ZXIKLSAgICAgICAgICBiZWNvbWVzIGF2YWlsYWJsZS4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIG93bmVycyBpbiB0aGUgcXVldWUgZm9yIHRoZQotICAgICAgICAgIG5hbWUsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBidXMgZW50aXJlbHkuCi0KLSAgICAgICAgICBUaGUgcmV0dXJuIGNvZGUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLQotICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgotICAgICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KLSAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+Q29udmVudGlvbmFsIE5hbWU8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlZhbHVlPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGhlYWQ+Ci0gICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICA8cm93PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PkRCVVNfUkVMRUFTRV9OQU1FX1JFUExZX1JFTEVBU0VEPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4xPC9lbnRyeT4gPGVudHJ5PlRoZSBjYWxsZXIgaGFzIHJlbGVhc2VkIGhpcyBjbGFpbSBvbgotICAgICAgICAgICAgICAgICAgdGhlIGdpdmVuIG5hbWUuIEVpdGhlciB0aGUgY2FsbGVyIHdhcyB0aGUgcHJpbWFyeSBvd25lciBvZgotICAgICAgICAgICAgICAgICAgdGhlIG5hbWUsIGFuZCB0aGUgbmFtZSBpcyBub3cgdW51c2VkIG9yIHRha2VuIGJ5IHNvbWVib2R5Ci0gICAgICAgICAgICAgICAgICB3YWl0aW5nIGluIHRoZSBxdWV1ZSBmb3IgdGhlIG5hbWUsIG9yIHRoZSBjYWxsZXIgd2FzIHdhaXRpbmcKLSAgICAgICAgICAgICAgICAgIGluIHRoZSBxdWV1ZSBmb3IgdGhlIG5hbWUgYW5kIGhhcyBub3cgYmVlbiByZW1vdmVkIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICBxdWV1ZS48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19SRUxFQVNFX05BTUVfUkVQTFlfTk9OX0VYSVNURU5UPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4yPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIGJ1cy48L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+REJVU19SRUxFQVNFX05BTUVfUkVQTFlfTk9UX09XTkVSPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4zPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5UaGUgY2FsbGVyIHdhcyBub3QgdGhlIHByaW1hcnkgb3duZXIgb2YgdGhpcyBuYW1lLAotICAgICAgICAgICAgICAgICAgYW5kIHdhcyBhbHNvIG5vdCB3YWl0aW5nIGluIHRoZSBxdWV1ZSB0byBvd24gdGhpcyBuYW1lLjwvZW50cnk+Ci0gICAgICAgICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICA8L3Rncm91cD4KLSAgICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICA8L3NlY3QzPgotCi0gICAgICAgPHNlY3QzIGlkPSJidXMtbWVzc2FnZXMtbGlzdC1xdWV1ZWQtb3duZXJzIj4KLSAgICAgICAgPHRpdGxlPjxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLkxpc3RRdWV1ZWRPd25lcnM8L2xpdGVyYWw+PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXMgYSBtZXRob2Q6Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotICAgICAgICAgICAgQVJSQVkgb2YgU1RSSU5HIExpc3RRdWV1ZWRPd25lcnMgKGluIFNUUklORyBuYW1lKQotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgTWVzc2FnZSBhcmd1bWVudHM6Ci0gICAgICAgICAgPGluZm9ybWFsdGFibGU+Ci0gICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgotICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5Bcmd1bWVudDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4wPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5TVFJJTkc8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlRoZSB3ZWxsLWtub3duIGJ1cyBuYW1lIHRvIHF1ZXJ5LCBzdWNoIGFzCi0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmNvbS5leGFtcGxlLmNhcHB1Y2Npbm88L2xpdGVyYWw+PC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDwvdGdyb3VwPgotICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KLSAgICAgICAgICBSZXBseSBhcmd1bWVudHM6Ci0gICAgICAgICAgPGluZm9ybWFsdGFibGU+Ci0gICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgotICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5Bcmd1bWVudDwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+Ci0gICAgICAgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgICAgIDwvcm93PgotICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT4wPC9lbnRyeT4KLSAgICAgICAgICAgICAgICAgIDxlbnRyeT5BUlJBWSBvZiBTVFJJTkc8L2VudHJ5PgotICAgICAgICAgICAgICAgICAgPGVudHJ5PlRoZSB1bmlxdWUgYnVzIG5hbWVzIG9mIGNvbm5lY3Rpb25zIGN1cnJlbnRseSBxdWV1ZWQKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBuYW1lPC9lbnRyeT4KLSAgICAgICAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDwvdGdyb3VwPgotICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBMaXN0IHRoZSBjb25uZWN0aW9ucyBjdXJyZW50bHkgcXVldWVkIGZvciBhIGJ1cyBuYW1lIChzZWUKLSAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJ0ZXJtLXF1ZXVlZC1vd25lciIvPikuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+Ci0KICAgICAgIDxzZWN0MyBpZD0iYnVzLW1lc3NhZ2VzLWxpc3QtbmFtZXMiPgogICAgICAgICA8dGl0bGU+PGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuTGlzdE5hbWVzPC9saXRlcmFsPjwvdGl0bGU+CiAgICAgICAgIDxwYXJhPgpAQCAtNTkwNSw3ICs1NTg0LDcgQEAKICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3duZXIgb2YgYSBuYW1lIGhhcyBjaGFuZ2VkLgotICAgICAgICAgIEl0J3MgYWxzbyB0aGUgc2lnbmFsIHRvIHVzZSB0byBkZXRlY3QgdGhlIGFwcGVhcmFuY2Ugb2YKKyAgICAgICAgICBJdCdzIGFsc28gdGhlIHNpZ25hbCB0byB1c2UgdG8gZGV0ZWN0IHRoZSBhcHBlYXJhbmNlIG9mIAogICAgICAgICAgIG5ldyBuYW1lcyBvbiB0aGUgYnVzLgogICAgICAgICA8L3BhcmE+CiAgICAgICA8L3NlY3QzPgpAQCAtNjAyNSwyNyArNTcwNCw4IEBACiAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgIDwvdGdyb3VwPgogICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0gICAgICAgIFRyaWVzIHRvIGxhdW5jaCB0aGUgZXhlY3V0YWJsZSBhc3NvY2lhdGVkIHdpdGggYSBuYW1lIChzZXJ2aWNlCi0gICAgICAgIGFjdGl2YXRpb24pLCBhcyBhbiBleHBsaWNpdCByZXF1ZXN0LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvCi0gICAgICAgIHJlbHlpbmcgb24gYXV0by1zdGFydGluZy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHNlcnZpY2VzCi0gICAgICAgIGFyZSBhY3RpdmF0ZWQgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYXV0by1zdGFydGluZyBhbmQgZXhwbGljaXQKLSAgICAgICAgYWN0aXZhdGlvbiwgc2VlCi0gICAgICAgIDx4cmVmIGxpbmtlbmQ9Im1lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEl0IGlzIG9mdGVuIHByZWZlcmFibGUgdG8gY2Fycnkgb3V0IGF1dG8tc3RhcnRpbmcKLSAgICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhpcyBtZXRob2QuIFRoaXMgaXMgYmVjYXVzZSBjYWxsaW5nIHRoaXMgbWV0aG9kCi0gICAgICAgICAgaXMgc3ViamVjdCB0byBhCi0gICAgICAgICAgPHVsaW5rIHVybD0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltZV9vZl9jaGVja190b190aW1lX29mX3VzZSI+dGltZS1vZi1jaGVjay90aW1lLW9mLXVzZTwvdWxpbms+Ci0gICAgICAgICAgaXNzdWU6IGlmIGEgY2FsbGVyIGFza3MgdGhlIG1lc3NhZ2UgYnVzIHRvIHN0YXJ0IGEgc2VydmljZSBzbyB0aGF0Ci0gICAgICAgICAgdGhlIHNhbWUgY2FsbGVyIGNhbiBtYWtlIGZvbGxvdy11cCBtZXRob2QgY2FsbHMgdG8gdGhhdCBzZXJ2aWNlLAotICAgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhlIG1lc3NhZ2UgYnVzIHdhcyBhYmxlIHRvIHN0YXJ0IHRoZSByZXF1aXJlZAotICAgICAgICAgIHNlcnZpY2UgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBub3QgaGF2ZSBjcmFzaGVkIG9yIG90aGVyd2lzZQotICAgICAgICAgIGV4aXRlZCBieSB0aGUgdGltZSB0aGUgY2FsbGVyIG1ha2VzIHRob3NlIGZvbGxvdy11cCBtZXRob2QgY2FsbHMuCi0gICAgICAgICAgQXMgYSByZXN1bHQsIGNhbGxpbmcgdGhpcyBtZXRob2QgZG9lcyBub3QgcmVtb3ZlIHRoZSBuZWVkIGZvcgotICAgICAgICAgIHRoZSBjYWxsZXIgdG8gaGFuZGxlIGVycm9ycyBmcm9tIG1ldGhvZCBjYWxscy4gR2l2ZW4gdGhhdCBmYWN0LAotICAgICAgICAgIGl0IGlzIHVzdWFsbHkgc2ltcGxlciB0byByZWx5IG9uIGF1dG8tc3RhcnRpbmcsIGluIHdoaWNoIHRoZQotICAgICAgICAgIHJlcXVpcmVkIHNlcnZpY2Ugc3RhcnRzIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlIGZpcnN0IG1ldGhvZCBjYWxsLgorICAgICAgICAgIFRyaWVzIHRvIGxhdW5jaCB0aGUgZXhlY3V0YWJsZSBhc3NvY2lhdGVkIHdpdGggYSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDx4cmVmIGxpbmtlbmQ9Im1lc3NhZ2UtYnVzLXN0YXJ0aW5nLXNlcnZpY2VzIi8+LgorCiAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNjU3NCw3ICs2MjM0LDcgQEAKICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgIDwvdGdyb3VwPgogICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KLSAgICAgICAgQWRkcyBhIG1hdGNoIHJ1bGUgdG8gbWF0Y2ggbWVzc2FnZXMgZ29pbmcgdGhyb3VnaCB0aGUgbWVzc2FnZSBidXMgKHNlZSA8eHJlZiBsaW5rZW5kPSdtZXNzYWdlLWJ1cy1yb3V0aW5nLW1hdGNoLXJ1bGVzJy8+KS4KKyAgICAgICAgQWRkcyBhIG1hdGNoIHJ1bGUgdG8gbWF0Y2ggbWVzc2FnZXMgZ29pbmcgdGhyb3VnaCB0aGUgbWVzc2FnZSBidXMgKHNlZSA8eHJlZiBsaW5rZW5kPSdtZXNzYWdlLWJ1cy1yb3V0aW5nLW1hdGNoLXJ1bGVzJy8+KS4gCiAgICAgICAgIElmIHRoZSBidXMgZG9lcyBub3QgaGF2ZSBlbm91Z2ggcmVzb3VyY2VzIHRoZSA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5FcnJvci5PT008L2xpdGVyYWw+CiAgICAgICAgIGVycm9yIGlzIHJldHVybmVkLgogICAgICAgIDwvcGFyYT4KQEAgLTY2MDUsNyArNjI2NSw3IEBACiAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICA8L3Rncm91cD4KICAgICAgICAgICA8L2luZm9ybWFsdGFibGU+Ci0gICAgICAgIFJlbW92ZXMgdGhlIGZpcnN0IHJ1bGUgdGhhdCBtYXRjaGVzIChzZWUgPHhyZWYgbGlua2VuZD0nbWVzc2FnZS1idXMtcm91dGluZy1tYXRjaC1ydWxlcycvPikuCisgICAgICAgIFJlbW92ZXMgdGhlIGZpcnN0IHJ1bGUgdGhhdCBtYXRjaGVzIChzZWUgPHhyZWYgbGlua2VuZD0nbWVzc2FnZS1idXMtcm91dGluZy1tYXRjaC1ydWxlcycvPikuIAogICAgICAgICBJZiB0aGUgcnVsZSBpcyBub3QgZm91bmQgdGhlIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLkVycm9yLk1hdGNoUnVsZU5vdEZvdW5kPC9saXRlcmFsPgogICAgICAgICBlcnJvciBpcyByZXR1cm5lZC4KICAgICAgICA8L3BhcmE+CkBAIC02NjM3LDkgKzYyOTcsOSBAQAogICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICA8L3Rncm91cD4KICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgotICAgICAgICBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIGJ1cy4gVGhlIHVuaXF1ZSBJRCBoZXJlIGlzIHNoYXJlZCBhbW9uZyBhbGwgYWRkcmVzc2VzIHRoZQotICAgICAgICBidXMgZGFlbW9uIGlzIGxpc3RlbmluZyBvbiAoVENQLCBVTklYIGRvbWFpbiBzb2NrZXQsIGV0Yy4pIGFuZCBpdHMgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbgotICAgICAgICA8eHJlZiBsaW5rZW5kPSJ1dWlkcyIvPi4gRWFjaCBhZGRyZXNzIHRoZSBidXMgaXMgbGlzdGVuaW5nIG9uIGFsc28gaGFzIGl0cyBvd24gdW5pcXVlCisgICAgICAgIEdldHMgdGhlIHVuaXF1ZSBJRCBvZiB0aGUgYnVzLiBUaGUgdW5pcXVlIElEIGhlcmUgaXMgc2hhcmVkIGFtb25nIGFsbCBhZGRyZXNzZXMgdGhlIAorICAgICAgICBidXMgZGFlbW9uIGlzIGxpc3RlbmluZyBvbiAoVENQLCBVTklYIGRvbWFpbiBzb2NrZXQsIGV0Yy4pIGFuZCBpdHMgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiAKKyAgICAgICAgPHhyZWYgbGlua2VuZD0idXVpZHMiLz4uIEVhY2ggYWRkcmVzcyB0aGUgYnVzIGlzIGxpc3RlbmluZyBvbiBhbHNvIGhhcyBpdHMgb3duIHVuaXF1ZSAKICAgICAgICAgSUQsIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJhZGRyZXNzZXMiLz4uIFRoZSBwZXItYnVzIGFuZCBwZXItYWRkcmVzcyBJRHMgYXJlIG5vdCByZWxhdGVkLgogICAgICAgICBUaGVyZSBpcyBhbHNvIGEgcGVyLW1hY2hpbmUgSUQsIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJzdGFuZGFyZC1pbnRlcmZhY2VzLXBlZXIiLz4gYW5kIHJldHVybmVkCiAgICAgICAgIGJ5IG9yZy5mcmVlZGVza3RvcC5EQnVzLlBlZXIuR2V0TWFjaGluZUlkKCkuCkBAIC02NzM5LDEyMiArNjM5OSw2IEBACiAKICAgICA8L3NlY3QyPgogCi0gICAgPHNlY3QyIGlkPSJtZXNzYWdlLWJ1cy1wcm9wZXJ0aWVzIj4KLSAgICAgIDx0aXRsZT5NZXNzYWdlIEJ1cyBQcm9wZXJ0aWVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgc3BlY2lhbCBtZXNzYWdlIGJ1cyBuYW1lIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9saXRlcmFsPgotICAgICAgICBleHBvcnRzIHNldmVyYWwgcHJvcGVydGllcyAoc2VlCi0gICAgICAgIDx4cmVmIGxpbmtlbmQ9InN0YW5kYXJkLWludGVyZmFjZXMtcHJvcGVydGllcyIvPikgb24gdGhlIG9iamVjdCBwYXRoCi0gICAgICAgIDxsaXRlcmFsPi9vcmcvZnJlZWRlc2t0b3AvREJ1czwvbGl0ZXJhbD4uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxzZWN0MyBpZD0ibWVzc2FnZS1idXMtcHJvcGVydGllcy1mZWF0dXJlcyI+Ci0gICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5GZWF0dXJlczwvbGl0ZXJhbD48L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBcyBhIHByb3BlcnR5OgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICAgIFJlYWQtb25seSBjb25zdGFudCBBUlJBWSBvZiBTVFJJTkcgRmVhdHVyZXMKLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIFRoaXMgcHJvcGVydHkgbGlzdHMgYWJzdHJhY3Qg4oCcZmVhdHVyZXPigJ0gcHJvdmlkZWQgYnkgdGhlIG1lc3NhZ2UKLSAgICAgICAgICBidXMsIGFuZCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGRldGVjdCB0aGUgY2FwYWJpbGl0aWVzCi0gICAgICAgICAgb2YgdGhlIG1lc3NhZ2UgYnVzIHdpdGggd2hpY2ggdGhleSBhcmUgY29tbXVuaWNhdGluZy4KLSAgICAgICAgICBUaGlzIHByb3BlcnR5IHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDEuMTEueCBvZiB0aGUgcmVmZXJlbmNlCi0gICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UgYnVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSXRlbXMgaW4gdGhlIHJldHVybmVkIGFycmF5IG5vdCBjb250YWluaW5nIOKAnC7igJ0gYXJlIGRlZmluZWQKLSAgICAgICAgICBieSB0aGlzIHNwZWNpZmljYXRpb24uIEJ1cyBkYWVtb24gaW1wbGVtZW50b3JzIHdpc2hpbmcgdG8gYWR2ZXJ0aXNlCi0gICAgICAgICAgZmVhdHVyZXMgbm90IG1lbnRpb25lZCBpbiB0aGlzIGRvY3VtZW50IHNob3VsZCBlaXRoZXIgY29udHJpYnV0ZQotICAgICAgICAgIHBhdGNoZXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLCBvciB1c2Uga2V5cyBjb250YWluaW5nIOKAnC7igJ0gYW5kCi0gICAgICAgICAgc3RhcnRpbmcgd2l0aCB0aGVpciBvd24gcmV2ZXJzZWQgZG9tYWluIG5hbWUsIGZvciBleGFtcGxlCi0gICAgICAgICAgPGxpdGVyYWw+Y29tLmV4YW1wbGUuTXlCdXMuU3VibGltaW5hbE1lc3NhZ2VzPC9saXRlcmFsPi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBmZWF0dXJlcyBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24gYXJlIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgPHZhcmlhYmxlbGlzdD4KLQotICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+QXBwQXJtb3I8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICBUaGlzIG1lc3NhZ2UgYnVzIGZpbHRlcnMgbWVzc2FnZXMgdmlhIHRoZQotICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3dpa2kuYXBwYXJtb3IubmV0LyI+QXBwQXJtb3I8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgc2VjdXJpdHkgZnJhbWV3b3JrLiBUaGlzIGZlYXR1cmUgc2hvdWxkIG9ubHkgYmUKLSAgICAgICAgICAgICAgICAgIGFkdmVydGlzZWQgaWYgQXBwQXJtb3IgbWVkaWF0aW9uIGlzIGVuYWJsZWQgYW5kCi0gICAgICAgICAgICAgICAgICBhY3RpdmUgYXQgcnVudGltZTsgbWVyZWx5IGNvbXBpbGluZyBpbiBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgICBmb3IgQXBwQXJtb3Igc2hvdWxkIG5vdCByZXN1bHQgaW4gdGhpcyBmZWF0dXJlIGJlaW5nCi0gICAgICAgICAgICAgICAgICBhZHZlcnRpc2VkIG9uIG1lc3NhZ2UgYnVzIGluc3RhbmNlcyB3aGVyZSBpdCBpcyBkaXNhYmxlZCBieQotICAgICAgICAgICAgICAgICAgbWVzc2FnZSBidXMgb3Igb3BlcmF0aW5nIHN5c3RlbSBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD5TRUxpbnV4PC9saXRlcmFsPjwvdGVybT4KLSAgICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgVGhpcyBtZXNzYWdlIGJ1cyBmaWx0ZXJzIG1lc3NhZ2VzIHZpYSB0aGUKLSAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHBzOi8vc2VsaW51eHByb2plY3Qub3JnLyI+U0VMaW51eDwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICBzZWN1cml0eSBmcmFtZXdvcmsuIFNpbWlsYXIgdG8gPGxpdGVyYWw+YXBwYXJtb3I8L2xpdGVyYWw+LAotICAgICAgICAgICAgICAgICAgdGhpcyBmZWF0dXJlIHNob3VsZCBvbmx5IGJlIGFkdmVydGlzZWQgaWYgU0VMaW51eCBtZWRpYXRpb24KLSAgICAgICAgICAgICAgICAgIGlzIGVuYWJsZWQgYW5kIGFjdGl2ZSBhdCBydW50aW1lIChpZiBTRUxpbnV4IGlzIHBsYWNlZCBpbgotICAgICAgICAgICAgICAgICAgcGVybWlzc2l2ZSBtb2RlLCB0aGF0IGlzIHN0aWxsIGNvbnNpZGVyZWQgdG8gYmUgYWN0aXZlKS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+U3lzdGVtZEFjdGl2YXRpb248L2xpdGVyYWw+PC90ZXJtPgotICAgICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICBXaGVuIGFza2VkIHRvIGFjdGl2YXRlIGEgc2VydmljZSB0aGF0IGhhcyB0aGUKLSAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPlN5c3RlbWRTZXJ2aWNlPC9saXRlcmFsPiBmaWVsZCBpbiBpdHMKLSAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc2VydmljZTwvZmlsZW5hbWU+IGZpbGUsIHRoaXMgbWVzc2FnZSBidXMgd2lsbAotICAgICAgICAgICAgICAgICAgY2Fycnkgb3V0IHN5c3RlbWQgYWN0aXZhdGlvbiAoZm9yIGRldGFpbHMgc2VlCi0gICAgICAgICAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJtZXNzYWdlLWJ1cy1zdGFydGluZy1zZXJ2aWNlcy1zeXN0ZW1kIi8+KS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPgotCi0gICAgICA8c2VjdDMgaWQ9Im1lc3NhZ2UtYnVzLXByb3BlcnRpZXMtaW50ZXJmYWNlcyI+Ci0gICAgICAgIDx0aXRsZT48bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRlcmZhY2VzPC9saXRlcmFsPjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzIGEgcHJvcGVydHk6Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotICAgICAgICAgICAgUmVhZC1vbmx5IGNvbnN0YW50IEFSUkFZIG9mIFNUUklORyBJbnRlcmZhY2VzCi0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICBUaGlzIHByb3BlcnR5IGxpc3RzIGludGVyZmFjZXMgcHJvdmlkZWQgYnkgdGhlCi0gICAgICAgICAgPGxpdGVyYWw+L29yZy9mcmVlZGVza3RvcC9EQnVzPC9saXRlcmFsPiBvYmplY3QsCi0gICAgICAgICAgYW5kIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gZGV0ZWN0IHRoZSBjYXBhYmlsaXRpZXMKLSAgICAgICAgICBvZiB0aGUgbWVzc2FnZSBidXMgd2l0aCB3aGljaCB0aGV5IGFyZSBjb21tdW5pY2F0aW5nLgotICAgICAgICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgSW50cm9zcGVjdGFibGUgaW50ZXJmYWNlLCBxdWVyeWluZyB0aGlzCi0gICAgICAgICAgcHJvcGVydHkgZG9lcyBub3QgcmVxdWlyZSBwYXJzaW5nIFhNTC4KLSAgICAgICAgICBUaGlzIHByb3BlcnR5IHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDEuMTEueCBvZiB0aGUgcmVmZXJlbmNlCi0gICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UgYnVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIHN0YW5kYXJkIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9saXRlcmFsPiBhbmQKLSAgICAgICAgICA8bGl0ZXJhbD5vcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzPC9saXRlcmFsPiBpbnRlcmZhY2VzCi0gICAgICAgICAgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSwgYmVjYXVzZSB0aGVpcgotICAgICAgICAgIHByZXNlbmNlIGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZSBmYWN0IHRoYXQgYSBtZXRob2QgY2FsbCBvbgotICAgICAgICAgIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXM8L2xpdGVyYWw+IGFza2luZyBmb3IKLSAgICAgICAgICBwcm9wZXJ0aWVzIG9mIDxsaXRlcmFsPm9yZy5mcmVlZGVza3RvcC5EQnVzPC9saXRlcmFsPiB3YXMKLSAgICAgICAgICBzdWNjZXNzZnVsLiBUaGUgc3RhbmRhcmQgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuUGVlcjwvbGl0ZXJhbD4KLSAgICAgICAgICBhbmQgPGxpdGVyYWw+b3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGU8L2xpdGVyYWw+Ci0gICAgICAgICAgaW50ZXJmYWNlcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGVpdGhlciwKLSAgICAgICAgICBiZWNhdXNlIHRoZXkgZG8gbm90IGluZGljYXRlIGZlYXR1cmVzIG9mIHRoZSBtZXNzYWdlIGJ1cwotICAgICAgICAgIGltcGxlbWVudGF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPgotICAgIDwvc2VjdDI+Ci0KICAgPC9zZWN0MT4KIDwhLS0KICAgPGFwcGVuZGl4IGlkPSJpbXBsZW1lbnRhdGlvbi1ub3RlcyI+CkBAIC02ODg0LDkgKzY0MjgsOSBAQAogICAgICAgICAgIG5hbWUgaWYgdGhlIG1lc3NhZ2UgYnVzIGhhcyBhc3NvY2lhdGVkIHRoZSBhcHBsaWNhdGlvbidzIGNvbm5lY3Rpb24KICAgICAgICAgICB3aXRoIHRoZSBuYW1lLiAgTmFtZXMgbWF5IGFsc28gaGF2ZSA8Zmlyc3R0ZXJtPnF1ZXVlZAogICAgICAgICAgIG93bmVyczwvZmlyc3R0ZXJtPiAoc2VlIDx4cmVmIGxpbmtlbmQ9InRlcm0tcXVldWVkLW93bmVyIi8+KS4KLSAgICAgICAgICAgIFRoZSBidXMgYXNzaWducyBhIHVuaXF1ZSBuYW1lIHRvIGVhY2ggY29ubmVjdGlvbiwKLSAgICAgICAgICAgIHNlZSA8eHJlZiBsaW5rZW5kPSJ0ZXJtLXVuaXF1ZS1uYW1lIi8+LiBPdGhlciBuYW1lcwotICAgICAgICAgICAgICBjYW4gYmUgdGhvdWdodCBvZiBhcyAid2VsbC1rbm93biBuYW1lcyIgYW5kIGFyZQorICAgICAgICAgICAgVGhlIGJ1cyBhc3NpZ25zIGEgdW5pcXVlIG5hbWUgdG8gZWFjaCBjb25uZWN0aW9uLCAKKyAgICAgICAgICAgIHNlZSA8eHJlZiBsaW5rZW5kPSJ0ZXJtLXVuaXF1ZS1uYW1lIi8+LiBPdGhlciBuYW1lcyAKKyAgICAgICAgICAgICAgY2FuIGJlIHRob3VnaHQgb2YgYXMgIndlbGwta25vd24gbmFtZXMiIGFuZCBhcmUgCiAgICAgICAgICAgICAgIHVzZWQgdG8gZmluZCBhcHBsaWNhdGlvbnMgdGhhdCBvZmZlciBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgogICAgICAgICA8L3BhcmE+CiAKQEAgLTY4OTYsNyArNjQ0MCw3IEBACiAgICAgICAgIDwvcGFyYT4KICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgPC9nbG9zc2VudHJ5PgotCisgICAgICAKICAgICA8Z2xvc3NlbnRyeSBpZD0idGVybS1tZXNzYWdlIj48Z2xvc3N0ZXJtPk1lc3NhZ2U8L2dsb3NzdGVybT4KICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgPHBhcmE+CkBAIC02OTExLDkgKzY0NTUsOSBAQAogICAgIDxnbG9zc2VudHJ5IGlkPSJ0ZXJtLW1lc3NhZ2UtYnVzIj48Z2xvc3N0ZXJtPk1lc3NhZ2UgQnVzPC9nbG9zc3Rlcm0+CiAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBpcyBhIHNwZWNpYWwgYXBwbGljYXRpb24gdGhhdCBmb3J3YXJkcworICAgICAgICAgIFRoZSBtZXNzYWdlIGJ1cyBpcyBhIHNwZWNpYWwgYXBwbGljYXRpb24gdGhhdCBmb3J3YXJkcyAKICAgICAgICAgICBvciByb3V0ZXMgbWVzc2FnZXMgYmV0d2VlbiBhIGdyb3VwIG9mIGFwcGxpY2F0aW9ucwotICAgICAgICAgIGNvbm5lY3RlZCB0byB0aGUgbWVzc2FnZSBidXMuIEl0IGFsc28gbWFuYWdlcworICAgICAgICAgIGNvbm5lY3RlZCB0byB0aGUgbWVzc2FnZSBidXMuIEl0IGFsc28gbWFuYWdlcyAKICAgICAgICAgICA8Zmlyc3R0ZXJtPm5hbWVzPC9maXJzdHRlcm0+IHVzZWQgZm9yIHJvdXRpbmcKICAgICAgICAgICBtZXNzYWdlcy4KICAgICAgICAgPC9wYXJhPgpAQCAtNjkyMyw3ICs2NDY3LDcgQEAKICAgICA8Z2xvc3NlbnRyeSBpZD0idGVybS1uYW1lIj48Z2xvc3N0ZXJtPk5hbWU8L2dsb3NzdGVybT4KICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InRlcm0tYnVzLW5hbWUiLz4uICJOYW1lIiBtYXkKKyAgICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0idGVybS1idXMtbmFtZSIvPi4gIk5hbWUiIG1heSAKICAgICAgICAgICAgIGFsc28gYmUgdXNlZCB0byByZWZlciB0byBzb21lIG9mIHRoZSBvdGhlciBuYW1lcwogICAgICAgICAgICAgaW4gRC1CdXMsIHN1Y2ggYXMgaW50ZXJmYWNlIG5hbWVzLgogICAgICAgICA8L3BhcmE+CkBAIC02OTk2LDkgKzY1NDAsOSBAQAogICAgICAgICAgIEEgc2VydmljZSBpcyBhbiBleGVjdXRhYmxlIHRoYXQgY2FuIGJlIGxhdW5jaGVkIGJ5IHRoZSBidXMgZGFlbW9uLgogICAgICAgICAgIFNlcnZpY2VzIG5vcm1hbGx5IGd1YXJhbnRlZSBzb21lIHBhcnRpY3VsYXIgZmVhdHVyZXMsIGZvciBleGFtcGxlIHRoZXkKICAgICAgICAgICBtYXkgZ3VhcmFudGVlIHRoYXQgdGhleSB3aWxsIHJlcXVlc3QgYSBzcGVjaWZpYyBuYW1lIHN1Y2ggYXMKLSAgICAgICAgICAiY29tLmV4YW1wbGUuU2NyZWVuc2F2ZXIxIiwgaGF2ZSBhIHNpbmdsZXRvbiBvYmplY3QKLSAgICAgICAgICAiL2NvbS9leGFtcGxlL1NjcmVlbnNhdmVyMSIsIGFuZCB0aGF0IG9iamVjdCB3aWxsIGltcGxlbWVudCB0aGUKLSAgICAgICAgICBpbnRlcmZhY2UgImNvbS5leGFtcGxlLlNjcmVlbnNhdmVyMS5Db250cm9sIi4KKyAgICAgICAgICAiY29tLmV4YW1wbGUuU2NyZWVuc2F2ZXIiLCBoYXZlIGEgc2luZ2xldG9uIG9iamVjdAorICAgICAgICAgICIvY29tL2V4YW1wbGUvQXBwbGljYXRpb24iLCBhbmQgdGhhdCBvYmplY3Qgd2lsbCBpbXBsZW1lbnQgdGhlCisgICAgICAgICAgaW50ZXJmYWNlICJjb20uZXhhbXBsZS5TY3JlZW5zYXZlci5Db250cm9sIi4KICAgICAgICAgPC9wYXJhPgogICAgICAgPC9nbG9zc2RlZj4KICAgICA8L2dsb3NzZW50cnk+CmRpZmYgLS1naXQgYS9kb2MvZGJ1cy11dWlkZ2VuLjEgYi9kb2MvZGJ1cy11dWlkZ2VuLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkOGRkMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9kYnVzLXV1aWRnZW4uMQpAQCAtMCwwICsxLDg5IEBACisuXCIgCisuXCIgZGJ1c1wtdXVpZGdlbiBtYW51YWwgcGFnZS4KKy5cIiBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorLlwiCisuVEggZGJ1c1wtdXVpZGdlbiAxCisuU0ggTkFNRQorZGJ1c1wtdXVpZGdlbiBcLSBVdGlsaXR5IHRvIGdlbmVyYXRlIFVVSURzCisuU0ggU1lOT1BTSVMKKy5QUAorLkIgZGJ1c1wtdXVpZGdlbiBbXC1cLXZlcnNpb25dIFtcLVwtZW5zdXJlWz1GSUxFTkFNRV1dIFtcLVwtZ2V0Wz1GSUxFTkFNRV1dCisKKy5TSCBERVNDUklQVElPTgorCitUaGUgXGZJZGJ1c1wtdXVpZGdlblxmUCBjb21tYW5kIGdlbmVyYXRlcyBvciByZWFkcyBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBJRC4KKworLlBQCitOb3RlIHRoYXQgdGhlIERcLUJ1cyBVVUlEIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gUkZDIDQxMjIgYW5kIGRvZXMgbm90IGdlbmVyYXRlCitVVUlEcyBjb21wYXRpYmxlIHdpdGggdGhhdCBzcGVjLiBNYW55IHN5c3RlbXMgaGF2ZSBhIHNlcGFyYXRlIGNvbW1hbmQKK2ZvciB0aGF0IChvZnRlbiBjYWxsZWQgInV1aWRnZW4iKS4KKworLlBQCitTZWUgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGJ1cy8gZm9yIG1vcmUgaW5mb3JtYXRpb24KK2Fib3V0IERcLUJ1cy4KKworLlBQCitUaGUgcHJpbWFyeSB1c2FnZSBvZiBcZklkYnVzXC11dWlkZ2VuXGZQIGlzIHRvIHJ1biBpbiB0aGUgcG9zdFwtaW5zdGFsbAorc2NyaXB0IG9mIGEgRFwtQnVzIHBhY2thZ2UgbGlrZSB0aGlzOgorLm5mCisgIGRidXNcLXV1aWRnZW4gXC1cLWVuc3VyZQorLmZpCisKKy5QUAorVGhpcyB3aWxsIGVuc3VyZSB0aGF0IC92YXIvbGliL2RidXMvbWFjaGluZVwtaWQgZXhpc3RzIGFuZCBoYXMgdGhlIHV1aWQgaW4gaXQuCitJdCB3b24ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdXVpZCwgc2luY2UgdGhpcyBpZCBzaG91bGQgcmVtYWluIGZpeGVkCitmb3IgYSBzaW5nbGUgbWFjaGluZSB1bnRpbCB0aGUgbmV4dCByZWJvb3QgYXQgbGVhc3QuCisKKy5QUAorVGhlIGltcG9ydGFudCBwcm9wZXJ0aWVzIG9mIHRoZSBtYWNoaW5lIFVVSUQgYXJlIHRoYXQgMSkgaXQgcmVtYWlucwordW5jaGFuZ2VkIHVudGlsIHRoZSBuZXh0IHJlYm9vdCBhbmQgMikgaXQgaXMgZGlmZmVyZW50IGZvciBhbnkgdHdvIAorcnVubmluZyBpbnN0YW5jZXMgb2YgdGhlIE9TIGtlcm5lbC4gVGhhdCBpcywgaWYgdHdvIHByb2Nlc3NlcyBzZWUgdGhlIAorc2FtZSBVVUlELCB0aGV5IHNob3VsZCBhbHNvIHNlZSB0aGUgc2FtZSBzaGFyZWQgbWVtb3J5LCBVTklYIGRvbWFpbgorc29ja2V0cywgbG9jYWwgWCBkaXNwbGF5cywgbG9jYWxob3N0LmxvY2FsZG9tYWluIHJlc29sdXRpb24sIHByb2Nlc3MKK0lEcywgYW5kIHNvIGZvcnRoLgorCisuUFAKK0lmIHlvdSBydW4gXGZJZGJ1c1wtdXVpZGdlblxmUCB3aXRoIG5vIG9wdGlvbnMgaXQganVzdCBwcmludHMgYSBuZXcgdXVpZCBtYWRlCit1cCBvdXQgb2YgdGhpbiBhaXIuCisKKy5QUAorSWYgeW91IHJ1biBpdCB3aXRoIFwtXC1nZXQsIGl0IHByaW50cyB0aGUgbWFjaGluZSBVVUlEIGJ5IGRlZmF1bHQsIG9yCit0aGUgVVVJRCBpbiB0aGUgc3BlY2lmaWVkIGZpbGUgaWYgeW91IHNwZWNpZnkgYSBmaWxlLgorCisuUFAKK0lmIHlvdSB0cnkgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIG1hY2hpbmVcLWlkIG9uIGEgcnVubmluZyBzeXN0ZW0sIGl0IHdpbGwKK3Byb2JhYmx5IHJlc3VsdCBpbiBiYWQgdGhpbmdzIGhhcHBlbmluZy4gRG9uJ3QgdHJ5IHRvIGNoYW5nZSB0aGlzIGZpbGUuIEFsc28sCitkb24ndCBtYWtlIGl0IHRoZSBzYW1lIG9uIHR3byBkaWZmZXJlbnQgc3lzdGVtczsgaXQgbmVlZHMgdG8gYmUgZGlmZmVyZW50Cithbnl0aW1lIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGtlcm5lbHMgcnVubmluZy4KKworLlBQCitUaGUgVVVJRCBzaG91bGQgYmUgZGlmZmVyZW50IG9uIHR3byBkaWZmZXJlbnQgdmlydHVhbCBtYWNoaW5lcywKK2JlY2F1c2UgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQga2VybmVscy4KKworLlNIIE9QVElPTlMKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOgorLlRQCisuSSAiXC1cLWdldFs9RklMRU5BTUVdIgorSWYgYSBmaWxlbmFtZSBpcyBub3QgZ2l2ZW4sIGRlZmF1bHRzIHRvIGxvY2Fsc3RhdGVkaXIvbGliL2RidXMvbWFjaGluZVwtaWQKKyhsb2NhbHN0YXRlZGlyIGlzIHVzdWFsbHkgL3ZhcikuIElmIHRoaXMgZmlsZSBleGlzdHMgYW5kIGlzIHZhbGlkLCB0aGUKK3V1aWQgaW4gdGhlIGZpbGUgaXMgcHJpbnRlZCBvbiBzdGRvdXQuIE90aGVyd2lzZSwgdGhlIGNvbW1hbmQgZXhpdHMgCit3aXRoIGEgbm9uemVybyBzdGF0dXMuCisKKy5UUAorLkkgIlwtXC1lbnN1cmVbPUZJTEVOQU1FXSIKK0lmIGEgZmlsZW5hbWUgaXMgbm90IGdpdmVuLCBkZWZhdWx0cyB0byBsb2NhbHN0YXRlZGlyL2xpYi9kYnVzL21hY2hpbmVcLWlkCisobG9jYWxzdGF0ZWRpciBpcyB1c3VhbGx5IC92YXIpLiBJZiB0aGlzIGZpbGUgZXhpc3RzIHRoZW4gaXQgd2lsbCBiZQordmFsaWRhdGVkLCBhbmQgYSBmYWlsdXJlIGNvZGUgcmV0dXJuZWQgaWYgaXQgY29udGFpbnMgdGhlIHdyb25nIHRoaW5nLgorSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgbmV3IHV1aWQgaW4gaXQuCitPbiBzdWNjZXNzLCBwcmludHMgbm8gb3V0cHV0LgorCisuVFAKKy5JICJcLVwtdmVyc2lvbiIKK1ByaW50IHRoZSB2ZXJzaW9uIG9mIGRidXNcLXV1aWRnZW4KKworLlNIIEFVVEhPUgorU2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvZG9jL0FVVEhPUlMKKworLlNIIEJVR1MKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIHRoZSBEXC1CdXMgbWFpbGluZyBsaXN0IG9yIGJ1ZyB0cmFja2VyLAorc2VlIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvCmRpZmYgLS1naXQgYS9kb2MvZG94eWdlbl90b19kZXZoZWxwLnhzbCBiL2RvYy9kb3h5Z2VuX3RvX2RldmhlbHAueHNsCmluZGV4IGZkMzNiY2UuLjcyMDk4ZjkgMTAwNjQ0Ci0tLSBhL2RvYy9kb3h5Z2VuX3RvX2RldmhlbHAueHNsCisrKyBiL2RvYy9kb3h5Z2VuX3RvX2RldmhlbHAueHNsCkBAIC0xMCwxMyArMTAsNyBAQAogPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CiAgIDxib29rIHRpdGxlPSJELUJ1czogQSBzeXN0ZW0gZm9yIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uIgogICAgICAgICBuYW1lPSJkYnVzIgotICAgICAgICBsaW5rPSJ7JHByZWZpeH0vYXBpL2luZGV4Lmh0bWwiCi0gICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LmRldmhlbHAubmV0L2Jvb2siCi0gICAgICAgIHZlcnNpb249IjIiCi0gICAgICAgIG9ubGluZT0iaHR0cHM6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9kb2MvIgotICAgICAgICBhdXRob3I9IkQtQnVzIGNvbnRyaWJ1dG9ycyIKLSAgICAgICAgbGFuZ3VhZ2U9ImMiCi0gICAgICAgID4KKyAgICAgICAgbGluaz0iZGJ1cy10dXRvcmlhbC5odG1sIj4KICAgPGNoYXB0ZXJzPgogICAgICA8c3ViIG5hbWU9IlR1dG9yaWFsIiBsaW5rPSJ7JHByZWZpeH1kYnVzLXR1dG9yaWFsLmh0bWwiLz4KICAgICAgPHN1YiBuYW1lPSJGQVEiIGxpbms9InskcHJlZml4fWRidXMtZmFxLmh0bWwiLz4KQEAgLTM4LDcgKzMyLDcgQEAKICAgPHhzbDpwYXJhbSBuYW1lPSJsaW5rIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGJlZm9yZSIvPi5odG1sIzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYWZ0ZXIiLz48L3hzbDpwYXJhbT4KICAgPHhzbDppZiB0ZXN0PSJzdGFydHMtd2l0aCgkbmFtZSwnZGJ1cycpIG9yIHN0YXJ0cy13aXRoKCRuYW1lLCAnREJ1cycpIj4KICAgICA8eHNsOmlmIHRlc3Q9InN0YXJ0cy13aXRoKCRyZWZpZCwnZ3JvdXBfXycpIGFuZCBjb250YWlucygkcmVmaWQsICdfMScpIj4KLSAgICAgICA8a2V5d29yZCB4bWxucz0iaHR0cDovL3d3dy5kZXZoZWxwLm5ldC9ib29rIiB0eXBlPSJmdW5jdGlvbiIgbmFtZT0ieyRuYW1lfSIgbGluaz0ieyRwcmVmaXh9YXBpL3skbGlua30iLz4KKyAgICAgICA8ZnVuY3Rpb24gbmFtZT0ieyRuYW1lfSIgbGluaz0ieyRwcmVmaXh9YXBpL3skbGlua30iLz4KICAgICA8L3hzbDppZj4KICAgPC94c2w6aWY+CiA8L3hzbDp0ZW1wbGF0ZT4KZGlmZiAtLWdpdCBhL2RvYy9pbnRyb3NwZWN0LmR0ZCBiL2RvYy9pbnRyb3NwZWN0LmR0ZAppbmRleCA0ZDM5NmY5Li5iYTI2M2QzIDEwMDY0NAotLS0gYS9kb2MvaW50cm9zcGVjdC5kdGQKKysrIGIvZG9jL2ludHJvc3BlY3QuZHRkCkBAIC0xNiw3ICsxNiw3IEBACiA8IUVMRU1FTlQgc2lnbmFsIChhcmd8YW5ub3RhdGlvbikqPgogPCFBVFRMSVNUIHNpZ25hbCBuYW1lIENEQVRBICNSRVFVSVJFRD4KIAotPCFFTEVNRU5UIGFyZyAoYW5ub3RhdGlvbikqPgorPCFFTEVNRU5UIGFyZyBFTVBUWT4KIDwhQVRUTElTVCBhcmcgbmFtZSBDREFUQSAjSU1QTElFRD4KIDwhQVRUTElTVCBhcmcgdHlwZSBDREFUQSAjUkVRVUlSRUQ+CiA8IS0tIE1ldGhvZCBhcmd1bWVudHMgU0hPVUxEIGluY2x1ZGUgImRpcmVjdGlvbiIsCmRpZmYgLS1naXQgYS9kb2MvaW50cm9zcGVjdC54c2wgYi9kb2MvaW50cm9zcGVjdC54c2wKaW5kZXggODliNjg0NC4uMmEzNDQ3NCAxMDA2NDQKLS0tIGEvZG9jL2ludHJvc3BlY3QueHNsCisrKyBiL2RvYy9pbnRyb3NwZWN0LnhzbApAQCAtODAsMTIgKzgwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+PC9zcGFuPjx4c2w6dGV4dD4gPC94c2w6dGV4dD4KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3NwYW4+PHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotCi0gICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJhbm5vdGF0aW9uIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhbm5vdGF0aW9uIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgogICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CiAgICAgICAgICAgICAgICAgPC91bD4KQEAgLTEwMyw3ICs5Nyw3IEBACiAKIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFubm90YXRpb24iPiAKICAgPGxpPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5hbm5vdGF0aW9uPC9zcGFuPjx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YW5ub3RhdGlvbjwvc3Bhbj4KICAgICA8Y29kZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2NvZGU+PHhzbDp0ZXh0PiA9IDwveHNsOnRleHQ+CiAgICAgPGNvZGU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2YWx1ZSIvPjwvY29kZT4KICAgPC9saT4KZGlmZiAtLWdpdCBhL2RvYy9zeXN0ZW0tYWN0aXZhdGlvbi50eHQgYi9kb2Mvc3lzdGVtLWFjdGl2YXRpb24udHh0CmluZGV4IGRkZTY0OGUuLmRkMTk1ZjcgMTAwNjQ0Ci0tLSBhL2RvYy9zeXN0ZW0tYWN0aXZhdGlvbi50eHQKKysrIGIvZG9jL3N5c3RlbS1hY3RpdmF0aW9uLnR4dApAQCAtNDYsOCArNDYsNyBAQAogVXNlcj1mdHAKIAogVGhpcyBnaXZlcyB0aGUgdXNlciB0byBzd2l0Y2ggdG8sIGFuZCBhbHNvIHRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlLgotVGhlIHNlcnZpY2UgbmFtZSBtdXN0IG1hdGNoIHRoYXQgc3BlY2lmaWVkIGluIHRoZSAvZXRjL2RidXMtMS9zeXN0ZW0uZCBvcgotL3Vzci9zaGFyZS9kYnVzLTEvc3lzdGVtLmQgY29uZiBmaWxlLgorVGhlIHNlcnZpY2UgbmFtZSBtdXN0IG1hdGNoIHRoYXQgc3BlY2lmaWVkIGluIHRoZSAvZXRjL2RidXMtMS9zeXN0ZW0uZCBjb25mIGZpbGUuCiAKIFByZWNhdXRpb25zIHRha2VuOgogCmRpZmYgLS1naXQgYS9tNC9heF9hY19hcHBlbmRfdG9fZmlsZS5tNCBiL200L2F4X2FjX2FwcGVuZF90b19maWxlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDJiM2Q1Li4wMDAwMDAwCi0tLSBhL200L2F4X2FjX2FwcGVuZF90b19maWxlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfYWNfYXBwZW5kX3RvX2ZpbGUuaHRtbAotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMKLSMgU1lOT1BTSVMKLSMKLSMgICBBWF9BQ19BUFBFTkRfVE9fRklMRShbRklMRV0sW0RBVEFdKQotIwotIyBERVNDUklQVElPTgotIwotIyAgIEFwcGVuZHMgdGhlIHNwZWNpZmllZCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgQXV0b2NvbmYgaXMgcnVuLiBJZiB5b3Ugd2FudAotIyAgIHRvIGFwcGVuZCB0byBhIGZpbGUgd2hlbiBjb25maWd1cmUgaXMgcnVuIHVzZSBBWF9BUFBFTkRfVE9fRklMRSBpbnN0ZWFkLgotIwotIyBMSUNFTlNFCi0jCi0jICAgQ29weXJpZ2h0IChjKSAyMDA5IEFsbGFuIENhZmZlZSA8YWxsYW4uY2FmZmVlQGdtYWlsLmNvbT4KLSMKLSMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKLSMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKLSMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55Ci0jICAgd2FycmFudHkuCi0KLSNzZXJpYWwgMTAKLQotQUNfREVGVU4oW0FYX0FDX0FQUEVORF9UT19GSUxFXSxbCi1BQ19SRVFVSVJFKFtBWF9GSUxFX0VTQ0FQRVNdKQotbTRfZXN5c2NtZCgKLUFYX0ZJTEVfRVNDQVBFUwotWwotcHJpbnRmICIlcyIgIiQyIiA+PiAiJDEiCi1dKQotXSkKZGlmZiAtLWdpdCBhL200L2F4X2FjX3ByaW50X3RvX2ZpbGUubTQgYi9tNC9heF9hY19wcmludF90b19maWxlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJkZmMxLi4wMDAwMDAwCi0tLSBhL200L2F4X2FjX3ByaW50X3RvX2ZpbGUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9hY19wcmludF90b19maWxlLmh0bWwKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jCi0jIFNZTk9QU0lTCi0jCi0jICAgQVhfQUNfUFJJTlRfVE9fRklMRShbRklMRV0sW0RBVEFdKQotIwotIyBERVNDUklQVElPTgotIwotIyAgIFdyaXRlcyB0aGUgc3BlY2lmaWVkIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBmaWxlIHdoZW4gQXV0b2NvbmYgaXMgcnVuLiBJZgotIyAgIHlvdSB3YW50IHRvIHByaW50IHRvIGEgZmlsZSB3aGVuIGNvbmZpZ3VyZSBpcyBydW4gdXNlIEFYX1BSSU5UX1RPX0ZJTEUKLSMgICBpbnN0ZWFkLgotIwotIyBMSUNFTlNFCi0jCi0jICAgQ29weXJpZ2h0IChjKSAyMDA5IEFsbGFuIENhZmZlZSA8YWxsYW4uY2FmZmVlQGdtYWlsLmNvbT4KLSMKLSMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKLSMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKLSMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55Ci0jICAgd2FycmFudHkuCi0KLSNzZXJpYWwgMTAKLQotQUNfREVGVU4oW0FYX0FDX1BSSU5UX1RPX0ZJTEVdLFsKLW00X2VzeXNjbWQoCi1BQ19SRVFVSVJFKFtBWF9GSUxFX0VTQ0FQRVNdKQotWwotcHJpbnRmICIlcyIgIiQyIiA+ICIkMSIKLV0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvYXhfYWRkX2FtX21hY3JvX3N0YXRpYy5tNCBiL200L2F4X2FkZF9hbV9tYWNyb19zdGF0aWMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NDJkMjQuLjAwMDAwMDAKLS0tIGEvbTQvYXhfYWRkX2FtX21hY3JvX3N0YXRpYy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfYWRkX2FtX21hY3JvX3N0YXRpYy5odG1sCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIwotIyBTWU5PUFNJUwotIwotIyAgIEFYX0FERF9BTV9NQUNST19TVEFUSUMoW1JVTEVdKQotIwotIyBERVNDUklQVElPTgotIwotIyAgIEFkZHMgdGhlIHNwZWNpZmllZCBydWxlIHRvICRBTUlOQ0xVREUuCi0jCi0jIExJQ0VOU0UKLSMKLSMgICBDb3B5cmlnaHQgKGMpIDIwMDkgVG9tIEhvd2FyZCA8dG9taG93YXJkQHVzZXJzLnNmLm5ldD4KLSMgICBDb3B5cmlnaHQgKGMpIDIwMDkgQWxsYW4gQ2FmZmVlIDxhbGxhbi5jYWZmZWVAZ21haWwuY29tPgotIwotIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQotIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQotIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKLSMgICB3YXJyYW50eS4KLQotI3NlcmlhbCA4Ci0KLUFDX0RFRlVOKFtBWF9BRERfQU1fTUFDUk9fU1RBVElDXSxbCi0gIEFDX1JFUVVJUkUoW0FYX0FNX01BQ1JPU19TVEFUSUNdKQotICBBWF9BQ19BUFBFTkRfVE9fRklMRShBTUlOQ0xVREVfU1RBVElDLFskMV0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvYXhfYW1fbWFjcm9zX3N0YXRpYy5tNCBiL200L2F4X2FtX21hY3Jvc19zdGF0aWMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Y2VlOGMuLjAwMDAwMDAKLS0tIGEvbTQvYXhfYW1fbWFjcm9zX3N0YXRpYy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2FtX21hY3Jvc19zdGF0aWMuaHRtbAotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMKLSMgU1lOT1BTSVMKLSMKLSMgICBBWF9BTV9NQUNST1NfU1RBVElDCi0jCi0jIERFU0NSSVBUSU9OCi0jCi0jICAgQWRkcyBzdXBwb3J0IGZvciBtYWNyb3MgdGhhdCBjcmVhdGUgQXV0b21ha2UgcnVsZXMuIFlvdSBtdXN0IG1hbnVhbGx5Ci0jICAgYWRkIHRoZSBmb2xsb3dpbmcgbGluZQotIwotIyAgICAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2FtaW5jbHVkZV9zdGF0aWMuYW0KLSMKLSMgICB0byB5b3VyIE1ha2VmaWxlLmFtIGZpbGVzLgotIwotIyBMSUNFTlNFCi0jCi0jICAgQ29weXJpZ2h0IChjKSAyMDA5IFRvbSBIb3dhcmQgPHRvbWhvd2FyZEB1c2Vycy5zZi5uZXQ+Ci0jICAgQ29weXJpZ2h0IChjKSAyMDA5IEFsbGFuIENhZmZlZSA8YWxsYW4uY2FmZmVlQGdtYWlsLmNvbT4KLSMKLSMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKLSMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKLSMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55Ci0jICAgd2FycmFudHkuCi0KLSNzZXJpYWwgMTEKLQotQUNfREVGVU4oW0FNSU5DTFVERV9TVEFUSUNdLFthbWluY2x1ZGVfc3RhdGljLmFtXSkKLQotQUNfREVGVU4oW0FYX0FNX01BQ1JPU19TVEFUSUNdLAotWwotQVhfQUNfUFJJTlRfVE9fRklMRShBTUlOQ0xVREVfU1RBVElDLFsKLSMgXUFNSU5DTFVERV9TVEFUSUNbIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IEF1dG9jb25mCi0jIGZyb20gQVhfQU1fTUFDUk9TX1NUQVRJQyBvbiBdbTRfZXN5c2NtZChbTENfQUxMPUMgZGF0ZV0pWwotXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9heF9jb2RlX2NvdmVyYWdlLm00IGIvbTQvYXhfY29kZV9jb3ZlcmFnZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QzNjkyNC4uMDAwMDAwMAotLS0gYS9tNC9heF9jb2RlX2NvdmVyYWdlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICAgICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY29kZV9jb3ZlcmFnZS5odG1sCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIwotIyBTWU5PUFNJUwotIwotIyAgIEFYX0NPREVfQ09WRVJBR0UoKQotIwotIyBERVNDUklQVElPTgotIwotIyAgIERlZmluZXMgQ09ERV9DT1ZFUkFHRV9DUFBGTEFHUywgQ09ERV9DT1ZFUkFHRV9DRkxBR1MsCi0jICAgQ09ERV9DT1ZFUkFHRV9DWFhGTEFHUyBhbmQgQ09ERV9DT1ZFUkFHRV9MSUJTIHdoaWNoIHNob3VsZCBiZSBpbmNsdWRlZAotIyAgIGluIHRoZSBDUFBGTEFHUywgQ0ZMQUdTIENYWEZMQUdTIGFuZCBMSUJTL0xJQkFERCB2YXJpYWJsZXMgb2YgZXZlcnkKLSMgICBidWlsZCB0YXJnZXQgKHByb2dyYW0gb3IgbGlicmFyeSkgd2hpY2ggc2hvdWxkIGJlIGJ1aWx0IHdpdGggY29kZQotIyAgIGNvdmVyYWdlIHN1cHBvcnQuIEFsc28gYWRkIHJ1bGVzIHVzaW5nIEFYX0FERF9BTV9NQUNST19TVEFUSUM7IGFuZAotIyAgICRlbmFibGVfY29kZV9jb3ZlcmFnZSB3aGljaCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IGNvbmZpZ3VyZSBvdXRwdXQuCi0jICAgQ09ERV9DT1ZFUkFHRV9FTkFCTEVEIGlzIGRlZmluZWQgYW5kIHN1YnN0aXR1dGVkLCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlCi0jICAgdmFsdWUgb2YgdGhlIC0tZW5hYmxlLWNvZGUtY292ZXJhZ2Ugb3B0aW9uLCB3aGljaCBkZWZhdWx0cyB0byBiZWluZwotIyAgIGRpc2FibGVkLgotIwotIyAgIFRlc3QgYWxzbyBmb3IgZ2NvdiBwcm9ncmFtIGFuZCBjcmVhdGUgR0NPViB2YXJpYWJsZSB0aGF0IGNvdWxkIGJlCi0jICAgc3Vic3RpdHV0ZWQuCi0jCi0jICAgTm90ZSB0aGF0IGFsbCBvcHRpbWl6YXRpb24gZmxhZ3MgaW4gQ0ZMQUdTIG11c3QgYmUgZGlzYWJsZWQgd2hlbiBjb2RlCi0jICAgY292ZXJhZ2UgaXMgZW5hYmxlZC4KLSMKLSMgICBVc2FnZSBleGFtcGxlOgotIwotIyAgIGNvbmZpZ3VyZS5hYzoKLSMKLSMgICAgIEFYX0NPREVfQ09WRVJBR0UKLSMKLSMgICBNYWtlZmlsZS5hbToKLSMKLSMgICAgIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9hbWluY2x1ZGVfc3RhdGljLmFtCi0jCi0jICAgICBteV9wcm9ncmFtX0xJQlMgPSAuLi4gJChDT0RFX0NPVkVSQUdFX0xJQlMpIC4uLgotIyAgICAgbXlfcHJvZ3JhbV9DUFBGTEFHUyA9IC4uLiAkKENPREVfQ09WRVJBR0VfQ1BQRkxBR1MpIC4uLgotIyAgICAgbXlfcHJvZ3JhbV9DRkxBR1MgPSAuLi4gJChDT0RFX0NPVkVSQUdFX0NGTEFHUykgLi4uCi0jICAgICBteV9wcm9ncmFtX0NYWEZMQUdTID0gLi4uICQoQ09ERV9DT1ZFUkFHRV9DWFhGTEFHUykgLi4uCi0jCi0jICAgICBjbGVhbi1sb2NhbDogY29kZS1jb3ZlcmFnZS1jbGVhbgotIyAgICAgZGlzdGNsZWFuLWxvY2FsOiBjb2RlLWNvdmVyYWdlLWRpc3QtY2xlYW4KLSMKLSMgICBUaGlzIHJlc3VsdHMgaW4gYSAiY2hlY2stY29kZS1jb3ZlcmFnZSIgcnVsZSBiZWluZyBhZGRlZCB0byBhbnkKLSMgICBNYWtlZmlsZS5hbSB3aGljaCBkbyAiaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2FtaW5jbHVkZV9zdGF0aWMuYW0iCi0jICAgKGFzc3VtaW5nIHRoZSBtb2R1bGUgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWNvZGUtY292ZXJhZ2UpLgotIyAgIFJ1bm5pbmcgYG1ha2UgY2hlY2stY29kZS1jb3ZlcmFnZWAgaW4gdGhhdCBkaXJlY3Rvcnkgd2lsbCBydW4gdGhlCi0jICAgbW9kdWxlJ3MgdGVzdCBzdWl0ZSAoYG1ha2UgY2hlY2tgKSBhbmQgYnVpbGQgYSBjb2RlIGNvdmVyYWdlIHJlcG9ydAotIyAgIGRldGFpbGluZyB0aGUgY29kZSB3aGljaCB3YXMgdG91Y2hlZCwgdGhlbiBwcmludCB0aGUgVVJJIGZvciB0aGUgcmVwb3J0LgotIwotIyAgIFRoaXMgY29kZSB3YXMgZGVyaXZlZCBmcm9tIE1ha2VmaWxlLmRlY2wgaW4gR0xpYiwgb3JpZ2luYWxseSBsaWNlbnNlZAotIyAgIHVuZGVyIExHUEx2Mi4xKy4KLSMKLSMgTElDRU5TRQotIwotIyAgIENvcHlyaWdodCAoYykgMjAxMiwgMjAxNiBQaGlsaXAgV2l0aG5hbGwKLSMgICBDb3B5cmlnaHQgKGMpIDIwMTIgWGFuIExvcGV6Ci0jICAgQ29weXJpZ2h0IChjKSAyMDEyIENocmlzdGlhbiBQZXJzY2gKLSMgICBDb3B5cmlnaHQgKGMpIDIwMTIgUGFvbG8gQm9yZWxsaQotIyAgIENvcHlyaWdodCAoYykgMjAxMiBEYW4gV2luc2hpcAotIyAgIENvcHlyaWdodCAoYykgMjAxNSwyMDE4IEJhc3RpZW4gUk9VQ0FSSUVTCi0jCi0jICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotIyAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyCi0jICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jc2VyaWFsIDMyCi0KLW00X2RlZmluZShfQVhfQ09ERV9DT1ZFUkFHRV9SVUxFUyxbCi1BWF9BRERfQU1fTUFDUk9fU1RBVElDKFsKLSMgQ29kZSBjb3ZlcmFnZQotIwotIyBPcHRpb25hbDoKLSMgIC0gQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlk6IFRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIGNvZGUgY292ZXJhZ2UgcmVwb3J0aW5nLgotIyAgICBNdWx0aXBsZSBkaXJlY3RvcmllcyBtYXkgYmUgc3BlY2lmaWVkLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4KLSMgICAgKERlZmF1bHQ6IFwkKHRvcF9idWlsZGRpcikpCi0jICAtIENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEU6IEZpbGVuYW1lIGFuZCBwYXRoIGZvciB0aGUgLmluZm8gZmlsZSBnZW5lcmF0ZWQKLSMgICAgYnkgbGNvdiBmb3IgY29kZSBjb3ZlcmFnZS4gKERlZmF1bHQ6Ci0jICAgIFwkKFBBQ0tBR0VfTkFNRSktXCQoUEFDS0FHRV9WRVJTSU9OKS1jb3ZlcmFnZS5pbmZvKQotIyAgLSBDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlk6IERpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIGNvZGUgY292ZXJhZ2UKLSMgICAgcmVwb3J0cyB0byBiZSBjcmVhdGVkLiAoRGVmYXVsdDoKLSMgICAgXCQoUEFDS0FHRV9OQU1FKS1cJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlKQotIyAgLSBDT0RFX0NPVkVSQUdFX0JSQU5DSF9DT1ZFUkFHRTogU2V0IHRvIDEgdG8gZW5mb3JjZSBicmFuY2ggY292ZXJhZ2UsCi0jICAgIHNldCB0byAwIHRvIGRpc2FibGUgaXQgYW5kIGxlYXZlIGVtcHR5IHRvIHN0YXkgd2l0aCB0aGUgZGVmYXVsdC4KLSMgICAgKERlZmF1bHQ6IGVtcHR5KQotIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfU0hPUFRTX0RFRkFVTFQ6IEV4dHJhIG9wdGlvbnMgc2hhcmVkIGJldHdlZW4gYm90aCBsY292Ci0jICAgIGluc3RhbmNlcy4gKERlZmF1bHQ6IGJhc2VkIG9uICRDT0RFX0NPVkVSQUdFX0JSQU5DSF9DT1ZFUkFHRSkKLSMgIC0gQ09ERV9DT1ZFUkFHRV9MQ09WX1NIT1BUUzogRXh0cmEgb3B0aW9ucyB0byBzaGFyZWQgYmV0d2VlbiBib3RoIGxjb3YKLSMgICAgaW5zdGFuY2VzLiAoRGVmYXVsdDogJENPREVfQ09WRVJBR0VfTENPVl9TSE9QVFNfREVGQVVMVCkKLSMgIC0gQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEg6IC0tZ2Nvdi10b29sIHBhdGh0b2djb3YKLSMgIC0gQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVDogRXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIHRoZQotIyAgICBjb2xsZWN0aW5nIGxjb3YgaW5zdGFuY2UuIChEZWZhdWx0OiAkQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfR0NPVlBBVEgpCi0jICAtIENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TOiBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbGxlY3RpbmcgbGNvdgotIyAgICBpbnN0YW5jZS4gKERlZmF1bHQ6ICRDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19ERUZBVUxUKQotIyAgLSBDT0RFX0NPVkVSQUdFX0xDT1ZfUk1PUFRTX0RFRkFVTFQ6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgZmlsdGVyaW5nCi0jICAgIGxjb3YgaW5zdGFuY2UuIChEZWZhdWx0OiBlbXB0eSkKLSMgIC0gQ09ERV9DT1ZFUkFHRV9MQ09WX1JNT1BUUzogRXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBmaWx0ZXJpbmcgbGNvdgotIyAgICBpbnN0YW5jZS4gKERlZmF1bHQ6ICRDT0RFX0NPVkVSQUdFX0xDT1ZfUk1PUFRTX0RFRkFVTFQpCi0jICAtIENPREVfQ09WRVJBR0VfR0VOSFRNTF9PUFRJT05TX0RFRkFVTFQ6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUKLSMgICAgZ2VuaHRtbCBpbnN0YW5jZS4gKERlZmF1bHQ6IGJhc2VkIG9uICRDT0RFX0NPVkVSQUdFX0JSQU5DSF9DT1ZFUkFHRSkKLSMgIC0gQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlM6IEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgZ2VuaHRtbAotIyAgICBpbnN0YW5jZS4gKERlZmF1bHQ6ICRDT0RFX0NPVkVSQUdFX0dFTkhUTUxfT1BUSU9OU19ERUZBVUxUKQotIyAgLSBDT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOOiBFeHRyYSBnbG9iIHBhdHRlcm4gb2YgZmlsZXMgdG8gaWdub3JlCi0jCi0jIFRoZSBnZW5lcmF0ZWQgcmVwb3J0IHdpbGwgYmUgdGl0bGVkIHVzaW5nIHRoZSBcJChQQUNLQUdFX05BTUUpIGFuZAotIyBcJChQQUNLQUdFX1ZFUlNJT04pLiBJbiBvcmRlciB0byBhZGQgdGhlIGN1cnJlbnQgZ2l0IGhhc2ggdG8gdGhlIHRpdGxlLAotIyB1c2UgdGhlIGdpdC12ZXJzaW9uLWdlbiBzY3JpcHQsIGF2YWlsYWJsZSBvbmxpbmUuCi0jIE9wdGlvbmFsIHZhcmlhYmxlcwotIyBydW4gb25seSBvbiB0b3AgZGlyCi1pZiBDT0RFX0NPVkVSQUdFX0VOQUJMRUQKLSBpZmVxIChcJChhYnNfYnVpbGRkaXIpLCBcJChhYnNfdG9wX2J1aWxkZGlyKSkKLUNPREVfQ09WRVJBR0VfRElSRUNUT1JZID89IFwkKHRvcF9idWlsZGRpcikKLUNPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUgPz0gXCQoUEFDS0FHRV9OQU1FKS1cJChQQUNLQUdFX1ZFUlNJT04pLWNvdmVyYWdlLmluZm8KLUNPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSA/PSBcJChQQUNLQUdFX05BTUUpLVwkKFBBQ0tBR0VfVkVSU0lPTiktY292ZXJhZ2UKLQotQ09ERV9DT1ZFUkFHRV9CUkFOQ0hfQ09WRVJBR0UgPz0KLUNPREVfQ09WRVJBR0VfTENPVl9TSE9QVFNfREVGQVVMVCA/PSBcJChpZiBcJChDT0RFX0NPVkVSQUdFX0JSQU5DSF9DT1ZFUkFHRSksXAotLS1yYyBsY292X2JyYW5jaF9jb3ZlcmFnZT1cJChDT0RFX0NPVkVSQUdFX0JSQU5DSF9DT1ZFUkFHRSkpCi1DT0RFX0NPVkVSQUdFX0xDT1ZfU0hPUFRTID89IFwkKENPREVfQ09WRVJBR0VfTENPVl9TSE9QVFNfREVGQVVMVCkKLUNPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0dDT1ZQQVRIID89IC0tZ2Nvdi10b29sIFwiXCQoR0NPVilcIgotQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlNfREVGQVVMVCA/PSBcJChDT0RFX0NPVkVSQUdFX0xDT1ZfT1BUSU9OU19HQ09WUEFUSCkKLUNPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TID89IFwkKENPREVfQ09WRVJBR0VfTENPVl9PUFRJT05TX0RFRkFVTFQpCi1DT0RFX0NPVkVSQUdFX0xDT1ZfUk1PUFRTX0RFRkFVTFQgPz0KLUNPREVfQ09WRVJBR0VfTENPVl9STU9QVFMgPz0gXCQoQ09ERV9DT1ZFUkFHRV9MQ09WX1JNT1BUU19ERUZBVUxUKQotQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlNfREVGQVVMVCA/PVwKLVwkKGlmIFwkKENPREVfQ09WRVJBR0VfQlJBTkNIX0NPVkVSQUdFKSxcCi0tLXJjIGdlbmh0bWxfYnJhbmNoX2NvdmVyYWdlPVwkKENPREVfQ09WRVJBR0VfQlJBTkNIX0NPVkVSQUdFKSkKLUNPREVfQ09WRVJBR0VfR0VOSFRNTF9PUFRJT05TID89IFwkKENPREVfQ09WRVJBR0VfR0VOSFRNTF9PUFRJT05TX0RFRkFVTFQpCi1DT0RFX0NPVkVSQUdFX0lHTk9SRV9QQVRURVJOID89Ci0KLUdJVElHTk9SRUZJTEVTID0gXCQoR0lUSUdOT1JFRklMRVMpIFwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIFwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSkKLWNvZGVfY292ZXJhZ2Vfdl9sY292X2NhcCA9IFwkKGNvZGVfY292ZXJhZ2Vfdl9sY292X2NhcF9cJChWKSkKLWNvZGVfY292ZXJhZ2Vfdl9sY292X2NhcF8gPSBcJChjb2RlX2NvdmVyYWdlX3ZfbGNvdl9jYXBfXCQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotY29kZV9jb3ZlcmFnZV92X2xjb3ZfY2FwXzAgPSBAZWNobyBcIiAgTENPViAgIC0tY2FwdHVyZVwiIFwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpOwotY29kZV9jb3ZlcmFnZV92X2xjb3ZfaWduID0gXCQoY29kZV9jb3ZlcmFnZV92X2xjb3ZfaWduX1wkKFYpKQotY29kZV9jb3ZlcmFnZV92X2xjb3ZfaWduXyA9IFwkKGNvZGVfY292ZXJhZ2Vfdl9sY292X2lnbl9cJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jb2RlX2NvdmVyYWdlX3ZfbGNvdl9pZ25fMCA9IEBlY2hvIFwiICBMQ09WICAgLS1yZW1vdmUgL3RtcC8qXCIgXCQoQ09ERV9DT1ZFUkFHRV9JR05PUkVfUEFUVEVSTik7Ci1jb2RlX2NvdmVyYWdlX3ZfZ2VuaHRtbCA9IFwkKGNvZGVfY292ZXJhZ2Vfdl9nZW5odG1sX1wkKFYpKQotY29kZV9jb3ZlcmFnZV92X2dlbmh0bWxfID0gXCQoY29kZV9jb3ZlcmFnZV92X2dlbmh0bWxfXCQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotY29kZV9jb3ZlcmFnZV92X2dlbmh0bWxfMCA9IEBlY2hvIFwiICBHRU4gICBcIiBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSlcIjsKLWNvZGVfY292ZXJhZ2VfcXVpZXQgPSBcJChjb2RlX2NvdmVyYWdlX3F1aWV0X1wkKFYpKQotY29kZV9jb3ZlcmFnZV9xdWlldF8gPSBcJChjb2RlX2NvdmVyYWdlX3F1aWV0X1wkKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLWNvZGVfY292ZXJhZ2VfcXVpZXRfMCA9IC0tcXVpZXQKLQotIyBzYW5pdGl6ZXMgdGhlIHRlc3QtbmFtZTogcmVwbGFjZXMgd2l0aCB1bmRlcnNjb3JlczogZGFzaGVzIGFuZCBkb3RzCi1jb2RlX2NvdmVyYWdlX3Nhbml0aXplID0gXCQoc3Vic3QgLSxfLFwkKHN1YnN0IC4sXyxcJCgxKSkpCi0KLSMgVXNlIHJlY3Vyc2l2ZSBtYWtlcyBpbiBvcmRlciB0byBpZ25vcmUgZXJyb3JzIGR1cmluZyBjaGVjawotY2hlY2stY29kZS1jb3ZlcmFnZToKLQktXCQoQU1fVl9hdClcJChNQUtFKSBcJChBTV9NQUtFRkxBR1MpIC1rIGNoZWNrCi0JXCQoQU1fVl9hdClcJChNQUtFKSBcJChBTV9NQUtFRkxBR1MpIGNvZGUtY292ZXJhZ2UtY2FwdHVyZQotCi0jIENhcHR1cmUgY29kZSBjb3ZlcmFnZSBkYXRhCi1jb2RlLWNvdmVyYWdlLWNhcHR1cmU6IGNvZGUtY292ZXJhZ2UtY2FwdHVyZS1ob29rCi0JXCQoY29kZV9jb3ZlcmFnZV92X2xjb3ZfY2FwKVwkKExDT1YpIFwkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIFwkKGFkZHByZWZpeCAtLWRpcmVjdG9yeSAsXCQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpKSAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcFwiIC0tdGVzdC1uYW1lIFwiXCQoY2FsbCBjb2RlX2NvdmVyYWdlX3Nhbml0aXplLFwkKFBBQ0tBR0VfTkFNRSktXCQoUEFDS0FHRV9WRVJTSU9OKSlcIiAtLW5vLWNoZWNrc3VtIC0tY29tcGF0LWxpYnRvb2wgXCQoQ09ERV9DT1ZFUkFHRV9MQ09WX1NIT1BUUykgXCQoQ09ERV9DT1ZFUkFHRV9MQ09WX09QVElPTlMpCi0JXCQoY29kZV9jb3ZlcmFnZV92X2xjb3ZfaWduKVwkKExDT1YpIFwkKGNvZGVfY292ZXJhZ2VfcXVpZXQpIFwkKGFkZHByZWZpeCAtLWRpcmVjdG9yeSAsXCQoQ09ERV9DT1ZFUkFHRV9ESVJFQ1RPUlkpKSAtLXJlbW92ZSBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcFwiIFwiL3RtcC8qXCIgXCQoQ09ERV9DT1ZFUkFHRV9JR05PUkVfUEFUVEVSTikgLS1vdXRwdXQtZmlsZSBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpXCIgXCQoQ09ERV9DT1ZFUkFHRV9MQ09WX1NIT1BUUykgXCQoQ09ERV9DT1ZFUkFHRV9MQ09WX1JNT1BUUykKLQktQHJtIC1mIFwiXCQoQ09ERV9DT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wXCIKLQlcJChjb2RlX2NvdmVyYWdlX3ZfZ2VuaHRtbClMQU5HPUMgXCQoR0VOSFRNTCkgXCQoY29kZV9jb3ZlcmFnZV9xdWlldCkgXCQoYWRkcHJlZml4IC0tcHJlZml4ICxcJChDT0RFX0NPVkVSQUdFX0RJUkVDVE9SWSkpIC0tb3V0cHV0LWRpcmVjdG9yeSBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSlcIiAtLXRpdGxlIFwiXCQoUEFDS0FHRV9OQU1FKS1cJChQQUNLQUdFX1ZFUlNJT04pIENvZGUgQ292ZXJhZ2VcIiAtLWxlZ2VuZCAtLXNob3ctZGV0YWlscyBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpXCIgXCQoQ09ERV9DT1ZFUkFHRV9HRU5IVE1MX09QVElPTlMpCi0JQGVjaG8gXCJmaWxlOi8vXCQoYWJzX2J1aWxkZGlyKS9cJChDT0RFX0NPVkVSQUdFX09VVFBVVF9ESVJFQ1RPUlkpL2luZGV4Lmh0bWxcIgotCi1jb2RlLWNvdmVyYWdlLWNsZWFuOgotCS1cJChMQ09WKSAtLWRpcmVjdG9yeSBcJCh0b3BfYnVpbGRkaXIpIC16Ci0JLXJtIC1yZiBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0ZJTEUpXCIgXCJcJChDT0RFX0NPVkVSQUdFX09VVFBVVF9GSUxFKS50bXBcIiBcIlwkKENPREVfQ09WRVJBR0VfT1VUUFVUX0RJUkVDVE9SWSlcIgotCS1maW5kIC4gXFwoIC1uYW1lIFwiKi5nY2RhXCIgLW8gLW5hbWUgXCIqLmdjbm9cIiAtbyAtbmFtZSBcIiouZ2NvdlwiIFxcKSAtZGVsZXRlCi0KLWNvZGUtY292ZXJhZ2UtZGlzdC1jbGVhbjoKLQotQV1bTV9ESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gXCQoQV1bTV9ESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSAtLWRpc2FibGUtY29kZS1jb3ZlcmFnZQotIGVsc2UgIyBpZm5lcSAoXCQoYWJzX2J1aWxkZGlyKSwgXCQoYWJzX3RvcF9idWlsZGRpcikpCi1jaGVjay1jb2RlLWNvdmVyYWdlOgotCi1jb2RlLWNvdmVyYWdlLWNhcHR1cmU6IGNvZGUtY292ZXJhZ2UtY2FwdHVyZS1ob29rCi0KLWNvZGUtY292ZXJhZ2UtY2xlYW46Ci0KLWNvZGUtY292ZXJhZ2UtZGlzdC1jbGVhbjoKLSBlbmRpZiAjIGlmZXEgKFwkKGFic19idWlsZGRpciksIFwkKGFic190b3BfYnVpbGRkaXIpKQotZWxzZSAjISBDT0RFX0NPVkVSQUdFX0VOQUJMRUQKLSMgVXNlIHJlY3Vyc2l2ZSBtYWtlcyBpbiBvcmRlciB0byBpZ25vcmUgZXJyb3JzIGR1cmluZyBjaGVjawotY2hlY2stY29kZS1jb3ZlcmFnZToKLQlAZWNobyBcIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlXCIKLSMgQ2FwdHVyZSBjb2RlIGNvdmVyYWdlIGRhdGEKLWNvZGUtY292ZXJhZ2UtY2FwdHVyZTogY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2sKLQlAZWNobyBcIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1jb2RlLWNvdmVyYWdlXCIKLQotY29kZS1jb3ZlcmFnZS1jbGVhbjoKLQotY29kZS1jb3ZlcmFnZS1kaXN0LWNsZWFuOgotCi1lbmRpZiAjQ09ERV9DT1ZFUkFHRV9FTkFCTEVECi0jIEhvb2sgcnVsZSBleGVjdXRlZCBiZWZvcmUgY29kZS1jb3ZlcmFnZS1jYXB0dXJlLCBvdmVycmlkYWJsZSBieSB0aGUgdXNlcgotY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2s6Ci0KLS5QSE9OWTogY2hlY2stY29kZS1jb3ZlcmFnZSBjb2RlLWNvdmVyYWdlLWNhcHR1cmUgY29kZS1jb3ZlcmFnZS1kaXN0LWNsZWFuIGNvZGUtY292ZXJhZ2UtY2xlYW4gY29kZS1jb3ZlcmFnZS1jYXB0dXJlLWhvb2sKLV0pCi1dKQotCi1BQ19ERUZVTihbX0FYX0NPREVfQ09WRVJBR0VfRU5BQkxFRF0sWwotCUFYX0NIRUNLX0dOVV9NQUtFKFtdLFtBQ19NU0dfRVJST1IoW25vdCB1c2luZyBHTlUgbWFrZSB0aGF0IGlzIG5lZWRlZCBmb3IgY292ZXJhZ2VdKV0pCi0JQUNfUkVRVUlSRShbQVhfQUREX0FNX01BQ1JPX1NUQVRJQ10pCi0JIyBjaGVjayBmb3IgZ2NvdgotCUFDX0NIRUNLX1RPT0woW0dDT1ZdLAotCQkgIFskX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEhdLAotCQkgIFs6XSkKLQlBU19JRihbdGVzdCAiWCRHQ09WIiA9ICJYOiJdLAotCSAgICAgIFtBQ19NU0dfRVJST1IoW2djb3YgaXMgbmVlZGVkIHRvIGRvIGNvdmVyYWdlXSldKQotCUFDX1NVQlNUKFtHQ09WXSkKLQotCWRubCBDaGVjayBpZiBnY2MgaXMgYmVpbmcgdXNlZAotCUFTX0lGKFsgdGVzdCAiJEdDQyIgPSAibm8iIF0sIFsKLQkJQUNfTVNHX0VSUk9SKFtub3QgY29tcGlsaW5nIHdpdGggZ2NjLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgZ2NvdiBjb2RlIGNvdmVyYWdlXSkKLQkgICAgICBdKQotCi0JQUNfQ0hFQ0tfUFJPRyhbTENPVl0sIFtsY292XSwgW2xjb3ZdKQotCUFDX0NIRUNLX1BST0coW0dFTkhUTUxdLCBbZ2VuaHRtbF0sIFtnZW5odG1sXSkKLQotCUFTX0lGKFsgdGVzdCB4IiRMQ09WIiA9IHggXSwgWwotCQlBQ19NU0dfRVJST1IoW1RvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZyB5b3UgbXVzdCBoYXZlIGxjb3YgaW5zdGFsbGVkXSkKLQkgICAgICBdKQotCi0JQVNfSUYoWyB0ZXN0IHgiJEdFTkhUTUwiID0geCBdLCBbCi0JCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgZ2VuaHRtbCBmcm9tIHRoZSBsY292IHBhY2thZ2VdKQotCV0pCi0KLQlkbmwgQnVpbGQgdGhlIGNvZGUgY292ZXJhZ2UgZmxhZ3MKLQlkbmwgRGVmaW5lIENPREVfQ09WRVJBR0VfTERGTEFHUyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQlDT0RFX0NPVkVSQUdFX0NQUEZMQUdTPSItRE5ERUJVRyIKLQlDT0RFX0NPVkVSQUdFX0NGTEFHUz0iLU8wIC1nIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKLQlDT0RFX0NPVkVSQUdFX0NYWEZMQUdTPSItTzAgLWcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgotCUNPREVfQ09WRVJBR0VfTElCUz0iLWxnY292IgotCi0JQUNfU1VCU1QoW0NPREVfQ09WRVJBR0VfQ1BQRkxBR1NdKQotCUFDX1NVQlNUKFtDT0RFX0NPVkVSQUdFX0NGTEFHU10pCi0JQUNfU1VCU1QoW0NPREVfQ09WRVJBR0VfQ1hYRkxBR1NdKQotCUFDX1NVQlNUKFtDT0RFX0NPVkVSQUdFX0xJQlNdKQotXSkKLQotQUNfREVGVU4oW0FYX0NPREVfQ09WRVJBR0VdLFsKLQlkbmwgQ2hlY2sgZm9yIC0tZW5hYmxlLWNvZGUtY292ZXJhZ2UKLQotCSMgYWxsb3cgdG8gb3ZlcnJpZGUgZ2NvdiBsb2NhdGlvbgotCUFDX0FSR19XSVRIKFtnY292XSwKLQkgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdjb3ZbPUdDT1ZdXSwgW3VzZSBnaXZlbiBHQ09WIGZvciBjb3ZlcmFnZSAoR0NPVj1nY292KS5dKV0sCi0JICBbX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEg9JHdpdGhfZ2Nvdl0sCi0JICBbX0FYX0NPREVfQ09WRVJBR0VfR0NPVl9QUk9HX1dJVEg9Z2Nvdl0pCi0KLQlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgd2l0aCBjb2RlIGNvdmVyYWdlIHN1cHBvcnRdKQotCUFDX0FSR19FTkFCTEUoW2NvZGUtY292ZXJhZ2VdLAotCSAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvZGUtY292ZXJhZ2VdLAotCSAgW1doZXRoZXIgdG8gZW5hYmxlIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydF0pLCwKLQkgIGVuYWJsZV9jb2RlX2NvdmVyYWdlPW5vKQotCi0JQU1fQ09ORElUSU9OQUwoW0NPREVfQ09WRVJBR0VfRU5BQkxFRF0sIFt0ZXN0ICJ4JGVuYWJsZV9jb2RlX2NvdmVyYWdlIiA9IHh5ZXNdKQotCUFDX1NVQlNUKFtDT0RFX0NPVkVSQUdFX0VOQUJMRURdLCBbJGVuYWJsZV9jb2RlX2NvdmVyYWdlXSkKLQlBQ19NU0dfUkVTVUxUKCRlbmFibGVfY29kZV9jb3ZlcmFnZSkKLQotCUFTX0lGKFsgdGVzdCAieCRlbmFibGVfY29kZV9jb3ZlcmFnZSIgPSB4eWVzIF0sIFsKLQkJX0FYX0NPREVfQ09WRVJBR0VfRU5BQkxFRAotCSAgICAgIF0pCi0KLQlfQVhfQ09ERV9DT1ZFUkFHRV9SVUxFUwotXSkKZGlmZiAtLWdpdCBhL200L2F4X2ZpbGVfZXNjYXBlcy5tNCBiL200L2F4X2ZpbGVfZXNjYXBlcy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2ZmRjMy4uMDAwMDAwMAotLS0gYS9tNC9heF9maWxlX2VzY2FwZXMubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyAgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2ZpbGVfZXNjYXBlcy5odG1sCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIwotIyBTWU5PUFNJUwotIwotIyAgIEFYX0ZJTEVfRVNDQVBFUwotIwotIyBERVNDUklQVElPTgotIwotIyAgIFdyaXRlcyB0aGUgc3BlY2lmaWVkIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgotIwotIyBMSUNFTlNFCi0jCi0jICAgQ29weXJpZ2h0IChjKSAyMDA4IFRvbSBIb3dhcmQgPHRvbWhvd2FyZEB1c2Vycy5zZi5uZXQ+Ci0jCi0jICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCi0jICAgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlCi0jICAgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueQotIyAgIHdhcnJhbnR5LgotCi0jc2VyaWFsIDgKLQotQUNfREVGVU4oW0FYX0ZJTEVfRVNDQVBFU10sWwotQVhfRE9MTEFSPSJcJCIKLUFYX1NSQj0iXFwxMzUiCi1BWF9TTEI9IlxcMTMzIgotQVhfQlM9IlxcXFwiCi1BWF9EUT0iXCIiCi1dKQpkaWZmIC0tZ2l0IGEvbTQvY29tcGlsZXIubTQgYi9tNC9jb21waWxlci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE5N2FkCi0tLSAvZGV2L251bGwKKysrIGIvbTQvY29tcGlsZXIubTQKQEAgLTAsMCArMSw2NyBAQAorIyBjb21waWxlci5tNCAtIGF1dG9jb25mIG1hY3JvcyBmb3IgY29tcGlsZXIgc2V0dGluZ3MKKyMKKyMgQ29weXJpZ2h0IMKpIDIwMDUgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisjIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisjIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyMgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworIyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjIAorIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorIyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMgCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GCisjIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorIyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworCisjIENPTVBJTEVSX1dBUk5JTkdTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGNvbmZpZ3VyZSBvcHRpb24gdG8gZW5hYmxlIGFkZGl0aW9uYWwgY29tcGlsZXIgd2FybmluZ3MgYW5kIHRyZWF0CisjIHRoZW0gYXMgZXJyb3JzLgorQUNfREVGVU4oW0NPTVBJTEVSX1dBUk5JTkdTXSwKK1tBQ19BUkdfRU5BQkxFKGNvbXBpbGVyLXdhcm5pbmdzLAorCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb21waWxlci13YXJuaW5nc10sCisJICAgICAgICAgICAgICAgW0VuYWJsZSBhZGRpdGlvbmFsIGNvbXBpbGVyIHdhcm5pbmdzXSksCitbaWYgdGVzdCAieCRlbmFibGVfY29tcGlsZXJfd2FybmluZ3MiID0gInh5ZXMiOyB0aGVuCisJaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgQ0ZMQUdTPSItV2FsbCAtV2Vycm9yICRDRkxBR1MiCisgICAgICAgIGZpCisJaWYgdGVzdCAieCRHWFgiID0gInh5ZXMiOyB0aGVuCisJCUNYWEZMQUdTPSItV2FsbCAtV2Vycm9yICRDWFhGTEFHUyIKKwlmaQorZmldKWRubAorXSkjIENPTVBJTEVSX1dBUk5JTkdTCisKKyMgQ09NUElMRVJfT1BUSU1JU0FUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGNvbmZpZ3VyZSBvcHRpb24gdG8gZGlzYWJsZSBvcHRpbWlzYXRpb25zLgorQUNfREVGVU4oW0NPTVBJTEVSX09QVElNSVNBVElPTlNdLAorW0FDX0FSR19FTkFCTEUoY29tcGlsZXItb3B0aW1pc2F0aW9ucywKKwlBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWNvbXBpbGVyLW9wdGltaXNhdGlvbnNdLAorCQkgICAgICAgW0Rpc2FibGUgY29tcGlsZXIgb3B0aW1pc2F0aW9uc10pLAorW2lmIHRlc3QgIngkZW5hYmxlX2NvbXBpbGVyX29wdGltaXNhdGlvbnMiID0gInhubyI7IHRoZW4KKwlbQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTIiB8IHNlZCAtZSAicy8gLU9bMS05XSpcYi8gLU8wL2ciYF0KK2ZpXSlkbmwKK10pIyBDT01QSUxFUl9PUFRJTUlTQVRJT05TCisKKyMgQ09NUElMRVJfQ09WRVJBR0UKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgY29uZmlndXJlIG9wdGlvbiB0byBlbmFibGUgY292ZXJhZ2UgZGF0YS4KK0FDX0RFRlVOKFtDT01QSUxFUl9DT1ZFUkFHRV0sCitbQUNfQVJHX0VOQUJMRShjb21waWxlci1jb3ZlcmFnZSwKKwlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY29tcGlsZXItY292ZXJhZ2VdLAorCQkgICAgICAgW0VuYWJsZSBnZW5lcmF0aW9uIG9mIGNvdmVyYWdlIGRhdGFdKSwKK1tpZiB0ZXN0ICJ4JGVuYWJsZV9jb21waWxlcl9jb3ZlcmFnZSIgPSAieHllcyI7IHRoZW4KKwlpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKwkJQ0ZMQUdTPSIkQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKwlmaQorZmldLFtlbmFibGVfY29tcGlsZXJfY292ZXJhZ2U9bm9dKWRubAorXSkjIENPTVBJTEVSX0NPVkVSQUdFCmRpZmYgLS1naXQgYS9tNC90cC1jb21waWxlci1mbGFnLm00IGIvbTQvdHAtY29tcGlsZXItZmxhZy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvbTQvdHAtY29tcGlsZXItZmxhZy5tNApAQCAtMCwwICsxLDQzIEBACitkbmwgQSB2ZXJzaW9uIG9mIEFTX0NPTVBJTEVSX0ZMQUcgdGhhdCBzdXBwb3J0cyBib3RoIEMgYW5kIEMrKy4KK2RubCBCYXNlZCBvbjoKKworZG5sIGFzLWNvbXBpbGVyLWZsYWcubTQgMC4xLjAKK2RubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIGRldGVjdGlvbiBvZiBjb21waWxlciBmbGFncworZG5sIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorZG5sICRJZDogYXMtY29tcGlsZXItZmxhZy5tNCx2IDEuMSAyMDA1LzA2LzE4IDE4OjAyOjQ2IGJ1cmdlcm1hbiBFeHAgJAorCitkbmwgVFBfQ09NUElMRVJfRkxBRyhDRkxBR1MsIEFDVElPTi1JRi1BQ0NFUFRFRCwgW0FDVElPTi1JRi1OT1QtQUNDRVBURURdKQorZG5sIFRyaWVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZ2l2ZW4gQ0ZMQUdTIGFuZCBDWFhGTEFHUy4KK2RubAorZG5sIFJ1bnMgQUNUSU9OLUlGLUFDQ0VQVEVEIGlmIHRoZSBjb21waWxlciBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorZG5sIEFDX0xBTkcgY2FuIGNvbXBpbGUgd2l0aCB0aGUgZmxhZ3MsIGFuZCBBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEIG90aGVyd2lzZS4KKworQUNfREVGVU4oW1RQX0NPTVBJTEVSX0ZMQUddLAorWworICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAkMV0pCisKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIHNhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBDWFhGTEFHUz0iJENYWEZMQUdTICQxIgorCisgIEFDX1RSWV9DT01QSUxFKFsgXSwgW10sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIENYWEZMQUdTPSIkc2F2ZV9DWFhGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICAkMgorICAgIHRydWUKKyAgZWxzZQorICAgICQzCisgICAgdHJ1ZQorICBmaQorICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCitdKQorCitkbmwgVFBfQUREX0NPTVBJTEVSX0ZMQUcoVkFSSUFCTEUsIENGTEFHUykKK2RubCBBcHBlbmQgQ0ZMQUdTIHRvIFZBUklBQkxFIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVtLgorQUNfREVGVU4oW1RQX0FERF9DT01QSUxFUl9GTEFHXSwKK1sKKyAgVFBfQ09NUElMRVJfRkxBRyhbJDJdLCBbJDE9IlskXSQxICQyIl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvdHAtY29tcGlsZXItd2FybmluZ3MubTQgYi9tNC90cC1jb21waWxlci13YXJuaW5ncy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTRhZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvdHAtY29tcGlsZXItd2FybmluZ3MubTQKQEAgLTAsMCArMSw0OSBAQAorZG5sIFRQX0NPTVBJTEVSX1dBUk5JTkdTKFZBUklBQkxFLCBXRVJST1JfQllfREVGQVVMVCwgREVTSVJBQkxFLCBVTkRFU0lSQUJMRSkKK2RubCAkMSAoVkFSSUFCTEUpOiB0aGUgdmFyaWFibGUgdG8gcHV0IGZsYWdzIGludG8KK2RubCAkMiAoV0VSUk9SX0JZX0RFRkFVTFQpOiBhIGNvbW1hbmQgcmV0dXJuaW5nIHRydWUgaWYgLVdlcnJvciBzaG91bGQgYmUgdGhlCitkbmwgICAgIGRlZmF1bHQKK2RubCAkMyAoREVTSVJBQkxFKTogd2FybmluZyBmbGFncyB3ZSB3YW50IChlLmcuIGFsbCBleHRyYSBzaGFkb3cpCitkbmwgJDQgKFVOREVTSVJBQkxFKTogd2FybmluZyBmbGFncyB3ZSBkb24ndCB3YW50IChlLmcuCitkbmwgICBtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyB1bnVzZWQtcGFyYW1ldGVyKQorQUNfREVGVU4oW1RQX0NPTVBJTEVSX1dBUk5JTkdTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfQVJHX0VOQUJMRV0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0hFTFBfU1RSSU5HXSlkbmwKKyAgQUNfUkVRVUlSRShbVFBfQ09NUElMRVJfRkxBR10pZG5sCisKKyAgdHBfd2FybmluZ3M9IiIKKyAgZm9yIHRwX2ZsYWcgaW4gJDM7IGRvCisgICAgVFBfQ09NUElMRVJfRkxBRyhbLVckdHBfZmxhZ10sIFt0cF93YXJuaW5ncz0iJHRwX3dhcm5pbmdzIC1XJHRwX2ZsYWciXSkKKyAgZG9uZQorCisgIHRwX2Vycm9yX2ZsYWdzPSItV2Vycm9yIgorICBUUF9DT01QSUxFUl9GTEFHKFstV2Vycm9yXSwgW3RwX3dlcnJvcj15ZXNdLCBbdHBfd2Vycm9yPW5vXSkKKworICBmb3IgdHBfZmxhZyBpbiAkNDsgZG8KKyAgICBUUF9DT01QSUxFUl9GTEFHKFstV25vLSR0cF9mbGFnXSwKKyAgICAgIFt0cF93YXJuaW5ncz0iJHRwX3dhcm5pbmdzIC1Xbm8tJHRwX2ZsYWciXSkKK2RubCBZZXMsIHdlIGRvIG5lZWQgdG8gdXNlIGJvdGggLVduby1mb28gYW5kIC1Xbm8tZXJyb3I9Zm9vLiBTaW1vbiBzYXlzOgorZG5sICAgICBzb21lIHdhcm5pbmdzIHdlIGV4cGxpY2l0bHkgZG9uJ3Qgd2FudCwgbGlrZSB1bnVzZWQtcGFyYW1ldGVyLCBidXQKK2RubCAgICAgdGhleSdyZSBpbiAtV2FsbC4gd2hlbiBhIGRpc3RybyB1c2luZyBjZGJzIGNvbXBpbGVzIHVzLCB3ZSBoYXZlOgorZG5sICAgICAgIC1XZXJyb3IgLVduby11bnVzZWQtcGFyYW1ldGVyICAgICAgLVdhbGwKK2RubCAgICAgICAgIF4gZnJvbSB1cyAgICAgICAgICAgICAgICAgICAgICAgICBeIGZyb20gY2RicworZG5sICAgICB3aGljaCB0dXJucyAtV3VudXNlZC1wYXJhbWV0ZXIgYmFjayBvbiwgaW4gZWZmZWN0CisgICAgVFBfQ09NUElMRVJfRkxBRyhbLVduby1lcnJvcj0kdHBfZmxhZ10sCisgICAgICBbdHBfZXJyb3JfZmxhZ3M9IiR0cF9lcnJvcl9mbGFncyAtV25vLWVycm9yPSR0cF9mbGFnIl0sIFt0cF93ZXJyb3I9bm9dKQorICBkb25lCisKKyAgQUNfQVJHX0VOQUJMRShbV2Vycm9yXSwKKyAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLVdlcnJvcl0sCisgICAgICBbY29tcGlsZSB3aXRob3V0IC1XZXJyb3IgKG5vcm1hbGx5IGVuYWJsZWQgaW4gZGV2ZWxvcG1lbnQgYnVpbGRzKV0pLAorICAgIHRwX3dlcnJvcj0kZW5hYmxldmFsLCA6KQorCisgIGlmIHRlc3QgIngkdHBfd2Vycm9yIiA9IHh5ZXMgJiYgJDI7IHRoZW4KK2RubCBXZSBwdXQgLVduby1lcnJvcj1mb28gYmVmb3JlIC1Xbm8tZm9vIGJlY2F1c2UgY2xhbmcgaW50ZXJwcmV0cyAtV2FsbAorZG5sIC1XZXJyb3IgLVduby1mb28gLVduby1lcnJvcj1mb28gYXMg4oCcbWFrZSBmb28gYSBub24tZmF0YWwgd2FybmluZ+KAnSwgYnV0IGRvZXMKK2RubCB3aGF0IHdlIHdhbnQgaWYgeW91IHJldmVyc2UgdGhlbS4KKyAgICAkMT0iJHRwX2Vycm9yX2ZsYWdzICR0cF93YXJuaW5ncyIKKyAgZWxzZQorICAgICQxPSIkdHBfd2FybmluZ3MiCisgIGZpCisKK10pCmRpZmYgLS1naXQgYS90ZXN0Ly5naXRpZ25vcmUgYi90ZXN0Ly5naXRpZ25vcmUKaW5kZXggNGVhYWU0YS4uMTMzN2RlNiAxMDA2NDQKLS0tIGEvdGVzdC8uZ2l0aWdub3JlCisrKyBiL3Rlc3QvLmdpdGlnbm9yZQpAQCAtNywzMyArNywyNCBAQAogKi5vCiBlY2hvLXNlcnZlcgogZWNoby1jbGllbnQKLXRlc3QtYnVzCitidXMtdGVzdAogdW5iYXNlNjQKICouYmIKICouYmJnCiAqLmRhCiAqLmdjb3YKIGJyZWFrLWxvYWRlcgotdGVzdC1zcGF3bgorc3Bhd24tdGVzdAogdGVzdC1jb3JydXB0CiB0ZXN0LWV4aXQKIHRlc3Qtc2VnZmF1bHQKIHRlc3Qtc2VydmljZQogdGVzdC1zbGVlcC1mb3JldmVyCiBkZWNvZGUtZ2NvdgotdGVzdC1zaGVsbAorc2hlbGwtdGVzdAogdGVzdC1zaGVsbC1zZXJ2aWNlCiB0ZXN0LW5hbWVzCiB0ZXN0LWxvb3BiYWNrCiB0ZXN0LXJlbGF5CiB0ZXN0LWRidXMtZGFlbW9uCiB0ZXN0LW1hcnNoYWwKLW1hbnVhbC1hdXRoegotbWFudWFsLWRpci1pdGVyCi1tYW51YWwtdGNwCi10ZXN0LWRidXMtZGFlbW9uLWVhdmVzZHJvcAotdGVzdC1wcmludGYKLXRlc3QtcmVmcwotdGVzdC1zeW50YXgKLXRlc3Qtc3lzbG9nCi1pbnRlcm5hbHMvLmRpcnN0YW1wCmRpZmYgLS1naXQgYS90ZXN0L01ha2VmaWxlLmFtIGIvdGVzdC9NYWtlZmlsZS5hbQppbmRleCBhZjFlMTNiLi43ZjRjZGQwIDEwMDY0NAotLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKyBiL3Rlc3QvTWFrZWZpbGUuYW0KQEAgLTEsMjkgKzEsMjIgQEAKLSMjIHRoZSAibmFtZS10ZXN0IiBzdWJkaXIgaW4gZmFjdCBjb250YWlucyBhIGJ1bmNoIG9mIHRlc3RzIG5vdyB0aGF0IG5lZWQgYSB0ZW1wb3JhcnkgYnVzCisjIyB0aGUgIm5hbWUtdGVzdCIgc3ViZGlyIGluIGZhY3QgY29udGFpbnMgYSBidW5jaCBvZiB0ZXN0cyBub3cgdGhhdCBuZWVkIGEgdGVtcG9yYXJ5IGJ1cyAKICMjIHRvIGJlIHJ1bm5pbmcgdG8gZG8gc3R1ZmYgd2l0aC4gVGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgcmVuYW1lZC4KICMjIFdlIHdhbnQgdG8gYnVpbGQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZpcnN0IHRvIHBpY2sgdXAgdGhlIHRlc3R1dGlscyBsaWIKLVNVQkRJUlM9IC4gbmFtZS10ZXN0CitTVUJESVJTPSAuIG5hbWUtdGVzdCAKIERJU1RfU1VCRElSUz1uYW1lLXRlc3QKIAogQ0xFQU5GSUxFUyA9CiBFWFRSQV9ESVNUID0KIAogQU1fQ1BQRkxBR1MgPSBcCi0JJChDT0RFX0NPVkVSQUdFX0NQUEZMQUdTKSBcCiAJLUkkKHRvcF9zcmNkaXIpIFwKIAkkKERCVVNfU1RBVElDX0JVSUxEX0NQUEZMQUdTKSBcCiAJLUREQlVTX0NPTVBJTEFUSU9OIFwKLQkkKEFQUEFSTU9SX0NGTEFHUykgXAogCSQoR0xJQl9DRkxBR1MpIFwKLQkkKEdJT19VTklYX0NGTEFHUykgXAogCSQoTlVMTCkKIAogIyBpbXByb3ZlIGJhY2t0cmFjZXMgZnJvbSB0ZXN0IHN0dWZmCiBBTV9MREZMQUdTID0gQFJfRFlOQU1JQ19MREZMQUdACiAKLUFNX0NGTEFHUyA9IFwKLQkkKENPREVfQ09WRVJBR0VfQ0ZMQUdTKSBcCi0JJChOVUxMKQotCiBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJkYnVzLXRlc3R1dGlscy5sYQogCiBsaWJkYnVzX3Rlc3R1dGlsc19sYV9TT1VSQ0VTID0gXApAQCAtMzksNyArMzIsNiBAQAogZW5kaWYKIAogbGliZGJ1c190ZXN0dXRpbHNfbGFfTElCQUREID0gXAotCSQoQ09ERV9DT1ZFUkFHRV9MSUJTKSBcCiAJJCh0b3BfYnVpbGRkaXIpL2RidXMvbGliZGJ1cy0xLmxhIFwKIAkkKHRvcF9idWlsZGRpcikvZGJ1cy9saWJkYnVzLWludGVybmFsLmxhIFwKIAkkKE5VTEwpCkBAIC0xMTUsMTggKzEwNyw5IEBACiB0ZXN0X3JlZnNfU09VUkNFUyA9IGludGVybmFscy9yZWZzLmMKIHRlc3RfcmVmc19MREFERCA9IGxpYmRidXMtdGVzdHV0aWxzLmxhICQoR0xJQl9MSUJTKQogCi10ZXN0X3NlcnZlcl9vb21fU09VUkNFUyA9IGludGVybmFscy9zZXJ2ZXItb29tLmMKLXRlc3Rfc2VydmVyX29vbV9MREFERCA9IGxpYmRidXMtdGVzdHV0aWxzLmxhICQoR0xJQl9MSUJTKQotCiB0ZXN0X3N5c2xvZ19TT1VSQ0VTID0gaW50ZXJuYWxzL3N5c2xvZy5jCiB0ZXN0X3N5c2xvZ19MREFERCA9IGxpYmRidXMtdGVzdHV0aWxzLmxhICQoR0xJQl9MSUJTKQogCi10ZXN0X3ZhcmlhbnRfU09VUkNFUyA9IGludGVybmFscy92YXJpYW50LmMKLXRlc3RfdmFyaWFudF9MREFERCA9IGxpYmRidXMtdGVzdHV0aWxzLmxhICQoR0xJQl9MSUJTKQotCi1tYW51YWxfYmFja3RyYWNlX1NPVVJDRVMgPSBtYW51YWwtYmFja3RyYWNlLmMKLW1hbnVhbF9iYWNrdHJhY2VfTERBREQgPSAkKHRvcF9idWlsZGRpcikvZGJ1cy9saWJkYnVzLTEubGEKLQogbWFudWFsX2Rpcl9pdGVyX1NPVVJDRVMgPSBtYW51YWwtZGlyLWl0ZXIuYwogbWFudWFsX2Rpcl9pdGVyX0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2RidXMvbGliZGJ1cy1pbnRlcm5hbC5sYQogCkBAIC0xNDEsMjUgKzEyNCwyMCBAQAogdGVzdGV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL2luc3RhbGxlZC10ZXN0cy9kYnVzCiB0ZXN0bWV0YWRpciA9ICQoZGF0YWRpcikvaW5zdGFsbGVkLXRlc3RzL2RidXMKIAotbm9iYXNlX2Rpc3RfdGVzdGV4ZWNfU0NSSVBUUyA9Ci1ub2Jhc2VfdGVzdGV4ZWNfUFJPR1JBTVMgPQotbm9iYXNlX3Rlc3RtZXRhX0RBVEEgPQorZGlzdF90ZXN0ZXhlY19TQ1JJUFRTID0KK3Rlc3RleGVjX1BST0dSQU1TID0KK3Rlc3RtZXRhX0RBVEEgPQogCi1pbnN0YWxsYWJsZV9oZWxwZXJzID0gXAotCSQoTlVMTCkKIGluc3RhbGxhYmxlX3Rlc3RzID0gXAogCXRlc3Qtc2hlbGwgXAogCXRlc3QtcHJpbnRmIFwKIAkkKE5VTEwpCiBpbnN0YWxsYWJsZV9tYW51YWxfdGVzdHMgPSBcCi0JbWFudWFsLWJhY2t0cmFjZSBcCiAJbWFudWFsLWRpci1pdGVyIFwKIAltYW51YWwtdGNwIFwKIAkkKE5VTEwpCiBkaXN0X2luc3RhbGxhYmxlX3Rlc3Rfc2NyaXB0cyA9IFwKIAkkKE5VTEwpCi1kaXN0X2luc3RhbGxlZF90ZXN0X3NjcmlwdHMgPSBcCi0JJChOVUxMKQogCiBpZiBEQlVTX1dJTgogaW5zdGFsbGFibGVfbWFudWFsX3Rlc3RzICs9IG1hbnVhbC1wYXRocwpAQCAtMTcxLDI1ICsxNDksMTcgQEAKIAl0ZXN0LWRidXMtZGFlbW9uIFwKIAl0ZXN0LWRidXMtZGFlbW9uLWVhdmVzZHJvcCBcCiAJdGVzdC1mZHBhc3MgXAotCXRlc3QtbWVzc2FnZSBcCiAJdGVzdC1tb25pdG9yIFwKIAl0ZXN0LWxvb3BiYWNrIFwKIAl0ZXN0LW1hcnNoYWwgXAogCXRlc3QtcmVmcyBcCiAJdGVzdC1yZWxheSBcCi0JdGVzdC1zZXJ2ZXItb29tIFwKIAl0ZXN0LXN5bnRheCBcCiAJdGVzdC1zeXNsb2cgXAogCXRlc3QtdWlkLXBlcm1pc3Npb25zIFwKLQl0ZXN0LXZhcmlhbnQgXAogCSQoTlVMTCkKIAogaWYgREJVU19VTklYCi0jIFRoZXNlIGJpbmFyaWVzIGFyZSB1c2VkIGluIHRlc3RzIGJ1dCBhcmUgbm90IHRoZW1zZWx2ZXMgdGVzdHMKLWluc3RhbGxhYmxlX2hlbHBlcnMgKz0gXAotCXRlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbiBcCi0JJChOVUxMKQotCiBpbnN0YWxsYWJsZV90ZXN0cyArPSBcCiAJdGVzdC1zZC1hY3RpdmF0aW9uIFwKIAkkKE5VTEwpCkBAIC0xOTgsODIgKzE2OCw1MCBAQAogCXRlc3QtZGJ1cy1kYWVtb24tZm9yay5zaCBcCiAJJChOVUxMKQogCi0jIE9ubHkgcnVubmFibGUgd2hlbiBpbnN0YWxsZWQsIG5vdCBmcm9tIHRoZSBzb3VyY2UgdHJlZQotZGlzdF9pbnN0YWxsZWRfdGVzdF9zY3JpcHRzICs9IFwKLQlpbnRlZ3JhdGlvbi90cmFuc2llbnQtc2VydmljZXMuc2ggXAotCXRlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbi5zaCBcCi0JJChOVUxMKQotCiAjIFRlc3RpbmcgZGJ1cy1sYXVuY2ggcmVsaWVzIG9uIHNwZWNpYWwgY29kZSBpbiB0aGF0IGJpbmFyeS4KIGlmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCiBkaXN0X2luc3RhbGxhYmxlX3Rlc3Rfc2NyaXB0cyArPSBcCiAJdGVzdC1kYnVzLWxhdW5jaC1ldmFsLnNoIFwKLQkkKE5VTEwpCi0KLWlmIERCVVNfRU5BQkxFX1gxMV9BVVRPTEFVTkNICi1kaXN0X2luc3RhbGxhYmxlX3Rlc3Rfc2NyaXB0cyArPSBcCiAJdGVzdC1kYnVzLWxhdW5jaC14MTEuc2ggXAogCSQoTlVMTCkKLWVuZGlmIERCVVNfRU5BQkxFX1gxMV9BVVRPTEFVTkNICiBlbmRpZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogCiBlbmRpZiBEQlVTX1VOSVgKIAogaW5zdGFsbGFibGVfbWFudWFsX3Rlc3RzICs9IFwKIAltYW51YWwtYXV0aHogXAotCW1hbnVhbC10ZXN0LXRocmVhZC1ibG9ja2luZyBcCiAJJChOVUxMKQogZW5kaWYgREJVU19XSVRIX0dMSUIKIAogaW5zdGFsbGFibGVfdGVzdF9tZXRhID0gXAogCSQoZGlzdF9pbnN0YWxsYWJsZV90ZXN0X3NjcmlwdHM6PS50ZXN0KSBcCi0JJChkaXN0X2luc3RhbGxlZF90ZXN0X3NjcmlwdHM6PS50ZXN0KSBcCiAJJChpbnN0YWxsYWJsZV90ZXN0czo9LnRlc3QpIFwKIAkkKE5VTEwpCiBpbnN0YWxsYWJsZV90ZXN0X21ldGFfd2l0aF9jb25maWcgPSBcCiAJJChkaXN0X2luc3RhbGxhYmxlX3Rlc3Rfc2NyaXB0czo9X3dpdGhfY29uZmlnLnRlc3QpIFwKLQkkKGRpc3RfaW5zdGFsbGVkX3Rlc3Rfc2NyaXB0czo9X3dpdGhfY29uZmlnLnRlc3QpIFwKIAkkKGluc3RhbGxhYmxlX3Rlc3RzOj1fd2l0aF9jb25maWcudGVzdCkgXAogCSQoTlVMTCkKIAogaW5zdGFsbGNoZWNrX3Rlc3RzID0KIGluc3RhbGxjaGVja19lbnZpcm9ubWVudCA9IFwKLQlleHBvcnQgWERHX0RBVEFfSE9NRT1AYWJzX3RvcF9idWlsZGRpckAvdGVzdC9YREdfREFUQV9IT01FOyBcCi0JZXhwb3J0IFhER19EQVRBX0RJUlM9QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvWERHX0RBVEFfRElSUzokKERFU1RESVIpJChkYXRhZGlyKTsgXAogCWV4cG9ydCBYREdfUlVOVElNRV9ESVI9QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvWERHX1JVTlRJTUVfRElSOyBcCi0JZXhwb3J0IERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz1kby1ub3QtdXNlLXJlYWwtc2Vzc2lvbjo7IFwKIAlleHBvcnQgREJVU19URVNUX0RBRU1PTj0kKERFU1RESVIpJChEQlVTX0RBRU1PTkRJUikvZGJ1cy1kYWVtb24kKEVYRUVYVCk7IFwKIAlleHBvcnQgREJVU19URVNUX0RCVVNfTEFVTkNIPSQoREVTVERJUikkKGJpbmRpcikvZGJ1cy1sYXVuY2gkKEVYRUVYVCk7IFwKIAlleHBvcnQgREJVU19URVNUX0RCVVNfTU9OSVRPUj0kKERFU1RESVIpJChiaW5kaXIpL2RidXMtbW9uaXRvciQoRVhFRVhUKTsgXAogCWV4cG9ydCBEQlVTX1RFU1RfREJVU19TRU5EPSQoREVTVERJUikkKGJpbmRpcikvZGJ1cy1zZW5kJChFWEVFWFQpOyBcCi0JZXhwb3J0IERCVVNfVEVTVF9EQlVTX1VVSURHRU49JChERVNURElSKSQoYmluZGlyKS9kYnVzLXV1aWRnZW4kKEVYRUVYVCk7IFwKLQlleHBvcnQgREJVU19URVNUX0VYRUM9QGFic190b3BfYnVpbGRkaXJAL3Rlc3Q7IFwKIAlleHBvcnQgREJVU19URVNUX0hPTUVESVI9QGFic190b3BfYnVpbGRkaXJAL2RidXM7IFwKIAlleHBvcnQgREJVU19URVNUX0RBVEFESVI9JChERVNURElSKSQoZGF0YWRpcik7IFwKLQlleHBvcnQgREJVU19URVNUX1VOSU5TVEFMTEVEPTE7IFwKLQlleHBvcnQgSE9NRT1AYWJzX3RvcF9idWlsZGRpckAvZGJ1czsgXAogCSR7TlVMTH0KIAotIyBUZXN0cyBpbiBidXMvY29uZmlnLXBhcnNlci5jIHJlbHkgb24gdGhlc2Ugc3BlY2lmaWMgdmFsdWVzIGZvciBYREdfKiBhbmQKLSMgREJVU19URVNUX0JVSUxERElSLgogQU1fVEVTVFNfRU5WSVJPTk1FTlQgPSBcCi0JZXhwb3J0IFhER19EQVRBX0hPTUU9QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvWERHX0RBVEFfSE9NRTsgXAotCWV4cG9ydCBYREdfREFUQV9ESVJTPUBhYnNfdG9wX2J1aWxkZGlyQC90ZXN0L1hER19EQVRBX0RJUlM6QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvWERHX0RBVEFfRElSUzI7IFwKIAlleHBvcnQgWERHX1JVTlRJTUVfRElSPUBhYnNfdG9wX2J1aWxkZGlyQC90ZXN0L1hER19SVU5USU1FX0RJUjsgXAogCWV4cG9ydCBEQlVTX0ZBVEFMX1dBUk5JTkdTPTE7IFwKLQlleHBvcnQgREJVU19TRVNTSU9OX0JVU19BRERSRVNTPWRvLW5vdC11c2UtcmVhbC1zZXNzaW9uOjsgXAotCWV4cG9ydCBEQlVTX1RFU1RfQlVJTERESVI9QGFic19idWlsZGRpckA7IFwKLQlleHBvcnQgREJVU19URVNUX1NSQ0RJUj1AYWJzX3NyY2RpckA7IFwKIAlleHBvcnQgREJVU19URVNUX0RBRU1PTj1AYWJzX3RvcF9idWlsZGRpckAvYnVzL2RidXMtZGFlbW9uJChFWEVFWFQpOyBcCiAJZXhwb3J0IERCVVNfVEVTVF9EQlVTX0xBVU5DSD1AYWJzX3RvcF9idWlsZGRpckAvdG9vbHMvZGJ1cy1sYXVuY2gkKEVYRUVYVCk7IFwKIAlleHBvcnQgREJVU19URVNUX0RCVVNfTU9OSVRPUj1AYWJzX3RvcF9idWlsZGRpckAvdG9vbHMvZGJ1cy1tb25pdG9yJChFWEVFWFQpOyBcCiAJZXhwb3J0IERCVVNfVEVTVF9EQlVTX1NFTkQ9QGFic190b3BfYnVpbGRkaXJAL3Rvb2xzL2RidXMtc2VuZCQoRVhFRVhUKTsgXAotCWV4cG9ydCBEQlVTX1RFU1RfREJVU19VVUlER0VOPUBhYnNfdG9wX2J1aWxkZGlyQC90b29scy9kYnVzLXV1aWRnZW4kKEVYRUVYVCk7IFwKIAlleHBvcnQgREJVU19URVNUX0RBVEE9QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvZGF0YTsgXAotCWV4cG9ydCBEQlVTX1RFU1RfRVhFQz1AYWJzX3RvcF9idWlsZGRpckAvdGVzdDsgXAogCWV4cG9ydCBEQlVTX1RFU1RfSE9NRURJUj1AYWJzX3RvcF9idWlsZGRpckAvZGJ1czsgXAotCWV4cG9ydCBEQlVTX1RFU1RfVU5JTlNUQUxMRUQ9MTsgXAotCWV4cG9ydCBIT01FPUBhYnNfdG9wX2J1aWxkZGlyQC9kYnVzOyBcCiAJJChOVUxMKQogCiBtYW51YWxfYXV0aHpfU09VUkNFUyA9IG1hbnVhbC1hdXRoei5jCkBAIC0yODIsMjEgKzIyMCw2IEBACiAgICAgJChHTElCX0xJQlMpIFwKICAgICAkKE5VTEwpCiAKLWlmIERCVVNfVU5JWAotdGVzdF9hcHBhcm1vcl9hY3RpdmF0aW9uX0NQUEZMQUdTID0gXAotICAgICQoQU1fQ1BQRkxBR1MpIFwKLSAgICAtRERCVVNfVEVTVF9BUFBBUk1PUl9BQ1RJVkFUSU9OIFwKLSAgICAkKE5VTEwpCi10ZXN0X2FwcGFybW9yX2FjdGl2YXRpb25fU09VUkNFUyA9IFwKLSAgICBzZC1hY3RpdmF0aW9uLmMgXAotICAgICQoTlVMTCkKLXRlc3RfYXBwYXJtb3JfYWN0aXZhdGlvbl9MREFERCA9IFwKLSAgICBsaWJkYnVzLXRlc3R1dGlscy5sYSBcCi0gICAgJChBUFBBUk1PUl9MSUJTKSBcCi0gICAgJChHTElCX0xJQlMpIFwKLSAgICAkKE5VTEwpCi1lbmRpZgotCiB0ZXN0X2NvcnJ1cHRfU09VUkNFUyA9IGNvcnJ1cHQuYwogdGVzdF9jb3JydXB0X0xEQUREID0gXAogICAgIGxpYmRidXMtdGVzdHV0aWxzLmxhIFwKQEAgLTMxOSw3ICsyNDIsNiBAQAogdGVzdF9kYnVzX2RhZW1vbl9MREFERCA9IFwKICAgICBsaWJkYnVzLXRlc3R1dGlscy5sYSBcCiAgICAgJChHTElCX0xJQlMpIFwKLSAgICAkKEdJT19VTklYX0xJQlMpIFwKICAgICAkKE5VTEwpCiAKIHRlc3RfZGJ1c19kYWVtb25fZWF2ZXNkcm9wX1NPVVJDRVMgPSBkYnVzLWRhZW1vbi1lYXZlc2Ryb3AuYwpAQCAtMzQ0LDE1ICsyNjYsNiBAQAogICAgICQoR0xJQl9MSUJTKSBcCiAgICAgJChOVUxMKQogCi10ZXN0X21lc3NhZ2VfU09VUkNFUyA9IFwKLSAgICBtZXNzYWdlLmMgXAotICAgICQoTlVMTCkKLXRlc3RfbWVzc2FnZV9MREFERCA9IFwKLSAgICBsaWJkYnVzLXRlc3R1dGlscy5sYSBcCi0gICAgJCh0b3BfYnVpbGRkaXIpL2RidXMvbGliZGJ1cy1pbnRlcm5hbC5sYSBcCi0gICAgJChHTElCX0xJQlMpIFwKLSAgICAkKE5VTEwpCi0KIHRlc3RfbW9uaXRvcl9TT1VSQ0VTID0gXAogICAgIG1vbml0b3IuYyBcCiAgICAgJChOVUxMKQpAQCAtMzY3LDEyICsyODAsNiBAQAogICAgICQoR0xJQl9MSUJTKSBcCiAgICAgJChOVUxMKQogCi1tYW51YWxfdGVzdF90aHJlYWRfYmxvY2tpbmdfU09VUkNFUyA9IHRocmVhZC1ibG9ja2luZy5jCi1tYW51YWxfdGVzdF90aHJlYWRfYmxvY2tpbmdfTERBREQgPSBcCi0gICAgbGliZGJ1cy10ZXN0dXRpbHMubGEgXAotICAgICQoR0xJQl9MSUJTKSBcCi0gICAgJChOVUxMKQotCiB0ZXN0X3VpZF9wZXJtaXNzaW9uc19TT1VSQ0VTID0gXAogICAgIHVpZC1wZXJtaXNzaW9ucy5jIFwKICAgICAkKE5VTEwpCkBAIC0zOTcsMTQgKzMwNCwxMSBAQAogaW5zdGFsbGNoZWNrX3Rlc3RzICs9ICQoaW5zdGFsbGFibGVfdGVzdHMpCiAKIGlmIERCVVNfRU5BQkxFX0lOU1RBTExFRF9URVNUUwotICBub2Jhc2VfdGVzdGV4ZWNfUFJPR1JBTVMgKz0gJChpbnN0YWxsYWJsZV9oZWxwZXJzKQotICBub2Jhc2VfdGVzdGV4ZWNfUFJPR1JBTVMgKz0gJChpbnN0YWxsYWJsZV9tYW51YWxfdGVzdHMpCi0gIG5vYmFzZV90ZXN0ZXhlY19QUk9HUkFNUyArPSAkKGluc3RhbGxhYmxlX3Rlc3RzKQotICBub2Jhc2VfZGlzdF90ZXN0ZXhlY19TQ1JJUFRTICs9ICQoZGlzdF9pbnN0YWxsZWRfdGVzdF9zY3JpcHRzKQotICBub2Jhc2VfZGlzdF90ZXN0ZXhlY19TQ1JJUFRTICs9ICQoZGlzdF9pbnN0YWxsYWJsZV90ZXN0X3NjcmlwdHMpCisgIHRlc3RleGVjX1BST0dSQU1TICs9ICQoaW5zdGFsbGFibGVfdGVzdHMpICQoaW5zdGFsbGFibGVfbWFudWFsX3Rlc3RzKQorICBkaXN0X3Rlc3RleGVjX1NDUklQVFMgKz0gJChkaXN0X2luc3RhbGxhYmxlX3Rlc3Rfc2NyaXB0cykKIAotICBub2Jhc2VfdGVzdG1ldGFfREFUQSArPSAkKGluc3RhbGxhYmxlX3Rlc3RfbWV0YSkKLSAgbm9iYXNlX3Rlc3RtZXRhX0RBVEEgKz0gJChpbnN0YWxsYWJsZV90ZXN0X21ldGFfd2l0aF9jb25maWcpCisgIHRlc3RtZXRhX0RBVEEgKz0gJChpbnN0YWxsYWJsZV90ZXN0X21ldGEpCisgIHRlc3RtZXRhX0RBVEEgKz0gJChpbnN0YWxsYWJsZV90ZXN0X21ldGFfd2l0aF9jb25maWcpCiBlbHNlICFEQlVTX0VOQUJMRV9JTlNUQUxMRURfVEVTVFMKICAgbm9pbnN0X1BST0dSQU1TICs9ICQoaW5zdGFsbGFibGVfdGVzdHMpICQoaW5zdGFsbGFibGVfbWFudWFsX3Rlc3RzKQogZW5kaWYgIURCVVNfRU5BQkxFX0lOU1RBTExFRF9URVNUUwpAQCAtNDI2LDI3ICszMzAsMTQgQEAKIGVuZGlmIERCVVNfRU5BQkxFX0lOU1RBTExFRF9URVNUUwogCiBpbl9kYXRhID0gXAotCWRhdGEvZGJ1cy1pbnN0YWxsZWQtdGVzdHMuYWFwcm9maWxlLmluIFwKLQlkYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5SZWNlaXZlRGVuaWVkQnlBcHBBcm1vckxhYmVsLnNlcnZpY2UuaW4gXAotCWRhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwuc2VydmljZS5pbiBcCi0JZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsLnNlcnZpY2UuaW4gXAotCWRhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlN5c3RlbWRBY3RpdmF0YWJsZTMuc2VydmljZS5pbiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMtc3lzdGVtL2RlYnVnLWFsbG93LWFsbC1mYWlsLmNvbmYuaW4gXAogCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzLXN5c3RlbS9kZWJ1Zy1hbGxvdy1hbGwtcGFzcy5jb25mLmluIFwKLQlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9hcy1hbm90aGVyLXVzZXIuY29uZi5pbiBcCi0JZGF0YS92YWxpZC1jb25maWctZmlsZXMvY291bnQtZmRzLmNvbmYuaW4gXAogCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2RlYnVnLWFsbG93LWFsbC1zaGExLmNvbmYuaW4gXAogCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2RlYnVnLWFsbG93LWFsbC5jb25mLmluIFwKIAlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9maW5pdGUtdGltZW91dC5jb25mLmluIFwKIAlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9mb3JiaWRkaW5nLmNvbmYuaW4gXAogCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2luY29taW5nLWxpbWl0LmNvbmYuaW4gXAotCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1jb21wbGV0ZWQtY29ubmVjdGlvbnMuY29uZi5pbiBcCi0JZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LWNvbm5lY3Rpb25zLXBlci11c2VyLmNvbmYuaW4gXAotCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1tYXRjaC1ydWxlcy1wZXItY29ubmVjdGlvbi5jb25mLmluIFwKLQlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYXgtbmFtZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbiBcCi0JZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LXJlcGxpZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvbXVsdGktdXNlci5jb25mLmluIFwKLQlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9wZW5kaW5nLWZkLXRpbWVvdXQuY29uZi5pbiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvc3lzdGVtZC1hY3RpdmF0aW9uLmNvbmYuaW4gXAogCWRhdGEvaW52YWxpZC1zZXJ2aWNlLWZpbGVzLXN5c3RlbS9vcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVOb0V4ZWMuc2VydmljZS5pbiBcCiAJZGF0YS9pbnZhbGlkLXNlcnZpY2UtZmlsZXMtc3lzdGVtL29yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZU5vU2VydmljZS5zZXJ2aWNlLmluIFwKQEAgLTQ3MSw4ICszNjIsNiBAQAogCWRhdGEvYXV0aC9hbm9ueW1vdXMtc2VydmVyLXN1Y2Nlc3NmdWwuYXV0aC1zY3JpcHQgXAogCWRhdGEvYXV0aC9jYW5jZWwuYXV0aC1zY3JpcHQgXAogCWRhdGEvYXV0aC9jbGllbnQtb3V0LW9mLW1lY2hhbmlzbXMuYXV0aC1zY3JpcHQgXAotCWRhdGEvYXV0aC9jb29raWUtc2hhMS11c2VybmFtZS5hdXRoLXNjcmlwdCBcCi0JZGF0YS9hdXRoL2Nvb2tpZS1zaGExLmF1dGgtc2NyaXB0IFwKIAlkYXRhL2F1dGgvZXh0ZXJuYWwtZmFpbGVkLmF1dGgtc2NyaXB0IFwKIAlkYXRhL2F1dGgvZXh0ZXJuYWwtcm9vdC5hdXRoLXNjcmlwdCBcCiAJZGF0YS9hdXRoL2V4dGVybmFsLXNpbGx5LmF1dGgtc2NyaXB0IFwKQEAgLTQ5NiwxMCArMzg1LDggQEAKIAlkYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL2NpcmN1bGFyLTEuY29uZiBcCiAJZGF0YS9pbnZhbGlkLWNvbmZpZy1maWxlcy9jaXJjdWxhci0yLmNvbmYgXAogCWRhdGEvaW52YWxpZC1jb25maWctZmlsZXMvY2lyY3VsYXItMy5jb25mIFwKLQlkYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL2ltcG9zc2libGUtc2VuZC5jb25mIFwKIAlkYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL25vdC13ZWxsLWZvcm1lZC5jb25mIFwKIAlkYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL3RydW5jYXRlZC1maWxlLmNvbmYgXAotCWRhdGEvaW52YWxpZC1jb25maWctZmlsZXMvc2VuZC1hbmQtcmVjZWl2ZS5jb25mIFwKIAlkYXRhL2ludmFsaWQtbWVzc2FnZXMvYXJyYXktb2YtbmlsLm1lc3NhZ2UgXAogCWRhdGEvaW52YWxpZC1tZXNzYWdlcy9hcnJheS13aXRoLW1peGVkLXR5cGVzLm1lc3NhZ2UgXAogCWRhdGEvaW52YWxpZC1tZXNzYWdlcy9iYWQtYm9vbGVhbi1hcnJheS5tZXNzYWdlIFwKQEAgLTUyMCwyMCArNDA3LDE1IEBACiAJZGF0YS9zaGEtMS9iaXQtbWVzc2FnZXMuc2hhMSBcCiAJZGF0YS9zaGEtMS9ieXRlLWhhc2hlcy5zaGExIFwKIAlkYXRhL3NoYS0xL2J5dGUtbWVzc2FnZXMuc2hhMSBcCi0JZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZC5zZXJ2aWNlIFwKLQlkYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TZW5kRGVuaWVkLnNlcnZpY2UgXAotCWRhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTmFtZS5zZXJ2aWNlIFwKIAlkYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUxLnNlcnZpY2UgXAogCWRhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlN5c3RlbWRBY3RpdmF0YWJsZTIuc2VydmljZSBcCisJZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU3lzdGVtZEFjdGl2YXRhYmxlMy5zZXJ2aWNlIFwKIAlkYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9vcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEuc2VydmljZSBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvYmFzaWMuY29uZiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvYmFzaWMuZC9iYXNpYy5jb25mIFwKLQlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9jaGVjay1vd24tcnVsZXMuY29uZiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvZW50aXRpZXMuY29uZiBcCiAJZGF0YS92YWxpZC1jb25maWctZmlsZXMvbGlzdGVuLXVuaXgtcnVudGltZS5jb25mIFwKIAlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYW55LXJ1bGVzLmNvbmYgXAotCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3N0YW5kYXJkLXNlc3Npb24tZGlycy5jb25mIFwKLQlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy1zeXN0ZW0vbWFueS1ydWxlcy5jb25mIFwKIAlkYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy1zeXN0ZW0vc3lzdGVtLmQvdGVzdC5jb25mIFwKIAlkYXRhL3ZhbGlkLW1lc3NhZ2VzL2FycmF5LW9mLWFycmF5LW9mLXVpbnQzMi5tZXNzYWdlIFwKIAlkYXRhL3ZhbGlkLW1lc3NhZ2VzL2RpY3Qtc2ltcGxlLm1lc3NhZ2UgXApAQCAtNTU2LDExICs0MzgsOCBAQAogCiAjIyBjb3B5IHRlc3RzIHRvIGJ1aWxkZGlyIHNvIHRoYXQgZ2VuZXJhdGVkIHRlc3RzIGFuZCBzdGF0aWMgdGVzdHMKICMjIGFyZSBhbGwgaW4gb25lIHBsYWNlLgotIyMgTm90ZSB0aGF0IHdlIGNhbid0IGNyZWF0ZSB0aGUgWERHX1JVTlRJTUVfRElSIHdpdGggcGVybWlzc2lvbnMgMDcwMAotIyMgb24gTVNZUzIsIHdoaWNoIHJlamVjdHMgYXR0ZW1wdHMgdG8gY2hhbmdlIHBlcm1pc3Npb25zLCBoZW5jZSAifHwgdHJ1ZSIuCiBhbGwtbG9jYWw6IGNvcHktY29uZmlnLWxvY2FsIHVuaW5zdGFsbGVkLWNvbmZpZy1sb2NhbAotCSQoQU1fVl9hdCkkKE1LRElSX1ApIFhER19SVU5USU1FX0RJUgotCSQoQU1fVl9hdCljaG1vZCAwNzAwIFhER19SVU5USU1FX0RJUiB8fCB0cnVlCisJQDoKIAogY29weS1jb25maWctbG9jYWw6CiAJJChBTV9WX2F0KSQoTUtESVJfUCkgZGF0YS92YWxpZC1jb25maWctZmlsZXMvc2Vzc2lvbi5kCkBAIC01ODIsNyArNDYxLDYgQEAKIAkJc2VkIFwKIAkJCS1lICdzLFtAXURCVVNfVEVTVF9EQVRBW0BdLEBhYnNfYnVpbGRkaXJAL2RhdGEsJyBcCiAJCQktZSAncyxbQF1EQlVTX1RFU1RfRVhFQ1tAXSxAYWJzX2J1aWxkZGlyQCwnIFwKLQkJCS1lICdzLFtAXURCVVNfVVNFUltAXSwkKERCVVNfVVNFUiksJyBcCiAJCQktZSAncyxbQF1FWEVFWFRbQF0sJChFWEVFWFQpLCcgXAogCQkJLWUgJ3MsW0BdVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWVtAXSxAYWJzX3RvcF9idWlsZGRpckAvYnVzL2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXItdGVzdCQoRVhFRVhUKSwnIFwKIAkJCS1lICdzLFtAXVRFU1RfTElTVEVOW0BdLCQoVEVTVF9MSVNURU4pLCcgXApAQCAtNTk3LDcgKzQ3NSw2IEBACiAJCXNlZCBcCiAJCQktZSAncyxbQF1EQlVTX1RFU1RfREFUQVtAXSwkKHRlc3RleGVjZGlyKS9kYXRhLCcgXAogCQkJLWUgJ3MsW0BdREJVU19URVNUX0VYRUNbQF0sJCh0ZXN0ZXhlY2RpciksJyBcCi0JCQktZSAncyxbQF1EQlVTX1VTRVJbQF0sJChEQlVTX1VTRVIpLCcgXAogCQkJLWUgJ3MsW0BdRVhFRVhUW0BdLCQoRVhFRVhUKSwnIFwKIAkJCS1lICdzLFtAXVRFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUllbQF0sL2Jpbi9mYWxzZSwnIFwKIAkJCS1lICdzLFtAXVRFU1RfTElTVEVOW0BdLCQoVEVTVF9MSVNURU4pLCcgXApAQCAtNjM4LDcgKzUxNSw2IEBACiAJCQlybSAtZiAiJCR7RiUuaW59IjsgXAogCQlkb25lOyBcCiAJZmkKLQlybSAtZnIgLi9YREdfUlVOVElNRV9ESVIgLi9pbnN0YWxsYWJsZQogCiBpbXBvcnRlZF9kYXRhID0gXAogCWRhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3Nlc3Npb24uY29uZiBcCkBAIC02NDgsNiArNTI0LDggQEAKIG5vaW5zdF9EQVRBID0gJChpbXBvcnRlZF9kYXRhKQogQ0xFQU5GSUxFUyArPSBcCiAJJChub2luc3RfREFUQSkgXAorCVhER19SVU5USU1FX0RJUiBcCisJaW5zdGFsbGFibGUgXAogCSQoTlVMTCkKIAogZGF0YS92YWxpZC1jb25maWctZmlsZXMvc2Vzc2lvbi5jb25mOiAkKHRvcF9idWlsZGRpcikvYnVzL3Nlc3Npb24uY29uZgpAQCAtNjU5LDcgKzUzNyw2IEBACiAJJChBTV9WX0dFTiljcCAkPCAkQAogCiAkKGluc3RhbGxhYmxlX3Rlc3RfbWV0YSk6ICUudGVzdDogJSQoRVhFRVhUKSBNYWtlZmlsZQotCSQoQU1fVl9hdCkkKE1LRElSX1ApICQoZGlyICRAKQogCSQoQU1fVl9HRU4pICggXAogCQllY2hvICdbVGVzdF0nOyBcCiAJCWVjaG8gJ1R5cGU9c2Vzc2lvbic7IFwKQEAgLTY2OCwxMyArNTQ1LDkgQEAKIAkpID4gJEAudG1wICYmIG12ICRALnRtcCAkQAogCiAkKGluc3RhbGxhYmxlX3Rlc3RfbWV0YV93aXRoX2NvbmZpZyk6ICVfd2l0aF9jb25maWcudGVzdDogJSQoRVhFRVhUKSBNYWtlZmlsZQotCSQoQU1fVl9hdCkkKE1LRElSX1ApICQoZGlyICRAKQogCSQoQU1fVl9HRU4pICggXAogCQllY2hvICdbVGVzdF0nOyBcCiAJCWVjaG8gJ1R5cGU9c2Vzc2lvbic7IFwKIAkJZWNobyAnT3V0cHV0PVRBUCc7IFwKLQkJZWNobyAnRXhlYz1lbnYgREJVU19URVNUX0VYRUM9JCh0ZXN0ZXhlY2RpcikgREJVU19URVNUX0RBVEE9JCh0ZXN0ZXhlY2RpcikvZGF0YSAkKHRlc3RleGVjZGlyKS8kKiAtLXRhcCc7IFwKKwkJZWNobyAnRXhlYz1lbnYgREJVU19URVNUX0RBVEE9JCh0ZXN0ZXhlY2RpcikvZGF0YSAkKHRlc3RleGVjZGlyKS8kKiAtLXRhcCc7IFwKIAkpID4gJEAudG1wICYmIG12ICRALnRtcCAkQAotCi0jIEFkZCBydWxlcyBmb3IgY29kZS1jb3ZlcmFnZSB0ZXN0aW5nLCBhcyBkZWZpbmVkIGJ5IEFYX0NPREVfQ09WRVJBR0UKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9hbWluY2x1ZGVfc3RhdGljLmFtCmRpZmYgLS1naXQgYS90ZXN0L2NvcnJ1cHQuYyBiL3Rlc3QvY29ycnVwdC5jCmluZGV4IGE2YTkxMmYuLmQxMDZmY2MgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29ycnVwdC5jCisrKyBiL3Rlc3QvY29ycnVwdC5jCkBAIC0zNiw3ICszNiw2IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgREJ1c0Vycm9yIGU7CiAgICAgVGVzdE1haW5Db250ZXh0ICpjdHg7Ci0gICAgZ2Jvb2xlYW4gc2tpcDsKIAogICAgIERCdXNTZXJ2ZXIgKnNlcnZlcjsKICAgICBEQnVzQ29ubmVjdGlvbiAqc2VydmVyX2Nvbm47CkBAIC04NiwxNCArODUsNiBAQAogICBkYnVzX2Vycm9yX2luaXQgKCZmLT5lKTsKICAgZ19xdWV1ZV9pbml0ICgmZi0+Y2xpZW50X21lc3NhZ2VzKTsKIAotICBpZiAoKGdfc3RyX2hhc19wcmVmaXggKGFkZHIsICJ0Y3A6IikgfHwKLSAgICAgICBnX3N0cl9oYXNfcHJlZml4IChhZGRyLCAibm9uY2UtdGNwOiIpKSAmJgotICAgICAgIXRlc3RfY2hlY2tfdGNwX3dvcmtzICgpKQotICAgIHsKLSAgICAgIGYtPnNraXAgPSBUUlVFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQogICBmLT5zZXJ2ZXIgPSBkYnVzX3NlcnZlcl9saXN0ZW4gKGFkZHIsICZmLT5lKTsKICAgYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7CiAgIGdfYXNzZXJ0IChmLT5zZXJ2ZXIgIT0gTlVMTCk7CkBAIC0xMDgsMTkgKzk5LDE0IEBACiAgICAgZ2NvbnN0cG9pbnRlciBhZGRyIEdfR05VQ19VTlVTRUQpCiB7CiAgIGRidXNfYm9vbF90IGhhdmVfbWVtOwotICBjaGFyICphZGRyZXNzID0gTlVMTDsKLQotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47CiAKICAgZ19hc3NlcnQgKGYtPnNlcnZlcl9jb25uID09IE5VTEwpOwogCi0gIGFkZHJlc3MgPSBkYnVzX3NlcnZlcl9nZXRfYWRkcmVzcyAoZi0+c2VydmVyKTsKLSAgZi0+Y2xpZW50X2Nvbm4gPSBkYnVzX2Nvbm5lY3Rpb25fb3Blbl9wcml2YXRlIChhZGRyZXNzLCAmZi0+ZSk7CisgIGYtPmNsaWVudF9jb25uID0gZGJ1c19jb25uZWN0aW9uX29wZW5fcHJpdmF0ZSAoCisgICAgICBkYnVzX3NlcnZlcl9nZXRfYWRkcmVzcyAoZi0+c2VydmVyKSwgJmYtPmUpOwogICBhc3NlcnRfbm9fZXJyb3IgKCZmLT5lKTsKICAgZ19hc3NlcnQgKGYtPmNsaWVudF9jb25uICE9IE5VTEwpOwogICB0ZXN0X2Nvbm5lY3Rpb25fc2V0dXAgKGYtPmN0eCwgZi0+Y2xpZW50X2Nvbm4pOwotICBkYnVzX2ZyZWUgKGFkZHJlc3MpOwogCiAgIHdoaWxlIChmLT5zZXJ2ZXJfY29ubiA9PSBOVUxMKQogICAgIHsKQEAgLTE0MSw5ICsxMjcsNiBAQAogICBkYnVzX3VpbnQzMl90IHNlcmlhbDsKICAgREJ1c01lc3NhZ2UgKm91dGdvaW5nLCAqaW5jb21pbmc7CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIHRlc3RfY29ubmVjdCAoZiwgYWRkcik7CiAKICAgb3V0Z29pbmcgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9jb20vZXhhbXBsZS9IZWxsbyIsCkBAIC0yMjgsOSArMjExLDYgQEAKICAgaW50IGZkOwogICBEQnVzTWVzc2FnZSAqaW5jb21pbmc7CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIHRlc3RfbWVzc2FnZSAoZiwgYWRkcik7CiAKICAgZGJ1c19jb25uZWN0aW9uX2ZsdXNoIChmLT5zZXJ2ZXJfY29ubik7CkBAIC0yOTEsMTMgKzI3MSwxMSBAQAogICBpbnQgZmQ7CiAgIGNoYXIgKmJsb2I7CiAgIGNvbnN0IGdjaGFyICphcmcgPSBub3RfYV9kYnVzX21lc3NhZ2U7CisgIGNvbnN0IGdjaGFyICogY29uc3QgKmFyZ3MgPSAmYXJnOwogICBpbnQgYmxvYl9sZW47CiAgIERCdXNNZXNzYWdlICptZXNzYWdlOwogICBkYnVzX2Jvb2xfdCBtZW07CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIHRlc3RfbWVzc2FnZSAoZiwgYWRkcik7CiAKICAgbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiLyIsICJhLmIiLCAiYyIpOwpAQCAtMzA1LDcgKzI4Myw3IEBACiAgIC8qIEFwcGVuZCAweEZGIGJ5dGVzLCBzbyB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIGJvZHkgd2hlbiBieXRlLXN3YXBwZWQKICAgICogaXMgMHhGRjAwMDAwMCwgd2hpY2ggaXMgaW52YWxpZCAqLwogICBtZW0gPSBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG1lc3NhZ2UsCi0gICAgICBEQlVTX1RZUEVfQVJSQVksIERCVVNfVFlQRV9CWVRFLCAmYXJnLCAweEZGLAorICAgICAgREJVU19UWVBFX0FSUkFZLCBEQlVTX1RZUEVfQllURSwgJmFyZ3MsIDB4RkYsCiAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CiAgIGdfYXNzZXJ0IChtZW0pOwogICBtZW0gPSBkYnVzX21lc3NhZ2VfbWFyc2hhbCAobWVzc2FnZSwgJmJsb2IsICZibG9iX2xlbik7CkBAIC0zNzUsNyArMzUzLDYgQEAKIHsKICAgaWYgKGYtPmNsaWVudF9jb25uICE9IE5VTEwpCiAgICAgewotICAgICAgdGVzdF9jb25uZWN0aW9uX3NodXRkb3duIChmLT5jdHgsIGYtPmNsaWVudF9jb25uKTsKICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+Y2xpZW50X2Nvbm4pOwogICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChmLT5jbGllbnRfY29ubik7CiAgICAgICBmLT5jbGllbnRfY29ubiA9IE5VTEw7CkBAIC0zODMsNyArMzYwLDYgQEAKIAogICBpZiAoZi0+c2VydmVyX2Nvbm4gIT0gTlVMTCkKICAgICB7Ci0gICAgICB0ZXN0X2Nvbm5lY3Rpb25fc2h1dGRvd24gKGYtPmN0eCwgZi0+c2VydmVyX2Nvbm4pOwogICAgICAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlIChmLT5zZXJ2ZXJfY29ubik7CiAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYgKGYtPnNlcnZlcl9jb25uKTsKICAgICAgIGYtPnNlcnZlcl9jb25uID0gTlVMTDsKQEAgLTQxNiwxMCArMzkyLDUgQEAKICAgZ190ZXN0X2FkZCAoIi9jb3JydXB0L2J5dGUtb3JkZXIvdGNwIiwgRml4dHVyZSwgInRjcDpob3N0PTEyNy4wLjAuMSIsIHNldHVwLAogICAgICAgdGVzdF9ieXRlX29yZGVyLCB0ZWFyZG93bik7CiAKLSNpZmRlZiBEQlVTX1VOSVgKLSAgZ190ZXN0X2FkZCAoIi9jb3JydXB0L2J5dGUtb3JkZXIvdW5peCIsIEZpeHR1cmUsICJ1bml4OnRtcGRpcj0vdG1wIiwgc2V0dXAsCi0gICAgICB0ZXN0X2J5dGVfb3JkZXIsIHRlYXJkb3duKTsKLSNlbmRpZgotCiAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL2F1dGgvY29va2llLXNoYTEtdXNlcm5hbWUuYXV0aC1zY3JpcHQgYi90ZXN0L2RhdGEvYXV0aC9jb29raWUtc2hhMS11c2VybmFtZS5hdXRoLXNjcmlwdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU2NjgyOS4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvYXV0aC9jb29raWUtc2hhMS11c2VybmFtZS5hdXRoLXNjcmlwdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLVVOSVhfT05MWQotU0VSVkVSCi1TRU5EICdBVVRIIERCVVNfQ09PS0lFX1NIQTEgV1JPTkdfVVNFUk5BTUVfSEVYJwotRVhQRUNUX0NPTU1BTkQgUkVKRUNURUQKLUVYUEVDVF9TVEFURSBXQUlUSU5HX0ZPUl9JTlBVVAotRVhQRUNUX0hBVkVfTk9fQ1JFREVOVElBTFMKLVNFTkQgJ0FVVEggREJVU19DT09LSUVfU0hBMSBVU0VSTkFNRV9IRVgnCi1FWFBFQ1RfQ09NTUFORCBEQVRBCi1FWFBFQ1RfU1RBVEUgV0FJVElOR19GT1JfSU5QVVQKLUVYUEVDVF9IQVZFX05PX0NSRURFTlRJQUxTCi0jIFdlIGRvbid0IGFjdHVhbGx5IGNvbXBsZXRlIERCVVNfQ09PS0lFX1NIQTEgYXV0aGVudGljYXRpb24sIGJlY2F1c2UKLSMgaXQncyBub24tdHJpdmlhbC4KZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS9hdXRoL2Nvb2tpZS1zaGExLmF1dGgtc2NyaXB0IGIvdGVzdC9kYXRhL2F1dGgvY29va2llLXNoYTEuYXV0aC1zY3JpcHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGQzM2QuLjAwMDAwMDAKLS0tIGEvdGVzdC9kYXRhL2F1dGgvY29va2llLXNoYTEuYXV0aC1zY3JpcHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1TRVJWRVIKLVNFTkQgJ0FVVEggREJVU19DT09LSUVfU0hBMSBXUk9OR19VU0VSSURfSEVYJwotRVhQRUNUX0NPTU1BTkQgUkVKRUNURUQKLUVYUEVDVF9TVEFURSBXQUlUSU5HX0ZPUl9JTlBVVAotRVhQRUNUX0hBVkVfTk9fQ1JFREVOVElBTFMKLVNFTkQgJ0FVVEggREJVU19DT09LSUVfU0hBMSBVU0VSSURfSEVYJwotRVhQRUNUX0NPTU1BTkQgREFUQQotRVhQRUNUX1NUQVRFIFdBSVRJTkdfRk9SX0lOUFVUCi1FWFBFQ1RfSEFWRV9OT19DUkVERU5USUFMUwotIyBXZSBkb24ndCBhY3R1YWxseSBjb21wbGV0ZSBEQlVTX0NPT0tJRV9TSEExIGF1dGhlbnRpY2F0aW9uLCBiZWNhdXNlCi0jIGl0J3Mgbm9uLXRyaXZpYWwuCmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvZGJ1cy1pbnN0YWxsZWQtdGVzdHMuYWFwcm9maWxlLmluIGIvdGVzdC9kYXRhL2RidXMtaW5zdGFsbGVkLXRlc3RzLmFhcHJvZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2NTI4Mi4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvZGJ1cy1pbnN0YWxsZWQtdGVzdHMuYWFwcm9maWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEgTHRkLgotIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotIyBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwotIyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAotIyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAotIyBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAotIyBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAotIyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLSMgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLSMgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KLSMgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FSRS4KLQotI2luY2x1ZGUgPHR1bmFibGVzL2dsb2JhbD4KLSNpbmNsdWRlIDx0dW5hYmxlcy9zeXM+Ci0KLUBEQlVTX1RFU1RfRVhFQ0AvdGVzdC1hcHBhcm1vci1hY3RpdmF0aW9uIHsKLSAgI2luY2x1ZGUgPGFic3RyYWN0aW9ucy9hcHBhcm1vcl9hcGkvY2hhbmdlX3Byb2ZpbGU+Ci0gICNpbmNsdWRlIDxhYnN0cmFjdGlvbnMvYXBwYXJtb3JfYXBpL2ZpbmRfbW91bnRwb2ludD4KLSAgI2luY2x1ZGUgPGFic3RyYWN0aW9ucy9hcHBhcm1vcl9hcGkvaXNfZW5hYmxlZD4KLSAgI2luY2x1ZGUgPGFic3RyYWN0aW9ucy9iYXNlPgotCi0gICMgV2UgYXJlbid0IHJlYWxseSBjb25maW5pbmcgdGhpcyBwcm9jZXNzIHNlcmlvdXNseTsgYWxsb3cgbW9zdCB0aGluZ3MuCi0gIC8qKiBtcml4LAotICAvdG1wL2RidXMtZGFlbW9uLXRlc3QuKi97LCoqfSB3LAotICBAe3N5c30va2VybmVsL3NlY3VyaXR5L2FwcGFybW9yLyoqIHcsCi0gIGRidXMgKHNlbmQsIHJlY2VpdmUsIGJpbmQpLAotICBuZXR3b3JrLAotICBzaWduYWwsCi0KLSAgIyAiSGF0IiBzdWJwcm9maWxlIHVzZWQgZm9yIHRoZSBwYXJ0IG9mIHRoZSBwcm9jZXNzIHRoYXQgaW1pdGF0ZXMgYSBjbGllbnQKLSAgIyB0cnlpbmcgdG8gY2F1c2Ugc2VydmljZSBhY3RpdmF0aW9uIHZpYSBhdXRvLXN0YXJ0aW5nLgotICBeY2FsbGVyIHsKLSAgICAjaW5jbHVkZSA8YWJzdHJhY3Rpb25zL2FwcGFybW9yX2FwaS9jaGFuZ2VfcHJvZmlsZT4KLSAgICAjaW5jbHVkZSA8YWJzdHJhY3Rpb25zL2Jhc2U+Ci0KLSAgICAvKiogbXJpeCwKLSAgICBAe3N5c30va2VybmVsL3NlY3VyaXR5L2FwcGFybW9yLyoqIHcsCi0gICAgZGJ1cyAoc2VuZCwgcmVjZWl2ZSwgYmluZCksCi0gICAgbmV0d29yaywKLSAgICBzaWduYWwsCi0KLSAgICBkZW55IGRidXMgc2VuZCBwZWVyPShsYWJlbD1AREJVU19URVNUX0VYRUNAL3Rlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbi8vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JMYWJlbCksCi0gICAgZGVueSBkYnVzIHNlbmQgcGVlcj0obmFtZT1jb20uZXhhbXBsZS5TZW5kRGVuaWVkQnlBcHBBcm1vck5hbWUpLAotCi0gICAgIyBUaGVyZSBpcyBubyBwcm9maWxlIG9mIHRoaXMgbmFtZS4gVGhhdCdzIGRlbGliZXJhdGUuCi0gICAgZGVueSBkYnVzIHNlbmQgcGVlcj0obGFiZWw9QERCVVNfVEVTVF9FWEVDQC90ZXN0LWFwcGFybW9yLWFjdGl2YXRpb24tY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsKSwKLSAgfQotCi0gICMgVXNlZCB3aGVuIHdlIGNoZWNrIHRoYXQgWE1MLWJhc2VkIHBvbGljeSBzdGlsbCB3b3Jrcy4KLSAgXmNvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWQgewotICAgICNpbmNsdWRlIDxhYnN0cmFjdGlvbnMvYXBwYXJtb3JfYXBpL2NoYW5nZV9wcm9maWxlPgotICAgICNpbmNsdWRlIDxhYnN0cmFjdGlvbnMvYmFzZT4KLQotICAgIC8qKiBtcml4LAotICAgIEB7c3lzfS9rZXJuZWwvc2VjdXJpdHkvYXBwYXJtb3IvKiogdywKLSAgICBkYnVzLAotICAgIG5ldHdvcmssCi0gICAgc2lnbmFsLAotICB9Ci0KLSAgIyBUaGlzIG9uZSBpcyBuZXZlciBhY3R1YWxseSB1c2VkLCBidXQgbmVlZHMgdG8gZXhpc3Qgc28gXmNhbGxlciBjYW4KLSAgIyByZWZlciB0byBpdAotICBeY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JMYWJlbCB7Ci0gICAgI2luY2x1ZGUgPGFic3RyYWN0aW9ucy9hcHBhcm1vcl9hcGkvY2hhbmdlX3Byb2ZpbGU+Ci0gICAgI2luY2x1ZGUgPGFic3RyYWN0aW9ucy9iYXNlPgotCi0gICAgLyoqIG1yaXgsCi0gICAgQHtzeXN9L2tlcm5lbC9zZWN1cml0eS9hcHBhcm1vci8qKiB3LAotICAgIGRidXMgKHNlbmQsIHJlY2VpdmUsIGJpbmQpLAotICAgIG5ldHdvcmssCi0gICAgc2lnbmFsLAotICB9Ci0KLSAgIyAiSGF0IiBzdWJwcm9maWxlIHVzZWQgZm9yIHRoZSBwYXJ0IG9mIHRoZSBwcm9jZXNzIHRoYXQgaW1pdGF0ZXMgYSBzZXJ2aWNlCi0gICMgdGhhdCBpcyBub3QgYWxsb3dlZCB0byByZWNlaXZlIGZyb20gdGhlIGNhbGxlci4KLSAgXmNvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWRCeUFwcEFybW9yTGFiZWwgewotICAgICNpbmNsdWRlIDxhYnN0cmFjdGlvbnMvYXBwYXJtb3JfYXBpL2NoYW5nZV9wcm9maWxlPgotICAgICNpbmNsdWRlIDxhYnN0cmFjdGlvbnMvYmFzZT4KLQotICAgIC8qKiBtcml4LAotICAgIEB7c3lzfS9rZXJuZWwvc2VjdXJpdHkvYXBwYXJtb3IvKiogdywKLSAgICBkYnVzIChzZW5kLCByZWNlaXZlLCBiaW5kKSwKLSAgICBuZXR3b3JrLAotICAgIHNpZ25hbCwKLQotICAgIGRlbnkgZGJ1cyByZWNlaXZlIHBlZXI9KGxhYmVsPUBEQlVTX1RFU1RfRVhFQ0AvdGVzdC1hcHBhcm1vci1hY3RpdmF0aW9uLy9jYWxsZXIpLAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvaW52YWxpZC1jb25maWctZmlsZXMvaW1wb3NzaWJsZS1zZW5kLmNvbmYgYi90ZXN0L2RhdGEvaW52YWxpZC1jb25maWctZmlsZXMvaW1wb3NzaWJsZS1zZW5kLmNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNmQ3NDcuLjAwMDAwMDAKLS0tIGEvdGVzdC9kYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL2ltcG9zc2libGUtc2VuZC5jb25mCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08YnVzY29uZmlnPgotICA8bGlzdGVuPnVuaXg6cGF0aD0vZm9vPC9saXN0ZW4+Ci0gIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+Ci0gICAgPGFsbG93IHNlbmRfYnJvYWRjYXN0PSJ0cnVlIiBzZW5kX2Rlc3RpbmF0aW9uPSJjb20uZXhhbXBsZS5CZWVzIi8+Ci0gIDwvcG9saWN5PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvaW52YWxpZC1jb25maWctZmlsZXMvc2VuZC1hbmQtcmVjZWl2ZS5jb25mIGIvdGVzdC9kYXRhL2ludmFsaWQtY29uZmlnLWZpbGVzL3NlbmQtYW5kLXJlY2VpdmUuY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjViMWEzMS4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvaW52YWxpZC1jb25maWctZmlsZXMvc2VuZC1hbmQtcmVjZWl2ZS5jb25mCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08YnVzY29uZmlnPgotICA8bGlzdGVuPnVuaXg6cGF0aD0vZm9vPC9saXN0ZW4+Ci0gIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+Ci0gICAgPGFsbG93IHJlY2VpdmVfdHlwZT0ic2lnbmFsIiBzZW5kX2Rlc3RpbmF0aW9uPSJjb20uZXhhbXBsZS5CZWVzIi8+Ci0gIDwvcG9saWN5PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWQuc2VydmljZSBiL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZC5zZXJ2aWNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDk0NGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZC5zZXJ2aWNlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1bRC1CVVMgU2VydmljZV0KLU5hbWU9Y29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZAotRXhlYz0vYmluL2ZhbHNlIFJlY2VpdmVEZW5pZWQKLVN5c3RlbWRTZXJ2aWNlPWRidXMtY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZC5zZXJ2aWNlCmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWRCeUFwcEFybW9yTGFiZWwuc2VydmljZS5pbiBiL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbC5zZXJ2aWNlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTUyNTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbC5zZXJ2aWNlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1bRC1CVVMgU2VydmljZV0KLU5hbWU9Y29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbAotRXhlYz0vYmluL2ZhbHNlIFJlY2VpdmVEZW5pZWRCeUFwcEFybW9yTGFiZWwKLVN5c3RlbWRTZXJ2aWNlPWRidXMtY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbC5zZXJ2aWNlCi1Bc3N1bWVkQXBwQXJtb3JMYWJlbD1AREJVU19URVNUX0VYRUNAL3Rlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbi8vY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbApkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TZW5kRGVuaWVkLnNlcnZpY2UgYi90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWQuc2VydmljZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5ZWI3OC4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWQuc2VydmljZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotW0QtQlVTIFNlcnZpY2VdCi1OYW1lPWNvbS5leGFtcGxlLlNlbmREZW5pZWQKLUV4ZWM9L2Jpbi9mYWxzZSBTZW5kRGVuaWVkCi1TeXN0ZW1kU2VydmljZT1kYnVzLWNvbS5leGFtcGxlLlNlbmREZW5pZWQuc2VydmljZQpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TZW5kRGVuaWVkQnlBcHBBcm1vckxhYmVsLnNlcnZpY2UuaW4gYi90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwuc2VydmljZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyNTMxYi4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwuc2VydmljZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotW0QtQlVTIFNlcnZpY2VdCi1OYW1lPWNvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwKLUV4ZWM9L2Jpbi9mYWxzZSBTZW5kRGVuaWVkQnlBcHBBcm1vckxhYmVsCi1TeXN0ZW1kU2VydmljZT1kYnVzLWNvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwuc2VydmljZQotQXNzdW1lZEFwcEFybW9yTGFiZWw9QERCVVNfVEVTVF9FWEVDQC90ZXN0LWFwcGFybW9yLWFjdGl2YXRpb24vL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwKZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JOYW1lLnNlcnZpY2UgYi90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTmFtZS5zZXJ2aWNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc2NzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JOYW1lLnNlcnZpY2UKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVtELUJVUyBTZXJ2aWNlXQotTmFtZT1jb20uZXhhbXBsZS5TZW5kRGVuaWVkQnlBcHBBcm1vck5hbWUKLUV4ZWM9L2Jpbi9mYWxzZSBTZW5kRGVuaWVkQnlBcHBBcm1vck5hbWUKLVN5c3RlbWRTZXJ2aWNlPWRidXMtY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JOYW1lLnNlcnZpY2UKZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsLnNlcnZpY2UuaW4gYi90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlNlbmREZW5pZWRCeU5vbmV4aXN0ZW50QXBwQXJtb3JMYWJlbC5zZXJ2aWNlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjg0M2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsLnNlcnZpY2UuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVtELUJVUyBTZXJ2aWNlXQotTmFtZT1jb20uZXhhbXBsZS5TZW5kRGVuaWVkQnlOb25leGlzdGVudEFwcEFybW9yTGFiZWwKLUV4ZWM9L2Jpbi9mYWxzZSBTZW5kRGVuaWVkQnlOb25leGlzdGVudEFwcEFybW9yTGFiZWwKLVN5c3RlbWRTZXJ2aWNlPWRidXMtY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsLnNlcnZpY2UKLSMgVGhpcyBsYWJlbCBpcyBub3QgZGVmaW5lZCBpbiBhbnkgQXBwQXJtb3IgcHJvZmlsZQotQXNzdW1lZEFwcEFybW9yTGFiZWw9QERCVVNfVEVTVF9FWEVDQC90ZXN0LWFwcGFybW9yLWFjdGl2YXRpb24tY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsCmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlN5c3RlbWRBY3RpdmF0YWJsZTMuc2VydmljZSBiL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU3lzdGVtZEFjdGl2YXRhYmxlMy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjA1NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2RhdGEvc3lzdGVtZC1hY3RpdmF0aW9uL2NvbS5leGFtcGxlLlN5c3RlbWRBY3RpdmF0YWJsZTMuc2VydmljZQpAQCAtMCwwICsxLDQgQEAKK1tELUJVUyBTZXJ2aWNlXQorTmFtZT1jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzCitFeGVjPS9iaW4vZmFsc2UgMworU3lzdGVtZFNlcnZpY2U9ZGJ1cy1jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzLnNlcnZpY2UKZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS9zeXN0ZW1kLWFjdGl2YXRpb24vY29tLmV4YW1wbGUuU3lzdGVtZEFjdGl2YXRhYmxlMy5zZXJ2aWNlLmluIGIvdGVzdC9kYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzLnNlcnZpY2UuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTgwNjQuLjAwMDAwMDAKLS0tIGEvdGVzdC9kYXRhL3N5c3RlbWQtYWN0aXZhdGlvbi9jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzLnNlcnZpY2UuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLVtELUJVUyBTZXJ2aWNlXQotTmFtZT1jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzCi1FeGVjPS9iaW4vZmFsc2UgMwotU3lzdGVtZFNlcnZpY2U9ZGJ1cy1jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzLnNlcnZpY2UKLSMgVGhpcyBBcHBBcm1vciBsYWJlbCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LCBidXQgdGhhdCdzIE9LIC0gbm90aGluZwotIyBwcmV2ZW50cyB1cyBmcm9tIHNlbmRpbmcgbWVzc2FnZXMgdG8gaXQuCi1Bc3N1bWVkQXBwQXJtb3JMYWJlbD1AREJVU19URVNUX0VYRUNAL3Rlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbi1jb20uZXhhbXBsZS5TeXN0ZW1kQWN0aXZhdGFibGUzCmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzLy5naXRpZ25vcmUgYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzLy5naXRpZ25vcmUKaW5kZXggYjY5MjkwOS4uYTM4ZTlkMSAxMDA2NDQKLS0tIGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy8uZ2l0aWdub3JlCisrKyBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvLmdpdGlnbm9yZQpAQCAtMSw2ICsxLDUgQEAKIGRlYnVnLWFsbG93LWFsbC5jb25mCiBkZWJ1Zy1hbGxvdy1hbGwtc2hhMS5jb25mCi1pbmNvbWluZy1saW1pdC5jb25mCiBzZXNzaW9uLmNvbmYKK3N5c3RlbS5jb25mCiBydW4td2l0aC10bXAtc2Vzc2lvbi1idXMuY29uZgotZmluaXRlLXRpbWVvdXQuY29uZgpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9hcy1hbm90aGVyLXVzZXIuY29uZi5pbiBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvYXMtYW5vdGhlci11c2VyLmNvbmYuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZDAwYzguLjAwMDAwMDAKLS0tIGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9hcy1hbm90aGVyLXVzZXIuY29uZi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwhLS0KLUNvbmZpZ3VyYXRpb24gc2ltaWxhciB0byB0aGUgc3lzdGVtIGJ1cywgdG8gYmUgdXNlZCB3aGVuIHRlc3RpbmcgcmxpbWl0Ci1oYW5kbGluZy4KLS0tPgotCi08IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJ1cyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgotICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Ci08YnVzY29uZmlnPgotICA8dHlwZT5zeXN0ZW08L3R5cGU+Ci0gIDx1c2VyPkBEQlVTX1VTRVJAPC91c2VyPgotICA8YXV0aD5FWFRFUk5BTDwvYXV0aD4KLQotICA8IS0tIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSByZWFsIHN5c3RlbSBidXM6IHdlIGRvbid0IHdhbnQgdG8gY29sbGlkZSAtLT4KLSAgPGxpc3Rlbj5AVEVTVF9MSVNURU5APC9saXN0ZW4+Ci0KLSAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KLSAgICA8YWxsb3cgdXNlcj0iKiIvPgotICAgIDxkZW55IG93bj0iKiIvPgotICAgIDxkZW55IHNlbmRfdHlwZT0ibWV0aG9kX2NhbGwiLz4KLSAgICA8YWxsb3cgc2VuZF90eXBlPSJzaWduYWwiLz4KLSAgICA8YWxsb3cgc2VuZF9yZXF1ZXN0ZWRfcmVwbHk9InRydWUiIHNlbmRfdHlwZT0ibWV0aG9kX3JldHVybiIvPgotICAgIDxhbGxvdyBzZW5kX3JlcXVlc3RlZF9yZXBseT0idHJ1ZSIgc2VuZF90eXBlPSJlcnJvciIvPgotICAgIDxhbGxvdyByZWNlaXZlX3R5cGU9Im1ldGhvZF9jYWxsIi8+Ci0gICAgPGFsbG93IHJlY2VpdmVfdHlwZT0ibWV0aG9kX3JldHVybiIvPgotICAgIDxhbGxvdyByZWNlaXZlX3R5cGU9ImVycm9yIi8+Ci0gICAgPGFsbG93IHJlY2VpdmVfdHlwZT0ic2lnbmFsIi8+Ci0gIDwvcG9saWN5PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2NvdW50LWZkcy5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9jb3VudC1mZHMuY29uZi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhZTNlZC4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2NvdW50LWZkcy5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CdXMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgotPGJ1c2NvbmZpZz4KLSAgPCEtLSBPdXIgd2VsbC1rbm93biBidXMgdHlwZSwgZG9uJ3QgY2hhbmdlIHRoaXMgLS0+Ci0gIDx0eXBlPnNlc3Npb248L3R5cGU+Ci0gIDxsaXN0ZW4+QFRFU1RfTElTVEVOQDwvbGlzdGVuPgotCi0gIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+Ci0gICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHNlbnQgLS0+Ci0gICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249IioiIGVhdmVzZHJvcD0idHJ1ZSIvPgotICAgIDwhLS0gQWxsb3cgZXZlcnl0aGluZyB0byBiZSByZWNlaXZlZCAtLT4KLSAgICA8YWxsb3cgZWF2ZXNkcm9wPSJ0cnVlIi8+Ci0gICAgPCEtLSBBbGxvdyBhbnlvbmUgdG8gb3duIGFueXRoaW5nIC0tPgotICAgIDxhbGxvdyBvd249IioiLz4KLSAgICA8IS0tIEV4ZXJjaXNlIHJ1bGVzIHRoYXQgbWF0Y2ggb24gbnVtYmVycyBvZiBmZHMgLS0+Ci0gICAgPGRlbnkgc2VuZF9wYXRoPSIvdGVzdC9EZW55U2VuZE1heDIiIG1heF9mZHM9IjIiLz4KLSAgICA8ZGVueSByZWNlaXZlX3BhdGg9Ii90ZXN0L0RlbnlSZWNlaXZlTWF4MyIgbWF4X2Zkcz0iMyIvPgotICAgIDxkZW55IHNlbmRfcGF0aD0iL3Rlc3QvRGVueVNlbmRNaW40IiBtaW5fZmRzPSI0Ii8+Ci0gICAgPGRlbnkgcmVjZWl2ZV9wYXRoPSIvdGVzdC9EZW55UmVjZWl2ZU1pbjUiIG1pbl9mZHM9IjUiLz4KLSAgPC9wb2xpY3k+Ci0KLTwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9mb3JiaWRkaW5nLmNvbmYuaW4gYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2ZvcmJpZGRpbmcuY29uZi5pbgppbmRleCBkMTQ1NjEzLi42YTY3NGY4IDEwMDY0NAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2ZvcmJpZGRpbmcuY29uZi5pbgorKysgYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2ZvcmJpZGRpbmcuY29uZi5pbgpAQCAtMTMsMTYgKzEzLDYgQEAKIAogICAgIDwhLS0gRXhjZXB0aW9uOiBzb21lIG1lc3NhZ2VzIGFyZSBmb3JiaWRkZW4gLS0+CiAgICAgPGRlbnkgc2VuZF9pbnRlcmZhY2U9ImNvbS5leGFtcGxlLkNhbm5vdFNlbmQiLz4KLQotICAgIDxkZW55IHNlbmRfaW50ZXJmYWNlPSJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QiIHNlbmRfYnJvYWRjYXN0PSJ0cnVlIi8+Ci0gICAgPGRlbnkgc2VuZF9pbnRlcmZhY2U9ImNvbS5leGFtcGxlLkNhbm5vdFVuaWNhc3QiIHNlbmRfYnJvYWRjYXN0PSJmYWxzZSIvPgotCi0gICAgPCEtLSBBIG1vcmUgbG9uZy13aW5kZWQgd2F5IHRvIHNwZWxsIHRoZSBzYW1lIHRoaW5ncy4gLS0+Ci0gICAgPGRlbnkgc2VuZF9pbnRlcmZhY2U9ImNvbS5leGFtcGxlLkNhbm5vdEJyb2FkY2FzdDIiLz4KLSAgICA8YWxsb3cgc2VuZF9pbnRlcmZhY2U9ImNvbS5leGFtcGxlLkNhbm5vdEJyb2FkY2FzdDIiIHNlbmRfYnJvYWRjYXN0PSJmYWxzZSIvPgotICAgIDxkZW55IHNlbmRfaW50ZXJmYWNlPSJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0MiIvPgotICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0iY29tLmV4YW1wbGUuQ2Fubm90VW5pY2FzdDIiIHNlbmRfYnJvYWRjYXN0PSJ0cnVlIi8+Ci0KICAgICA8ZGVueSByZWNlaXZlX2ludGVyZmFjZT0iY29tLmV4YW1wbGUuQ2Fubm90UmVjZWl2ZSIvPgogICA8L3BvbGljeT4KIDwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYXgtcmVwbGllcy1wZXItY29ubmVjdGlvbi5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9pbmNvbWluZy1saW1pdC5jb25mCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIHRlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LXJlcGxpZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbgpyZW5hbWUgdG8gdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9pbmNvbWluZy1saW1pdC5jb25mCmluZGV4IGQ0NjE1ZWQuLmFiZmFiM2YgMTAwNjQ0Ci0tLSBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LXJlcGxpZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbgorKysgYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2luY29taW5nLWxpbWl0LmNvbmYKQEAgLTMsNyArMyw3IEBACiA8YnVzY29uZmlnPgogICA8IS0tIE91ciB3ZWxsLWtub3duIGJ1cyB0eXBlLCBkb24ndCBjaGFuZ2UgdGhpcyAtLT4KICAgPHR5cGU+c2Vzc2lvbjwvdHlwZT4KLSAgPGxpc3Rlbj5AVEVTVF9MSVNURU5APC9saXN0ZW4+CisgIDxsaXN0ZW4+dW5peDp0bXBkaXI9L3RtcDwvbGlzdGVuPgogCiAgIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CiAgICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHNlbnQgLS0+CkBAIC0xNCw1ICsxNCw1IEBACiAgICAgPGFsbG93IG93bj0iKiIvPgogICA8L3BvbGljeT4KIAotICA8bGltaXQgbmFtZT0ibWF4X3JlcGxpZXNfcGVyX2Nvbm5lY3Rpb24iPjM8L2xpbWl0PgorICA8bGltaXQgbmFtZT0ibWF4X2luY29taW5nX2J5dGVzIj4xPC9saW1pdD4KIDwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9pbmNvbWluZy1saW1pdC5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9pbmNvbWluZy1saW1pdC5jb25mLmluCmluZGV4IGNkODEzNDQuLjQwZmYyMjQgMTAwNjQ0Ci0tLSBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvaW5jb21pbmctbGltaXQuY29uZi5pbgorKysgYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL2luY29taW5nLWxpbWl0LmNvbmYuaW4KQEAgLTE1LDcgKzE1LDQgQEAKICAgPC9wb2xpY3k+CiAKICAgPGxpbWl0IG5hbWU9Im1heF9pbmNvbWluZ19ieXRlcyI+MTwvbGltaXQ+Ci0KLSAgPCEtLSBBdm9pZCByZWFjaGluZyB0aGlzIGxpbWl0IC0tPgotICA8bGltaXQgbmFtZT0ibWF4X3JlcGxpZXNfcGVyX2Nvbm5lY3Rpb24iPjEwMDAwMDA8L2xpbWl0PgogPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1jb21wbGV0ZWQtY29ubmVjdGlvbnMuY29uZi5pbiBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LWNvbXBsZXRlZC1jb25uZWN0aW9ucy5jb25mLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDAzZTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LWNvbXBsZXRlZC1jb25uZWN0aW9ucy5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CdXMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgotPGJ1c2NvbmZpZz4KLSAgPCEtLSBPdXIgd2VsbC1rbm93biBidXMgdHlwZSwgZG9uJ3QgY2hhbmdlIHRoaXMgLS0+Ci0gIDx0eXBlPnNlc3Npb248L3R5cGU+Ci0gIDxsaXN0ZW4+QFRFU1RfTElTVEVOQDwvbGlzdGVuPgotCi0gIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+Ci0gICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHNlbnQgLS0+Ci0gICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249IioiIGVhdmVzZHJvcD0idHJ1ZSIvPgotICAgIDwhLS0gQWxsb3cgZXZlcnl0aGluZyB0byBiZSByZWNlaXZlZCAtLT4KLSAgICA8YWxsb3cgZWF2ZXNkcm9wPSJ0cnVlIi8+Ci0gICAgPCEtLSBBbGxvdyBhbnlvbmUgdG8gb3duIGFueXRoaW5nIC0tPgotICAgIDxhbGxvdyBvd249IioiLz4KLSAgPC9wb2xpY3k+Ci0KLSAgPGxpbWl0IG5hbWU9Im1heF9jb21wbGV0ZWRfY29ubmVjdGlvbnMiPjM8L2xpbWl0PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1jb25uZWN0aW9ucy1wZXItdXNlci5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYXgtY29ubmVjdGlvbnMtcGVyLXVzZXIuY29uZi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5NDU1Ny4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1jb25uZWN0aW9ucy1wZXItdXNlci5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CdXMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgotPGJ1c2NvbmZpZz4KLSAgPCEtLSBPdXIgd2VsbC1rbm93biBidXMgdHlwZSwgZG9uJ3QgY2hhbmdlIHRoaXMgLS0+Ci0gIDx0eXBlPnNlc3Npb248L3R5cGU+Ci0gIDxsaXN0ZW4+QFRFU1RfTElTVEVOQDwvbGlzdGVuPgotCi0gIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+Ci0gICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHNlbnQgLS0+Ci0gICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249IioiIGVhdmVzZHJvcD0idHJ1ZSIvPgotICAgIDwhLS0gQWxsb3cgZXZlcnl0aGluZyB0byBiZSByZWNlaXZlZCAtLT4KLSAgICA8YWxsb3cgZWF2ZXNkcm9wPSJ0cnVlIi8+Ci0gICAgPCEtLSBBbGxvdyBhbnlvbmUgdG8gb3duIGFueXRoaW5nIC0tPgotICAgIDxhbGxvdyBvd249IioiLz4KLSAgPC9wb2xpY3k+Ci0KLSAgPGxpbWl0IG5hbWU9Im1heF9jb25uZWN0aW9uc19wZXJfdXNlciI+MzwvbGltaXQ+Ci08L2J1c2NvbmZpZz4KZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LW1hdGNoLXJ1bGVzLXBlci1jb25uZWN0aW9uLmNvbmYuaW4gYi90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL21heC1tYXRjaC1ydWxlcy1wZXItY29ubmVjdGlvbi5jb25mLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2QyN2I2Li4wMDAwMDAwCi0tLSBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LW1hdGNoLXJ1bGVzLXBlci1jb25uZWN0aW9uLmNvbmYuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJ1cyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgotICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Ci08YnVzY29uZmlnPgotICA8IS0tIE91ciB3ZWxsLWtub3duIGJ1cyB0eXBlLCBkb24ndCBjaGFuZ2UgdGhpcyAtLT4KLSAgPHR5cGU+c2Vzc2lvbjwvdHlwZT4KLSAgPGxpc3Rlbj5AVEVTVF9MSVNURU5APC9saXN0ZW4+Ci0KLSAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KLSAgICA8IS0tIEFsbG93IGV2ZXJ5dGhpbmcgdG8gYmUgc2VudCAtLT4KLSAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0iKiIgZWF2ZXNkcm9wPSJ0cnVlIi8+Ci0gICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHJlY2VpdmVkIC0tPgotICAgIDxhbGxvdyBlYXZlc2Ryb3A9InRydWUiLz4KLSAgICA8IS0tIEFsbG93IGFueW9uZSB0byBvd24gYW55dGhpbmcgLS0+Ci0gICAgPGFsbG93IG93bj0iKiIvPgotICA8L3BvbGljeT4KLQotICA8bGltaXQgbmFtZT0ibWF4X21hdGNoX3J1bGVzX3Blcl9jb25uZWN0aW9uIj4zPC9saW1pdD4KLTwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYXgtbmFtZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbiBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvbWF4LW5hbWVzLXBlci1jb25uZWN0aW9uLmNvbmYuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NmVkN2IuLjAwMDAwMDAKLS0tIGEvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9tYXgtbmFtZXMtcGVyLWNvbm5lY3Rpb24uY29uZi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQnVzIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCi0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KLTxidXNjb25maWc+Ci0gIDwhLS0gT3VyIHdlbGwta25vd24gYnVzIHR5cGUsIGRvbid0IGNoYW5nZSB0aGlzIC0tPgotICA8dHlwZT5zZXNzaW9uPC90eXBlPgotICA8bGlzdGVuPkBURVNUX0xJU1RFTkA8L2xpc3Rlbj4KLQotICA8cG9saWN5IGNvbnRleHQ9ImRlZmF1bHQiPgotICAgIDwhLS0gQWxsb3cgZXZlcnl0aGluZyB0byBiZSBzZW50IC0tPgotICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSIqIiBlYXZlc2Ryb3A9InRydWUiLz4KLSAgICA8IS0tIEFsbG93IGV2ZXJ5dGhpbmcgdG8gYmUgcmVjZWl2ZWQgLS0+Ci0gICAgPGFsbG93IGVhdmVzZHJvcD0idHJ1ZSIvPgotICAgIDwhLS0gQWxsb3cgYW55b25lIHRvIG93biBhbnl0aGluZyAtLT4KLSAgICA8YWxsb3cgb3duPSIqIi8+Ci0gIDwvcG9saWN5PgotCi0gIDxsaW1pdCBuYW1lPSJtYXhfbmFtZXNfcGVyX2Nvbm5lY3Rpb24iPjQ8L2xpbWl0PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3BlbmRpbmctZmQtdGltZW91dC5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9wZW5kaW5nLWZkLXRpbWVvdXQuY29uZi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5ZDg4NS4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3BlbmRpbmctZmQtdGltZW91dC5jb25mLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotCi08IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJ1cyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgotICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Ci08YnVzY29uZmlnPgotICA8IS0tIE91ciB3ZWxsLWtub3duIGJ1cyB0eXBlLCBkb24ndCBjaGFuZ2UgdGhpcyAtLT4KLSAgPHR5cGU+c2Vzc2lvbjwvdHlwZT4KLSAgPGxpc3Rlbj5AVEVTVF9MSVNURU5APC9saXN0ZW4+Ci0KLSAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KLSAgICA8IS0tIEFsbG93IGV2ZXJ5dGhpbmcgdG8gYmUgc2VudCAtLT4KLSAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0iKiIgZWF2ZXNkcm9wPSJ0cnVlIi8+Ci0gICAgPCEtLSBBbGxvdyBldmVyeXRoaW5nIHRvIGJlIHJlY2VpdmVkIC0tPgotICAgIDxhbGxvdyBlYXZlc2Ryb3A9InRydWUiLz4KLSAgICA8IS0tIEFsbG93IGFueW9uZSB0byBvd24gYW55dGhpbmcgLS0+Ci0gICAgPGFsbG93IG93bj0iKiIvPgotICA8L3BvbGljeT4KLQotICA8IS0tIDUwMG1zIC0tPgotICA8bGltaXQgbmFtZT0icGVuZGluZ19mZF90aW1lb3V0Ij41MDA8L2xpbWl0PgotPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3N0YW5kYXJkLXNlc3Npb24tZGlycy5jb25mIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9zdGFuZGFyZC1zZXNzaW9uLWRpcnMuY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyZGM4Ny4uMDAwMDAwMAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3N0YW5kYXJkLXNlc3Npb24tZGlycy5jb25mCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08IS0tIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiBzZXNzaW9uLmNvbmYgLS0+Ci08IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJ1cyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgotICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Ci08YnVzY29uZmlnPgotICA8bGlzdGVuPnVuaXg6cGF0aD0vZm9vPC9saXN0ZW4+Ci0gIDx0eXBlPnNlc3Npb248L3R5cGU+Ci0gIDxzdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzIC8+Ci08L2J1c2NvbmZpZz4KZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvc3lzdGVtLmQvdGVzdC5jb25mIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9zeXN0ZW0uZC90ZXN0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MGExZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvc3lzdGVtLmQvdGVzdC5jb25mCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisgIDwhLS0gVGhlIGZvbGxvd2luZyBkZW1vbnN0cmF0ZXMgaG93IHRvIHB1bmNoIGhvbGVzIGluIGEgZGVmYXVsdCBkZW55LWFsbCAKKyAgICAgICBwb2xpY3kgc28gdGhhdCBhIHBhcnRpY3VsYXIgdXNlciBjYW4gb3duIGEgc2VydmljZSwgYW5kIG90aGVyIAorICAgICAgIGNvbm5lY3Rpb25zIGNhbiBnZXQgbWVzc2FnZXMgZnJvbSBpdCAtLT4KKworICA8IS0tIE9ubHkgcm9vdCBjYW4gb3duIHRoZSBGb29TZXJ2aWNlIHNlcnZpY2UsIGFuZCAKKyAgICAgICB0aGlzIHVzZXIgY2FuIG9ubHkgc2VuZCB0aGUgb25lIGtpbmQgb2YgbWVzc2FnZSAtLT4KKyAgPHBvbGljeSB1c2VyPSJyb290Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuZm9vLkZvb1NlcnZpY2UiLz4KKyAgICA8YWxsb3cgc2VuZF9pbnRlcmZhY2U9Im9yZy5mb28uRm9vQnJvYWRjYXN0SW50ZXJmYWNlIi8+CisgIDwvcG9saWN5PgorCisgIDwhLS0gQWxsb3cgYW55IGNvbm5lY3Rpb24gdG8gcmVjZWl2ZSB0aGUgbWVzc2FnZSwgYnV0IAorICAgICAgIG9ubHkgaWYgdGhlIG1lc3NhZ2UgaXMgc2VudCBieSB0aGUgb3duZXIgb2YgRm9vU2VydmljZSAtLT4KKyAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICA8YWxsb3cgcmVjZWl2ZV9pbnRlcmZhY2U9Im9yZy5mb28uRm9vQnJvYWRjYXN0SW50ZXJmYWNlIiByZWNlaXZlX3NlbmRlcj0ib3JnLmZvby5Gb29TZXJ2aWNlIi8+CisgIDwvcG9saWN5PgorPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3N5c3RlbWQtYWN0aXZhdGlvbi5jb25mLmluIGIvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxlcy9zeXN0ZW1kLWFjdGl2YXRpb24uY29uZi5pbgppbmRleCAyYzNkMmMyLi5iY2Q2NDE2IDEwMDY0NAotLS0gYS90ZXN0L2RhdGEvdmFsaWQtY29uZmlnLWZpbGVzL3N5c3RlbWQtYWN0aXZhdGlvbi5jb25mLmluCisrKyBiL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvc3lzdGVtZC1hY3RpdmF0aW9uLmNvbmYuaW4KQEAgLTIsMTggKzIsMTAgQEAKICAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgogPGJ1c2NvbmZpZz4KICAgPGxpc3Rlbj5AVEVTVF9MSVNURU5APC9saXN0ZW4+Ci0KICAgPHNlcnZpY2VkaXI+QERCVVNfVEVTVF9EQVRBQC9zeXN0ZW1kLWFjdGl2YXRpb248L3NlcnZpY2VkaXI+Ci0gIDxzdGFuZGFyZF9zZXNzaW9uX3NlcnZpY2VkaXJzIC8+Ci0KICAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KICAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0iKiIvPgogICAgIDxhbGxvdyByZWNlaXZlX3NlbmRlcj0iKiIvPgogICAgIDxhbGxvdyBvd249IioiLz4KICAgPC9wb2xpY3k+Ci0KLSAgPHBvbGljeSBjb250ZXh0PSJtYW5kYXRvcnkiPgotICAgIDxkZW55IHNlbmRfZGVzdGluYXRpb249ImNvbS5leGFtcGxlLlNlbmREZW5pZWQiLz4KLSAgICA8ZGVueSByZWNlaXZlX2ludGVyZmFjZT0iY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZCIgcmVjZWl2ZV9tZW1iZXI9IkNhbGwiLz4KLSAgPC9wb2xpY3k+CiA8L2J1c2NvbmZpZz4KZGlmZiAtLWdpdCBhL3Rlc3QvZGF0YS92YWxpZC1pbnRyb3NwZWN0aW9uLWZpbGVzL2xvdHMtb2YtdHlwZXMueG1sIGIvdGVzdC9kYXRhL3ZhbGlkLWludHJvc3BlY3Rpb24tZmlsZXMvbG90cy1vZi10eXBlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwZTYwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvZGF0YS92YWxpZC1pbnRyb3NwZWN0aW9uLWZpbGVzL2xvdHMtb2YtdHlwZXMueG1sCkBAIC0wLDAgKzEsOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBub2RlIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBJbnRyb3NwZWN0aW9uIDAuMS8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2RidXMvaW50cm9zcGVjdGlvbi5kdGQiPgorPG5vZGU+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuTG90c09mVHlwZXNJbnRlcmZhY2UiPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRJbnQzMlZhbHVlIj4KKyAgICAgIDxhcmcgbmFtZT0idGhlSW50MzIiIHR5cGU9ImludDMyIi8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRJbnQzMlZhbHVlIj4KKyAgICAgIDxhcmcgbmFtZT0idGhlSW50MzIiIHR5cGU9ImludDMyIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iSW50MzJWYWx1ZUNoYW5nZWQiPgorICAgICAgPGFyZyBuYW1lPSJuZXdJbnQzMlZhbHVlIiB0eXBlPSJpbnQzMiIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRVaW50MzJWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVVpbnQzMiIgdHlwZT0idWludDMyIi8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRVaW50MzJWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVVpbnQzMiIgdHlwZT0idWludDMyIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iVWludDMyVmFsdWVDaGFuZ2VkIj4KKyAgICAgIDxhcmcgbmFtZT0ibmV3VWludDMyVmFsdWUiIHR5cGU9InVpbnQzMiIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRJbnQ2NFZhbHVlIj4KKyAgICAgIDxhcmcgbmFtZT0idGhlSW50NjQiIHR5cGU9ImludDY0Ii8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRJbnQ2NFZhbHVlIj4KKyAgICAgIDxhcmcgbmFtZT0idGhlSW50NjQiIHR5cGU9ImludDY0IiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iSW50NjRWYWx1ZUNoYW5nZWQiPgorICAgICAgPGFyZyBuYW1lPSJuZXdJbnQ2NFZhbHVlIiB0eXBlPSJpbnQ2NCIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRVaW50NjRWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVVpbnQ2NCIgdHlwZT0idWludDY0Ii8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRVaW50NjRWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVVpbnQ2NCIgdHlwZT0idWludDY0IiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iVWludDY0VmFsdWVDaGFuZ2VkIj4KKyAgICAgIDxhcmcgbmFtZT0ibmV3VWludDY0VmFsdWUiIHR5cGU9InVpbnQ2NCIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRCb29sZWFuVmFsdWUiPgorICAgICAgPGFyZyBuYW1lPSJ0aGVCb29sZWFuIiB0eXBlPSJib29sZWFuIi8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRCb29sZWFuVmFsdWUiPgorICAgICAgPGFyZyBuYW1lPSJ0aGVCb29sZWFuIiB0eXBlPSJib29sZWFuIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iQm9vbGVhblZhbHVlQ2hhbmdlZCI+CisgICAgICA8YXJnIG5hbWU9Im5ld0Jvb2xlYW5WYWx1ZSIgdHlwZT0iYm9vbGVhbiIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXRTdHJpbmdWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVN0cmluZyIgdHlwZT0ic3RyaW5nIi8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXRTdHJpbmdWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZVN0cmluZyIgdHlwZT0ic3RyaW5nIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iU3RyaW5nVmFsdWVDaGFuZ2VkIj4KKyAgICAgIDxhcmcgbmFtZT0ibmV3U3RyaW5nVmFsdWUiIHR5cGU9InN0cmluZyIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXREb3VibGVWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZURvdWJsZSIgdHlwZT0iZG91YmxlIi8+CisgICAgPC9tZXRob2Q+CisgICAgPG1ldGhvZCBuYW1lPSJHZXREb3VibGVWYWx1ZSI+CisgICAgICA8YXJnIG5hbWU9InRoZURvdWJsZSIgdHlwZT0iZG91YmxlIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICAgIDxzaWduYWwgbmFtZT0iRG91YmxlVmFsdWVDaGFuZ2VkIj4KKyAgICAgIDxhcmcgbmFtZT0ibmV3RG91YmxlVmFsdWUiIHR5cGU9ImRvdWJsZSIvPgorICAgIDwvc2lnbmFsPgorCisgIDwvaW50ZXJmYWNlPgorCisgIDxpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkFTZWNvbmRJbnRlcmZhY2UiPgorICAgIDxtZXRob2QgbmFtZT0iUmFuZG9tRnJvYmF0ZSI+CisgICAgICA8YXJnIHR5cGU9ImJvb2xlYW4iIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgdHlwZT0ic3RyaW5nIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyB0eXBlPSJzdHJpbmciIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIHR5cGU9ImludDY0Ii8+IDwhLS0gZGlyZWN0aW9uIGRlZmF1bHRzIHRvICJpbiIgLS0+CisgICAgICA8YXJnIHR5cGU9InN0cmluZyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgdHlwZT0ic3RyaW5nIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyB0eXBlPSJpbnQzMiIgZGlyZWN0aW9uPSJpbiIvPgorICAgIDwvbWV0aG9kPgorICA8L2ludGVyZmFjZT4KKworPC9ub2RlPgorCmRpZmYgLS1naXQgYS90ZXN0L2RidXMtZGFlbW9uLWVhdmVzZHJvcC5jIGIvdGVzdC9kYnVzLWRhZW1vbi1lYXZlc2Ryb3AuYwppbmRleCBkMmMwODcyLi40MTk4NTc4IDEwMDY0NAotLS0gYS90ZXN0L2RidXMtZGFlbW9uLWVhdmVzZHJvcC5jCisrKyBiL3Rlc3QvZGJ1cy1kYWVtb24tZWF2ZXNkcm9wLmMKQEAgLTg4LDEwICs4OCw5IEBACiAKICAgc2lnbmFsID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKFNFTkRFUl9QQVRILCBTRU5ERVJfSUZBQ0UsCiAgICAgICBTRU5ERVJfU0lHTkFMX05BTUUpOwotICBpZiAoc2lnbmFsID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOworICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChzaWduYWwsIGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+c2VuZGVyKSk7CiAKLSAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChzaWduYWwsIGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+c2VuZGVyKSkpCisgIGlmIChzaWduYWwgPT0gTlVMTCkKICAgICBnX2Vycm9yICgiT09NIik7CiAKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBzaWduYWwsIE5VTEwpKQpAQCAtMTEwLDEwICsxMDksOSBAQAogICBEQnVzTWVzc2FnZSAqc2lnbmFsOwogCiAgIHNpZ25hbCA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsIChTRU5ERVJfUEFUSCwgU0VOREVSX0lGQUNFLCBTRU5ERVJfU0lHTkFMX05BTUUpOwotICBpZiAoc2lnbmFsID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOworICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChzaWduYWwsIGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+cmVjZWl2ZXIpKTsKIAotICBpZiAoIWRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24gKHNpZ25hbCwgZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5yZWNlaXZlcikpKQorICBpZiAoc2lnbmFsID09IE5VTEwpCiAgICAgZ19lcnJvciAoIk9PTSIpOwogCiAgIGlmICghZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgc2lnbmFsLCBOVUxMKSkKQEAgLTEzMCwxMCArMTI4LDkgQEAKICAgREJ1c01lc3NhZ2UgKnNpZ25hbDsKIAogICBzaWduYWwgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoU0VOREVSX1BBVEgsIFNFTkRFUl9JRkFDRSwgU0VOREVSX1NJR05BTF9OQU1FKTsKLSAgaWYgKHNpZ25hbCA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKKyAgZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAoc2lnbmFsLCBOVUxMKTsKIAotICBpZiAoIWRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24gKHNpZ25hbCwgTlVMTCkpCisgIGlmIChzaWduYWwgPT0gTlVMTCkKICAgICBnX2Vycm9yICgiT09NIik7CiAKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBzaWduYWwsIE5VTEwpKQpAQCAtMTU1LDEwICsxNTIsOSBAQAogICBEQnVzTWVzc2FnZSAqc2lnbmFsOwogCiAgIHNpZ25hbCA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsIChTRU5ERVJfUEFUSCwgU0VOREVSX0lGQUNFLCBTRU5ERVJfU1RPUFBFUl9OQU1FKTsKLSAgaWYgKHNpZ25hbCA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKKyAgZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAoc2lnbmFsLCBOVUxMKTsKIAotICBpZiAoIWRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24gKHNpZ25hbCwgTlVMTCkpCisgIGlmIChzaWduYWwgPT0gTlVMTCkKICAgICBnX2Vycm9yICgiT09NIik7CiAKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBzaWduYWwsIE5VTEwpKQpAQCAtMjg3LDcgKzI4Myw3IEBACiAgIGYtPmdlID0gTlVMTDsKICAgZGJ1c19lcnJvcl9pbml0ICgmZi0+ZSk7CiAKLSAgYWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uIChOVUxMLCBURVNUX1VTRVJfTUUsIE5VTEwsICZmLT5kYWVtb25fcGlkKTsKKyAgYWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uIChOVUxMLCBURVNUX1VTRVJfTUUsICZmLT5kYWVtb25fcGlkKTsKIAogICBmLT5zZW5kZXIgPSB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChmLT5jdHgsIGFkZHJlc3MpOwogICBkYnVzX2J1c19yZXF1ZXN0X25hbWUgKGYtPnNlbmRlciwgU0VOREVSX05BTUUsIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSwKQEAgLTQwNywxMiArNDAzLDggQEAKICAgICAgIGYtPmVhdmVzZHJvcHBlciA9IE5VTEw7CiAgICAgfQogCi0gIGlmIChmLT5kYWVtb25fcGlkICE9IDApCi0gICAgewotICAgICAgdGVzdF9raWxsX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgICBnX3NwYXduX2Nsb3NlX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgICBmLT5kYWVtb25fcGlkID0gMDsKLSAgICB9CisgIHRlc3Rfa2lsbF9waWQgKGYtPmRhZW1vbl9waWQpOworICBnX3NwYXduX2Nsb3NlX3BpZCAoZi0+ZGFlbW9uX3BpZCk7CiAKICAgdGVzdF9tYWluX2NvbnRleHRfdW5yZWYgKGYtPmN0eCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0L2RidXMtZGFlbW9uLmMgYi90ZXN0L2RidXMtZGFlbW9uLmMKaW5kZXggZDc1M2Q4My4uOTlkMmJjNiAxMDA2NDQKLS0tIGEvdGVzdC9kYnVzLWRhZW1vbi5jCisrKyBiL3Rlc3QvZGJ1cy1kYWVtb24uYwpAQCAtMzQsMzAgKzM0LDE0IEBACiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAKLSNpbmNsdWRlICJidXMvc3RhdHMuaCIKICNpbmNsdWRlICJ0ZXN0LXV0aWxzLWdsaWIuaCIKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaWZkZWYgREJVU19VTklYCi0jIGluY2x1ZGUgPHB3ZC5oPgogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSMgaWZkZWYgSEFWRV9HSU9fVU5JWAotICAgIC8qIFRoZSBDTWFrZSBidWlsZCBzeXN0ZW0gZG9lc24ndCBrbm93IGhvdyB0byBjaGVjayBmb3IgdGhpcyB5ZXQgKi8KLSMgICBpbmNsdWRlIDxnaW8vZ3VuaXhmZG1lc3NhZ2UuaD4KLSMgZW5kaWYKLQotIyBpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICi0jICAgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jIGVuZGlmCi0KLSMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jICAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKICNlbmRpZgogCiAvKiBQbGF0Zm9ybXMgd2hlcmUgd2Uga25vdyB0aGF0IGNyZWRlbnRpYWxzLXBhc3NpbmcgcGFzc2VzIGJvdGggdGhlCkBAIC05NCwxNCArNzgsMTEgQEAKICAgICBHRXJyb3IgKmdlOwogCiAgICAgR1BpZCBkYWVtb25fcGlkOwotICAgIGdjaGFyICphZGRyZXNzOwogCiAgICAgREJ1c0Nvbm5lY3Rpb24gKmxlZnRfY29ubjsKIAogICAgIERCdXNDb25uZWN0aW9uICpyaWdodF9jb25uOwotICAgIEdRdWV1ZSBoZWxkX21lc3NhZ2VzOwogICAgIGdib29sZWFuIHJpZ2h0X2Nvbm5fZWNobzsKLSAgICBnYm9vbGVhbiByaWdodF9jb25uX2hvbGQ7CiAgICAgZ2Jvb2xlYW4gd2FpdF9mb3JldmVyX2NhbGxlZDsKIAogICAgIGdjaGFyICp0bXBfcnVudGltZV9kaXI7CkBAIC0xMzQsMjIgKzExNSw3IEBACiAgIGlmICghZGJ1c19jb25uZWN0aW9uX3NlbmQgKGNvbm5lY3Rpb24sIHJlcGx5LCBOVUxMKSkKICAgICBnX2Vycm9yICgiT09NIik7CiAKLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmcmVwbHkpOwotCi0gIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBEQnVzSGFuZGxlclJlc3VsdAotaG9sZF9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAotICAgIERCdXNNZXNzYWdlICptZXNzYWdlLAotICAgIHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgRml4dHVyZSAqZiA9IHVzZXJfZGF0YTsKLQotICBpZiAoZGJ1c19tZXNzYWdlX2dldF90eXBlIChtZXNzYWdlKSAhPSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkKLSAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Ci0KLSAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZmLT5oZWxkX21lc3NhZ2VzLCBkYnVzX21lc3NhZ2VfcmVmIChtZXNzYWdlKSk7CisgIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOwogCiAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CiB9CkBAIC0xNTgsNyArMTI0LDYgQEAKICAgICBjb25zdCBjaGFyICpidWdfcmVmOwogICAgIGd1aW50IG1pbl9tZXNzYWdlczsKICAgICBjb25zdCBjaGFyICpjb25maWdfZmlsZTsKLSAgICBUZXN0VXNlciB1c2VyOwogICAgIGVudW0geyBTUEVDSUZZX0FERFJFU1MgPSAwLCBSRUxZX09OX0RFRkFVTFQgfSBjb25uZWN0X21vZGU7CiB9IENvbmZpZzsKIApAQCAtMTY3LDkgKzEzMiw3IEBACiAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQogewogICBjb25zdCBDb25maWcgKmNvbmZpZyA9IGNvbnRleHQ7Ci0KLSAgLyogU29tZSB0ZXN0cyBhcmUgZmFpcmx5IHNsb3csIHNvIG1ha2UgdGhlIHRlc3QgdGltZW91dCBwZXItdGVzdCAqLwotICB0ZXN0X3RpbWVvdXRfcmVzZXQgKDEpOworICBnY2hhciAqYWRkcmVzczsKIAogICBmLT5jdHggPSB0ZXN0X21haW5fY29udGV4dF9nZXQgKCk7CiAgIGYtPmdlID0gTlVMTDsKQEAgLTE4NCwyMCArMTQ3LDE5IEBACiAgICAgICAvKiB3ZSdyZSByZWx5aW5nIG9uIGJlaW5nIHNpbmdsZS10aHJlYWRlZCBmb3IgdGhpcyB0byBiZSBzYWZlICovCiAgICAgICBmLT5zYXZlZF9ydW50aW1lX2RpciA9IGdfc3RyZHVwIChnX2dldGVudiAoIlhER19SVU5USU1FX0RJUiIpKTsKICAgICAgIGdfc2V0ZW52ICgiWERHX1JVTlRJTUVfRElSIiwgZi0+dG1wX3J1bnRpbWVfZGlyLCBUUlVFKTsKLSAgICAgIGdfdW5zZXRlbnYgKCJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKTsKICAgICB9CiAKLSAgZi0+YWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uIChjb25maWcgPyBjb25maWctPmNvbmZpZ19maWxlIDogTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPyBjb25maWctPnVzZXIgOiBURVNUX1VTRVJfTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmYtPmRhZW1vbl9waWQpOworICBhZGRyZXNzID0gdGVzdF9nZXRfZGJ1c19kYWVtb24gKGNvbmZpZyA/IGNvbmZpZy0+Y29uZmlnX2ZpbGUgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfVVNFUl9NRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZi0+ZGFlbW9uX3BpZCk7CiAKLSAgaWYgKGYtPmFkZHJlc3MgPT0gTlVMTCkKKyAgaWYgKGFkZHJlc3MgPT0gTlVMTCkKICAgICB7CiAgICAgICBmLT5za2lwID0gVFJVRTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgZi0+bGVmdF9jb25uID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoZi0+Y3R4LCBmLT5hZGRyZXNzKTsKKyAgZi0+bGVmdF9jb25uID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoZi0+Y3R4LCBhZGRyZXNzKTsKIAogICBpZiAoY29uZmlnICE9IE5VTEwgJiYgY29uZmlnLT5jb25uZWN0X21vZGUgPT0gUkVMWV9PTl9ERUZBVUxUKQogICAgIHsKQEAgLTIxMSw4ICsxNzMsMTAgQEAKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBmLT5yaWdodF9jb25uID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoZi0+Y3R4LCBmLT5hZGRyZXNzKTsKKyAgICAgIGYtPnJpZ2h0X2Nvbm4gPSB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChmLT5jdHgsIGFkZHJlc3MpOwogICAgIH0KKworICBnX2ZyZWUgKGFkZHJlc3MpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI1LDE1ICsxODksNiBAQAogfQogCiBzdGF0aWMgdm9pZAotYWRkX2hvbGRfZmlsdGVyIChGaXh0dXJlICpmKQotewotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5yaWdodF9jb25uLCBob2xkX2ZpbHRlciwgZiwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGYtPnJpZ2h0X2Nvbm5faG9sZCA9IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCiBwY19jb3VudCAoREJ1c1BlbmRpbmdDYWxsICpwYywKICAgICB2b2lkICpkYXRhKQogewpAQCAtMjQzLDE3ICsxOTgsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotcGNfZW5xdWV1ZSAoREJ1c1BlbmRpbmdDYWxsICpwYywKLSAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17Ci0gIEdRdWV1ZSAqcSA9IGRhdGE7Ci0gIERCdXNNZXNzYWdlICptID0gZGJ1c19wZW5kaW5nX2NhbGxfc3RlYWxfcmVwbHkgKHBjKTsKLQotICBnX3Rlc3RfbWVzc2FnZSAoIm1lc3NhZ2Ugb2YgdHlwZSAlZCIsIGRidXNfbWVzc2FnZV9nZXRfdHlwZSAobSkpOwotICBnX3F1ZXVlX3B1c2hfdGFpbCAocSwgbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCiB0ZXN0X2VjaG8gKEZpeHR1cmUgKmYsCiAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQogewpAQCAtMzAwLDggKzI0NCw4IEBACiAgICAgICAgICAgICBOVUxMKSkKICAgICAgICAgZ19lcnJvciAoIk9PTSIpOwogCi0gICAgICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLSAgICAgIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOworICAgICAgZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYgKHBjKTsKKyAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7CiAgICAgfQogCiAgIHdoaWxlIChyZWNlaXZlZCA8IGNvdW50KQpAQCAtMzU0LDggKzI5OCw4IEBACiAgICAgICAgICZyZXBseSwgTlVMTCkpCiAgICAgZ19lcnJvciAoIk9PTSIpOwogCi0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKKyAgZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYgKHBjKTsKKyAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKIAogICBpZiAobW9kZSA9PSBESVNDT05ORUNUKQogICAgIHsKQEAgLTM2NCw3ICszMDgsOCBAQAogCiAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+cmlnaHRfY29ubiwgZWNob19maWx0ZXIsIGYpOwogICAgICAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlIChmLT5yaWdodF9jb25uKTsKLSAgICAgIGRidXNfY2xlYXJfY29ubmVjdGlvbiAoJmYtPnJpZ2h0X2Nvbm4pOworICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChmLT5yaWdodF9jb25uKTsKKyAgICAgIGYtPnJpZ2h0X2Nvbm4gPSBOVUxMOwogICAgIH0KIAogICB3aGlsZSAocmVwbHkgPT0gTlVMTCkKQEAgLTM4NCw4ICszMjksNiBAQAogICBlbHNlCiAgICAgZ19hc3NlcnRfY21wc3RyIChmLT5lLm1lc3NhZ2UsID09LAogICAgICAgICAiTWVzc2FnZSBkaWQgbm90IHJlY2VpdmUgYSByZXBseSAodGltZW91dCBieSBtZXNzYWdlIGJ1cykiKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZyZXBseSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00MjAsNyArMzYzLDggQEAKICAgICAgIHBjID09IE5VTEwpCiAgICAgZ19lcnJvciAoIk9PTSIpOwogCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOworICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOworICBtID0gTlVMTDsKIAogICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQogICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwpAQCAtNTQ0LDkgKzQ4OCw2IEBACiAjaWZkZWYgR19PU19XSU4zMgogICBnX2Fzc2VydCAoc2VlbiAmIFNFRU5fV0lORE9XU19TSUQpOwogI2VuZGlmCi0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTczLDcgKzUxNCw4IEBACiAgICAgICBwYyA9PSBOVUxMKQogICAgIGdfZXJyb3IgKCJPT00iKTsKIAotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKKyAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKKyAgbSA9IE5VTEw7CiAKICAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKICAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKQEAgLTYxNiw5ICs1NTgsNiBAQAogICAgIHsKICAgICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIGVycm9yOiAlczogJXMiLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKICAgICB9Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjQ3LDcgKzU4Niw4IEBACiAgICAgICBwYyA9PSBOVUxMKQogICAgIGdfZXJyb3IgKCJPT00iKTsKIAotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKKyAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKKyAgbSA9IE5VTEw7CiAKICAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKICAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKQEAgLTY2Miw4ICs2MDIsNyBAQAogICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSAobSksID09LAogICAgICAgREJVU19NRVNTQUdFX1RZUEVfTUVUSE9EX1JFVFVSTik7CiAKLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOworICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwogCiAgIC8qIE5vdyB0cnkgd2l0aCB0aGUgd3Jvbmcgb2JqZWN0IHBhdGggKi8KICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLApAQCAtNjg1LDcgKzYyNCw4IEBACiAgICAgICBwYyA9PSBOVUxMKQogICAgIGdfZXJyb3IgKCJPT00iKTsKIAotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKKyAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKKyAgbSA9IE5VTEw7CiAKICAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKICAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKQEAgLTcwMiwxNDI3ICs2NDIsMTAgQEAKICAgICAgIERCVVNfRVJST1JfQUNDRVNTX0RFTklFRCk7CiAgIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19tZXNzYWdlX2dldF9zaWduYXR1cmUgKG0pLCA9PSwgInMiKTsKIAotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLSAgZGJ1c19jbGVhcl9wZW5kaW5nX2NhbGwgKCZwYyk7CisgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7CiB9CiAKIHN0YXRpYyB2b2lkCi10ZXN0X21heF9jb25uZWN0aW9ucyAoRml4dHVyZSAqZiwKLSAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgREJ1c0Nvbm5lY3Rpb24gKnRoaXJkX2Nvbm47Ci0gIERCdXNDb25uZWN0aW9uICpmYWlsaW5nX2Nvbm47Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIC8qIFdlIGhhdmUgdHdvIGNvbm5lY3Rpb25zIGFscmVhZHkgKi8KLSAgZ19hc3NlcnQgKGYtPmxlZnRfY29ubiAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGYtPnJpZ2h0X2Nvbm4gIT0gTlVMTCk7Ci0KLSAgLyogT3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXRzIHRoZSBsaW1pdCB0byAzIGNvbm5lY3Rpb25zLCBlaXRoZXIgZ2xvYmFsbHkKLSAgICogb3IgcGVyIHVpZCwgc28gdGhpcyBvbmUgaXMgdGhlIGxhc3QgdGhhdCB3aWxsIHdvcmsgKi8KLSAgdGhpcmRfY29ubiA9IHRlc3RfY29ubmVjdF90b19idXMgKGYtPmN0eCwgZi0+YWRkcmVzcyk7Ci0KLSAgLyogVGhpcyBvbmUgaXMgZ29pbmcgdG8gZmFpbC4gV2UgZG9uJ3QgZ3VhcmFudGVlIHdoZXRoZXIgaXQgd2lsbCBmYWlsCi0gICAqIG5vdywgb3Igd2hpbGUgcmVnaXN0ZXJpbmcgKGltcGxlbWVudGF0aW9uIGRldGFpbDogaXQncyB0aGUgbGF0dGVyKS4gKi8KLSAgZmFpbGluZ19jb25uID0gZGJ1c19jb25uZWN0aW9uX29wZW5fcHJpdmF0ZSAoZi0+YWRkcmVzcywgJmVycm9yKTsKLQotICBpZiAoZmFpbGluZ19jb25uICE9IE5VTEwpCi0gICAgewotICAgICAgZ2Jvb2xlYW4gb2sgPSBkYnVzX2J1c19yZWdpc3RlciAoZmFpbGluZ19jb25uLCAmZXJyb3IpOwotCi0gICAgICBnX2Fzc2VydCAoIW9rKTsKLSAgICB9Ci0KLSAgZ19hc3NlcnQgKGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKTsKLSAgZ19hc3NlcnRfY21wc3RyIChlcnJvci5uYW1lLCA9PSwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQpOwotCi0gIGlmIChmYWlsaW5nX2Nvbm4gIT0gTlVMTCkKLSAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgKGZhaWxpbmdfY29ubik7Ci0KLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZmFpbGluZ19jb25uKTsKLSAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlICh0aGlyZF9jb25uKTsKLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmdGhpcmRfY29ubik7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X21heF9yZXBsaWVzX3Blcl9jb25uZWN0aW9uIChGaXh0dXJlICpmLAotICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgR1F1ZXVlIHJlY2VpdmVkID0gR19RVUVVRV9JTklUOwotICBHUXVldWUgZXJyb3JzID0gR19RVUVVRV9JTklUOwotICBEQnVzTWVzc2FnZSAqbTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYzsKLSAgZ3VpbnQgaTsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBhZGRfaG9sZF9maWx0ZXIgKGYpOwotCi0gIC8qIFRoZSBjb25maWd1cmVkIGxpbWl0IGlzIDMgcmVwbGllcyBwZXIgY29ubmVjdGlvbi4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSAgICB7Ci0gICAgICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoCi0gICAgICAgICAgZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5yaWdodF9jb25uKSwgIi8iLAotICAgICAgICAgICJjb20uZXhhbXBsZSIsICJTcGFtIik7Ci0KLSAgICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX0lORklOSVRFKSB8fAotICAgICAgICAgIHBjID09IE5VTEwpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICAgICAgcGNfZW5xdWV1ZSAocGMsICZyZWNlaXZlZCk7Ci0gICAgICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHBjX2VucXVldWUsICZyZWNlaXZlZCwKLSAgICAgICAgICAgIE5VTEwpKQotICAgICAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgICAgIGRidXNfcGVuZGluZ19jYWxsX3VucmVmIChwYyk7Ci0gICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICAgIH0KLQotICB3aGlsZSAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmZi0+aGVsZF9tZXNzYWdlcykgPCAzKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgZ19hc3NlcnRfY21wdWludCAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmcmVjZWl2ZWQpLCA9PSwgMCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmVycm9ycyksID09LCAwKTsKLQotICAvKiBHbyBhIGNvdXBsZSBvZiBtZXNzYWdlcyBvdmVyIHRoZSBsaW1pdC4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLSAgICB7Ci0gICAgICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoCi0gICAgICAgICAgZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5yaWdodF9jb25uKSwgIi8iLAotICAgICAgICAgICJjb20uZXhhbXBsZSIsICJTcGFtIik7Ci0KLSAgICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX0lORklOSVRFKSB8fAotICAgICAgICAgIHBjID09IE5VTEwpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICAgICAgcGNfZW5xdWV1ZSAocGMsICZlcnJvcnMpOwotICAgICAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCBwY19lbnF1ZXVlLCAmZXJyb3JzLAotICAgICAgICAgICAgTlVMTCkpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYgKHBjKTsKLSAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0gICAgfQotCi0gIC8qIFJlcGx5IHRvIHRoZSBoZWxkIG1lc3NhZ2VzLiAqLwotICBmb3IgKG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+aGVsZF9tZXNzYWdlcyk7Ci0gICAgICAgbSAhPSBOVUxMOwotICAgICAgIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+aGVsZF9tZXNzYWdlcykpCi0gICAgewotICAgICAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuIChtKTsKLQotICAgICAgaWYgKHJlcGx5ID09IE5VTEwpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+cmlnaHRfY29ubiwgcmVwbHksIE5VTEwpKQotICAgICAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgICAgIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICAgICAgZGJ1c19jbGVhcl9tZXNzYWdlICgmcmVwbHkpOwotICAgIH0KLQotICAvKiBXYWl0IGZvciBhbGwgNSByZXBsaWVzIHRvIGNvbWUgaW4uICovCi0gIHdoaWxlIChnX3F1ZXVlX2dldF9sZW5ndGggKCZyZWNlaXZlZCkgKyBnX3F1ZXVlX2dldF9sZW5ndGggKCZlcnJvcnMpIDwgNSkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIC8qIFRoZSBmaXJzdCB0aHJlZSBzdWNjZWVkZWQuICovCi0gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgewotICAgICAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZyZWNlaXZlZCk7Ci0gICAgICBnX2Fzc2VydCAobSAhPSBOVUxMKTsKLQotICAgICAgaWYgKGRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCBtKSkKLSAgICAgICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgZXJyb3I6ICVzOiAlcyIsIGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UpOwotCi0gICAgICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLSAgICB9Ci0KLSAgLyogVGhlIGxhc3QgdHdvIGZhaWxlZC4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLSAgICB7Ci0gICAgICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmVycm9ycyk7Ci0gICAgICBnX2Fzc2VydCAobSAhPSBOVUxMKTsKLQotICAgICAgaWYgKCFkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZlcnJvciwgbSkpCi0gICAgICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLQotICAgICAgZ19hc3NlcnRfY21wc3RyIChlcnJvci5uYW1lLCA9PSwgREJVU19FUlJPUl9MSU1JVFNfRVhDRUVERUQpOwotICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotICAgICAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gICAgfQotCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJnJlY2VpdmVkKSwgPT0sIDApOwotICBnX2Fzc2VydF9jbXB1aW50IChnX3F1ZXVlX2dldF9sZW5ndGggKCZlcnJvcnMpLCA9PSwgMCk7Ci0gIGdfcXVldWVfY2xlYXIgKCZyZWNlaXZlZCk7Ci0gIGdfcXVldWVfY2xlYXIgKCZlcnJvcnMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9tYXhfbWF0Y2hfcnVsZXNfcGVyX2Nvbm5lY3Rpb24gKEZpeHR1cmUgKmYsCi0gICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGRidXNfYnVzX2FkZF9tYXRjaCAoZi0+bGVmdF9jb25uLCAic2VuZGVyPSdjb20uZXhhbXBsZS5DMSciLCAmZXJyb3IpOwotICB0ZXN0X2Fzc2VydF9ub19lcnJvciAoJmVycm9yKTsKLSAgZGJ1c19idXNfYWRkX21hdGNoIChmLT5sZWZ0X2Nvbm4sICJzZW5kZXI9J2NvbS5leGFtcGxlLkMyJyIsICZlcnJvcik7Ci0gIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZXJyb3IpOwotICBkYnVzX2J1c19hZGRfbWF0Y2ggKGYtPmxlZnRfY29ubiwgInNlbmRlcj0nY29tLmV4YW1wbGUuQzMnIiwgJmVycm9yKTsKLSAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZlcnJvcik7Ci0KLSAgZGJ1c19idXNfYWRkX21hdGNoIChmLT5sZWZ0X2Nvbm4sICJzZW5kZXI9J2NvbS5leGFtcGxlLkM0JyIsICZlcnJvcik7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfTElNSVRTX0VYQ0VFREVEKTsKLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIGRidXNfYnVzX3JlbW92ZV9tYXRjaCAoZi0+bGVmdF9jb25uLCAic2VuZGVyPSdjb20uZXhhbXBsZS5DMyciLCAmZXJyb3IpOwotICB0ZXN0X2Fzc2VydF9ub19lcnJvciAoJmVycm9yKTsKLQotICBkYnVzX2J1c19hZGRfbWF0Y2ggKGYtPmxlZnRfY29ubiwgInNlbmRlcj0nY29tLmV4YW1wbGUuQzQnIiwgJmVycm9yKTsKLSAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZlcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X21heF9uYW1lc19wZXJfY29ubmVjdGlvbiAoRml4dHVyZSAqZiwKLSAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgaW50IHJldDsKLQotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KLSAgLyogVGhlIGxpbWl0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc2V0IHRvIDQsIGJ1dCB3ZSBvbmx5IG93biAzCi0gICAqIG5hbWVzIGhlcmUgLSByZW1lbWJlciB0aGF0IHRoZSB1bmlxdWUgbmFtZSBpcyBhIG5hbWUgdG9vLiAqLwotCi0gIHJldCA9IGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoZi0+bGVmdF9jb25uLCAiY29tLmV4YW1wbGUuQzEiLCAwLCAmZXJyb3IpOwotICB0ZXN0X2Fzc2VydF9ub19lcnJvciAoJmVycm9yKTsKLSAgZ19hc3NlcnRfY21waW50IChyZXQsID09LCBEQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9QUklNQVJZX09XTkVSKTsKLQotICByZXQgPSBkYnVzX2J1c19yZXF1ZXN0X25hbWUgKGYtPmxlZnRfY29ubiwgImNvbS5leGFtcGxlLkMyIiwgMCwgJmVycm9yKTsKLSAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZlcnJvcik7Ci0gIGdfYXNzZXJ0X2NtcGludCAocmV0LCA9PSwgREJVU19SRVFVRVNUX05BTUVfUkVQTFlfUFJJTUFSWV9PV05FUik7Ci0KLSAgcmV0ID0gZGJ1c19idXNfcmVxdWVzdF9uYW1lIChmLT5sZWZ0X2Nvbm4sICJjb20uZXhhbXBsZS5DMyIsIDAsICZlcnJvcik7Ci0gIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZXJyb3IpOwotICBnX2Fzc2VydF9jbXBpbnQgKHJldCwgPT0sIERCVVNfUkVRVUVTVF9OQU1FX1JFUExZX1BSSU1BUllfT1dORVIpOwotCi0gIHJldCA9IGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoZi0+bGVmdF9jb25uLCAiY29tLmV4YW1wbGUuQzQiLCAwLCAmZXJyb3IpOwotICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX0xJTUlUU19FWENFRURFRCk7Ci0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLSAgZ19hc3NlcnRfY21waW50IChyZXQsID09LCAtMSk7Ci0KLSAgcmV0ID0gZGJ1c19idXNfcmVsZWFzZV9uYW1lIChmLT5sZWZ0X2Nvbm4sICJjb20uZXhhbXBsZS5DMyIsICZlcnJvcik7Ci0gIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZXJyb3IpOwotICBnX2Fzc2VydF9jbXBpbnQgKHJldCwgPT0sIERCVVNfUkVMRUFTRV9OQU1FX1JFUExZX1JFTEVBU0VEKTsKLQotICByZXQgPSBkYnVzX2J1c19yZXF1ZXN0X25hbWUgKGYtPmxlZnRfY29ubiwgImNvbS5leGFtcGxlLkM0IiwgMCwgJmVycm9yKTsKLSAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZlcnJvcik7Ci0gIGdfYXNzZXJ0X2NtcGludCAocmV0LCA9PSwgREJVU19SRVFVRVNUX05BTUVfUkVQTFlfUFJJTUFSWV9PV05FUik7Ci19Ci0KLSNpZiBkZWZpbmVkKERCVVNfVU5JWCkgJiYgZGVmaW5lZChIQVZFX1VOSVhfRkRfUEFTU0lORykgJiYgZGVmaW5lZChIQVZFX0dJT19VTklYKQotCi1zdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQKLXdhaXRfZm9yX2Rpc2Nvbm5lY3RlZF9jYiAoREJ1c0Nvbm5lY3Rpb24gKmNsaWVudF9jb25uLAotICAgIERCdXNNZXNzYWdlICptZXNzYWdlLAotICAgIHZvaWQgKmRhdGEpCi17Ci0gIGdib29sZWFuICpkaXNjb25uZWN0ZWQgPSBkYXRhOwotCi0gIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCwgIkRpc2Nvbm5lY3RlZCIpKQotICAgIHsKLSAgICAgICpkaXNjb25uZWN0ZWQgPSBUUlVFOwotICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKLSAgICB9Ci0KLSAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOwotfQotCi1zdGF0aWMgY29uc3QgZ3VjaGFyIHBhcnRpYWxfbWVzc2FnZVtdID0KLXsKLSAgREJVU19MSVRUTEVfRU5ESUFOLAotICBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCwKLSAgMCwgLyogZmxhZ3MgKi8KLSAgMSwgLyogdmVyc2lvbiAqLwotICAweGZmLCAweGZmLCAwLCAwLCAvKiBsZW5ndGggb2YgYm9keSA9IDY1NTM1IGJ5dGVzICovCi0gIDEsIDIsIDMsIDQsIC8qIGNvb2tpZSAqLwotICAweGZmLCAweGZmLCAwLCAwLCAvKiBsZW5ndGggb2YgaGVhZGVyIGZpZWxkcyBhcnJheSA9IDY1NTM1IGJ5dGVzICovCi0gIDQyIC8qIHByZXRlbmRpbmcgdG8gYmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGVyIGZpZWxkcyBhcnJheSAqLwotfTsKLQotc3RhdGljIHZvaWQKLXNlbmRfYWxsX3dpdGhfZmQgKEdTb2NrZXQgKnNvY2tldCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGd1Y2hhciAqbG9jYWxfcGFydGlhbF9tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgZ3NpemUgbGVuLAotICAgICAgICAgICAgICAgICAgaW50IGZkKQotewotICBHU29ja2V0Q29udHJvbE1lc3NhZ2UgKmZkbSA9IGdfdW5peF9mZF9tZXNzYWdlX25ldyAoKTsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIGdzc2l6ZSBzZW50OwotICBHT3V0cHV0VmVjdG9yIHZlY3RvciA9IHsgbG9jYWxfcGFydGlhbF9tZXNzYWdlLCBsZW4gfTsKLQotICBnX3VuaXhfZmRfbWVzc2FnZV9hcHBlbmRfZmQgKEdfVU5JWF9GRF9NRVNTQUdFIChmZG0pLCBmZCwgJmVycm9yKTsKLSAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKLQotICBzZW50ID0gZ19zb2NrZXRfc2VuZF9tZXNzYWdlIChzb2NrZXQsIE5VTEwsICZ2ZWN0b3IsIDEsICZmZG0sIDEsCi0gICAgICBHX1NPQ0tFVF9NU0dfTk9ORSwgTlVMTCwgJmVycm9yKTsKLSAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKLSAgZ19hc3NlcnRfY21waW50IChzZW50LCA+PSwgMSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoc2VudCwgPD0sIHZlY3Rvci5zaXplKTsKLQotICB3aGlsZSAoKChnc2l6ZSkgc2VudCkgPCB2ZWN0b3Iuc2l6ZSkKLSAgICB7Ci0gICAgICB2ZWN0b3Iuc2l6ZSAtPSBzZW50OwotICAgICAgdmVjdG9yLmJ1ZmZlciA9ICgoY29uc3QgZ3VjaGFyICopIHZlY3Rvci5idWZmZXIpICsgc2VudDsKLSAgICAgIHNlbnQgPSBnX3NvY2tldF9zZW5kX21lc3NhZ2UgKHNvY2tldCwgTlVMTCwgJnZlY3RvciwgMSwgTlVMTCwgMCwKLSAgICAgICAgICBHX1NPQ0tFVF9NU0dfTk9ORSwgTlVMTCwgJmVycm9yKTsKLSAgICAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNlbnQsID49LCAxKTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoc2VudCwgPD0sIHZlY3Rvci5zaXplKTsKLSAgICB9Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGZkbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3BlbmRpbmdfZmRfdGltZW91dCAoRml4dHVyZSAqZiwKLSAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBnaW50NjQgc3RhcnQ7Ci0gIGludCBmZDsKLSAgR1NvY2tldCAqc29ja2V0OwotICBnYm9vbGVhbiBoYXZlX21lbTsKLSAgZ2Jvb2xlYW4gZGlzY29ubmVjdGVkID0gRkFMU0U7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChnZXR1aWQgKCkgPT0gMCkKLSAgICB7Ci0gICAgICBnX3Rlc3Rfc2tpcCAoIkNhbm5vdCB0ZXN0LCB1aWQgMCBpcyBpbW11bmUgdG8gdGhpcyBsaW1pdCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBoYXZlX21lbSA9IGRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5sZWZ0X2Nvbm4sIHdhaXRfZm9yX2Rpc2Nvbm5lY3RlZF9jYiwKLSAgICAgICZkaXNjb25uZWN0ZWQsIE5VTEwpOwotICBnX2Fzc2VydCAoaGF2ZV9tZW0pOwotCi0gIC8qIFRoaXMgaXMgbm90IEFQSS4gTmV2ZXIgZG8gdGhpcy4gKi8KLQotICBpZiAoIWRidXNfY29ubmVjdGlvbl9nZXRfc29ja2V0IChmLT5sZWZ0X2Nvbm4sICZmZCkpCi0gICAgZ19lcnJvciAoImZhaWxlZCB0byBzdGVhbCBmZCBmcm9tIGxlZnQgY29ubmVjdGlvbiIpOwotCi0gIHNvY2tldCA9IGdfc29ja2V0X25ld19mcm9tX2ZkIChmZCwgJmVycm9yKTsKLSAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKLSAgZ19hc3NlcnQgKHNvY2tldCAhPSBOVUxMKTsKLQotICAvKiBXZSBzZW5kIHBhcnQgb2YgYSBtZXNzYWdlIHRoYXQgY29udGFpbnMgYSBmZCwgdGhlbiBzdG9wLiAqLwotICBzdGFydCA9IGdfZ2V0X21vbm90b25pY190aW1lICgpOwotICBzZW5kX2FsbF93aXRoX2ZkIChzb2NrZXQsIHBhcnRpYWxfbWVzc2FnZSwgR19OX0VMRU1FTlRTIChwYXJ0aWFsX21lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICBmZCk7Ci0KLSAgd2hpbGUgKCFkaXNjb25uZWN0ZWQpCi0gICAgewotICAgICAgdGVzdF9wcm9ncmVzcyAoJy4nKTsKLSAgICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgICAgIC8qIEl0IHNob3VsZCB0YWtlIDAuNXMgdG8gZ2V0IGRpc2Nvbm5lY3RlZCwgYXMgY29uZmlndXJlZCBpbgotICAgICAgICogdmFsaWQtY29uZmlnLWZpbGVzL3BlbmRpbmctZmQtdGltZW91dC5jb25mOyBidXQgdGhpcyB0ZXN0Ci0gICAgICAgKiBtaWdodCBnZXQgc3RhcnZlZCBieSBvdGhlciBwcm9jZXNzZXMgcnVubmluZyBpbiBwYXJhbGxlbAotICAgICAgICogKHBhcnRpY3VsYXJseSBvbiBzaGFyZWQgQ0kgc3lzdGVtcyksIHNvIHdlIGhhdmUgdG8gYmUgYSBsb3QKLSAgICAgICAqIG1vcmUgZ2VuZXJvdXMuIEFsbG93IHVwIHRvIDEwIHNlY29uZHMuICovCi0gICAgICBnX2Fzc2VydF9jbXBpbnQgKGdfZ2V0X21vbm90b25pY190aW1lICgpLCA8PSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyAoMTAgKiBHX1VTRUNfUEVSX1NFQykpOwotICAgIH0KLQotICBnX29iamVjdF91bnJlZiAoc29ja2V0KTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgY29uc3QgZ2NoYXIgKnBhdGg7Ci0gIGd1aW50IG5fZmRzOwotICBnYm9vbGVhbiBzaG91bGRfd29yazsKLX0gQ291bnRGZHNWZWN0b3I7Ci0KLXN0YXRpYyBjb25zdCBDb3VudEZkc1ZlY3RvciBjb3VudF9mZHNfdmVjdG9yc1tdID0KLXsKLSAgLyogRGVueSBzZW5kaW5nIGlmIG51bWJlciBvZiBmZHMgPD0gMiAqLwotICB7ICIvdGVzdC9EZW55U2VuZE1heDIiLCAxLCBGQUxTRSB9LAotICB7ICIvdGVzdC9EZW55U2VuZE1heDIiLCAyLCBGQUxTRSB9LAotICB7ICIvdGVzdC9EZW55U2VuZE1heDIiLCAzLCBUUlVFIH0sCi0gIHsgIi90ZXN0L0RlbnlTZW5kTWF4MiIsIDQsIFRSVUUgfSwKLQotICAvKiBEZW55IHJlY2VpdmluZyBpZiBudW1iZXIgb2YgZmRzIDw9IDMgKi8KLSAgeyAiL3Rlc3QvRGVueVJlY2VpdmVNYXgzIiwgMiwgRkFMU0UgfSwKLSAgeyAiL3Rlc3QvRGVueVJlY2VpdmVNYXgzIiwgMywgRkFMU0UgfSwKLSAgeyAiL3Rlc3QvRGVueVJlY2VpdmVNYXgzIiwgNCwgVFJVRSB9LAotICB7ICIvdGVzdC9EZW55UmVjZWl2ZU1heDMiLCA1LCBUUlVFIH0sCi0KLSAgLyogRGVueSBzZW5kaW5nIGlmIG51bWJlciBvZiBmZHMgPj0gNCAqLwotICB7ICIvdGVzdC9EZW55U2VuZE1pbjQiLCAyLCBUUlVFIH0sCi0gIHsgIi90ZXN0L0RlbnlTZW5kTWluNCIsIDMsIFRSVUUgfSwKLSAgeyAiL3Rlc3QvRGVueVNlbmRNaW40IiwgNCwgRkFMU0UgfSwKLSAgeyAiL3Rlc3QvRGVueVNlbmRNaW40IiwgNSwgRkFMU0UgfSwKLQotICAvKiBEZW55IHJlY2VpdmluZyBpZiBudW1iZXIgb2YgZmRzID49IDUgKi8KLSAgeyAiL3Rlc3QvRGVueVJlY2VpdmVNaW41IiwgMywgVFJVRSB9LAotICB7ICIvdGVzdC9EZW55UmVjZWl2ZU1pbjUiLCA0LCBUUlVFIH0sCi0gIHsgIi90ZXN0L0RlbnlSZWNlaXZlTWluNSIsIDUsIEZBTFNFIH0sCi0gIHsgIi90ZXN0L0RlbnlSZWNlaXZlTWluNSIsIDYsIEZBTFNFIH0sCi19OwotCi1zdGF0aWMgdm9pZAotdGVzdF9jb3VudF9mZHMgKEZpeHR1cmUgKmYsCi0gICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBHUXVldWUgcmVjZWl2ZWQgPSBHX1FVRVVFX0lOSVQ7Ci0gIERCdXNNZXNzYWdlICptOwotICBEQnVzUGVuZGluZ0NhbGwgKnBjOwotICBndWludCBpOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNvbnN0IGludCBzdGRpbl9mZCA9IDA7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGFkZF9ob2xkX2ZpbHRlciAoZik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoY291bnRfZmRzX3ZlY3RvcnMpOyBpKyspCi0gICAgewotICAgICAgY29uc3QgQ291bnRGZHNWZWN0b3IgKnZlY3RvciA9ICZjb3VudF9mZHNfdmVjdG9yc1tpXTsKLSAgICAgIGd1aW50IGo7Ci0KLSAgICAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsICgKLSAgICAgICAgICBkYnVzX2J1c19nZXRfdW5pcXVlX25hbWUgKGYtPnJpZ2h0X2Nvbm4pLCB2ZWN0b3ItPnBhdGgsCi0gICAgICAgICAgImNvbS5leGFtcGxlIiwgIlNwYW0iKTsKLQotICAgICAgaWYgKG0gPT0gTlVMTCkKLSAgICAgICAgZ19lcnJvciAoIk9PTSIpOwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgdmVjdG9yLT5uX2ZkczsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VTklYX0ZELCAmc3RkaW5fZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkKLSAgICAgICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgICAgICAgfQotCi0gICAgICBpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGYtPmxlZnRfY29ubiwgbSwgJnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RJTUVPVVRfSU5GSU5JVEUpIHx8Ci0gICAgICAgICAgcGMgPT0gTlVMTCkKLSAgICAgICAgZ19lcnJvciAoIk9PTSIpOwotCi0gICAgICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgICAgICBwY19lbnF1ZXVlIChwYywgJnJlY2VpdmVkKTsKLSAgICAgIGVsc2UgaWYgKCFkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5IChwYywgcGNfZW5xdWV1ZSwgJnJlY2VpdmVkLAotICAgICAgICAgICAgTlVMTCkpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYgKHBjKTsKLSAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgICAgIGlmICh2ZWN0b3ItPnNob3VsZF93b3JrKQotICAgICAgICB7Ci0gICAgICAgICAgREJ1c01lc3NhZ2UgKnJlcGx5OwotCi0gICAgICAgICAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPmhlbGRfbWVzc2FnZXMpIDwgMSkKLSAgICAgICAgICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPmhlbGRfbWVzc2FnZXMpLCA9PSwgMSk7Ci0KLSAgICAgICAgICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPmhlbGRfbWVzc2FnZXMpOwotCi0gICAgICAgICAgZ19hc3NlcnRfY21waW50IChnX3F1ZXVlX2dldF9sZW5ndGggKCZmLT5oZWxkX21lc3NhZ2VzKSwgPT0sIDApOwotCi0gICAgICAgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4gKG0pOwotCi0gICAgICAgICAgaWYgKHJlcGx5ID09IE5VTEwpCi0gICAgICAgICAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgICAgICAgICBpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kIChmLT5yaWdodF9jb25uLCByZXBseSwgTlVMTCkpCi0gICAgICAgICAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKLSAgICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICAgICAgICB9Ci0KLSAgICAgIHdoaWxlIChnX3F1ZXVlX2dldF9sZW5ndGggKCZyZWNlaXZlZCkgPCAxKQotICAgICAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gICAgICBnX2Fzc2VydF9jbXBpbnQgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJnJlY2VpdmVkKSwgPT0sIDEpOwotICAgICAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZyZWNlaXZlZCk7Ci0gICAgICBnX2Fzc2VydCAobSAhPSBOVUxMKTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmcmVjZWl2ZWQpLCA9PSwgMCk7Ci0KLSAgICAgIGlmICh2ZWN0b3ItPnNob3VsZF93b3JrKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKGRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCBtKSkKLSAgICAgICAgICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIGVycm9yOiAlczogJXMiLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKLQotICAgICAgICAgIGdfdGVzdF9tZXNzYWdlICgiU2VuZGluZyAldSBmZHMgdG8gJXMgd2FzIG5vdCBkZW5pZWQsIGFzIGV4cGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yLT5uX2ZkcywgdmVjdG9yLT5wYXRoKTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoIWRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCBtKSkKLSAgICAgICAgewotICAgICAgICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZ19hc3NlcnRfY21wc3RyIChlcnJvci5uYW1lLCA9PSwgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVEKTsKLSAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0gICAgICAgICAgZ190ZXN0X21lc3NhZ2UgKCJTZW5kaW5nICV1IGZkcyB0byAlcyB3YXMgZGVuaWVkLCBhcyBleHBlY3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvci0+bl9mZHMsIHZlY3Rvci0+cGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLSAgICB9Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotdGVzdF9wZWVyX2dldF9tYWNoaW5lX2lkIChGaXh0dXJlICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIGNoYXIgKndoYXRfaV90aGluazsKLSAgY29uc3QgY2hhciAqd2hhdF9kYWVtb25fdGhpbmtzOwotICBEQnVzTWVzc2FnZSAqbSA9IE5VTEw7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIHdoYXRfaV90aGluayA9IGRidXNfdHJ5X2dldF9sb2NhbF9tYWNoaW5lX2lkICgmZXJyb3IpOwotCi0gIGlmICh3aGF0X2lfdGhpbmsgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBpZiAoZ19nZXRlbnYgKCJEQlVTX1RFU1RfVU5JTlNUQUxMRUQiKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgLyogV2hlbiBydW5uaW5nIHVuaXQgdGVzdHMgZHVyaW5nIG1ha2UgY2hlY2sgb3IgbWFrZSBpbnN0YWxsY2hlY2ssCi0gICAgICAgICAgICogdG9sZXJhdGUgdGhpcyAqLwotICAgICAgICAgIGdfdGVzdF9za2lwICgiTWFjaGluZSBVVUlEIG5vdCBhdmFpbGFibGUiKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qIFdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cywgZG9uJ3QgdG9sZXJhdGUgaXQgKi8KLSAgICAgICAgICBnX2Vycm9yICgiJXMiLCBlcnJvci5tZXNzYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAvKiBDaGVjayB0aGF0IHRoZSBkYnVzLWRhZW1vbiBhZ3JlZXMgd2l0aCB1cy4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19QQVRIX0RCVVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX0lOVEVSRkFDRV9QRUVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldE1hY2hpbmVJZCIpOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8Ci0gICAgICBwYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLQotICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0sIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICB3aGlsZSAobSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKG0sICZlcnJvciwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJndoYXRfZGFlbW9uX3RoaW5rcywKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQotICAgIGdfZXJyb3IgKCIlczogJXMiLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKLQotICBnX2Fzc2VydF9jbXBzdHIgKHdoYXRfaV90aGluaywgPT0sIHdoYXRfZGFlbW9uX3RoaW5rcyk7Ci0gIGdfYXNzZXJ0X25vbm51bGwgKHdoYXRfZGFlbW9uX3RoaW5rcyk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKHN0cmxlbiAod2hhdF9kYWVtb25fdGhpbmtzKSwgPT0sIDMyKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLSAgZGJ1c19jbGVhcl9wZW5kaW5nX2NhbGwgKCZwYyk7Ci0gIGRidXNfZnJlZSAod2hhdF9pX3RoaW5rKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfcGVlcl9waW5nIChGaXh0dXJlICpmLAotICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChEQlVTX1NFUlZJQ0VfREJVUywKLSAgICAgIERCVVNfUEFUSF9EQlVTLCBEQlVTX0lOVEVSRkFDRV9QRUVSLCAiUGluZyIpOwotICBEQnVzUGVuZGluZ0NhbGwgKnBjID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICBEQlVTX1BBVEhfREJVUywgREJVU19JTlRFUkZBQ0VfUEVFUiwgIlBpbmciKTsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkKLSAgICBnX2Vycm9yICgiJXM6ICVzIiwgZXJyb3IubmFtZSwgZXJyb3IubWVzc2FnZSk7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9nZXRfaW52YWxpZF9wYXRoIChGaXh0dXJlICpmLAotICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNNZXNzYWdlICptID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICAiLyIsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXQiKTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYyA9IE5VTEw7Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgY29uc3QgY2hhciAqaWZhY2UgPSBEQlVTX0lOVEVSRkFDRV9EQlVTOwotICBjb25zdCBjaGFyICpwcm9wZXJ0eSA9ICJJbnRlcmZhY2VzIjsKLQotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKG0gPT0gTlVMTCB8fAotICAgICAgIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobSwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJmlmYWNlLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmcHJvcGVydHksCi0gICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAotICAgICAgIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGYtPmxlZnRfY29ubiwgbSwgJnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVElNRU9VVF9VU0VfREVGQVVMVCkgfHwKLSAgICAgIHBjID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotCi0gIGlmIChkYnVzX3BlbmRpbmdfY2FsbF9nZXRfY29tcGxldGVkIChwYykpCi0gICAgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHkgKHBjLCAmbSk7Ci0gIGVsc2UgaWYgKCFkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5IChwYywgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbSwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIHdoaWxlIChtID09IE5VTEwpCi0gICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKLQotICBpZiAoIWRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCBtKSkKLSAgICBnX2Vycm9yICgiVW5leHBlY3RlZCBzdWNjZXNzIik7Ci0KLSAgLyogVGhhdCBvYmplY3QgcGF0aCBkb2VzIG5vdCBoYXZlIHRoYXQgaW50ZXJmYWNlICovCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfVU5LTk9XTl9JTlRFUkZBQ0UpOwotICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9nZXRfaW52YWxpZF9pZmFjZSAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChEQlVTX1NFUlZJQ0VfREJVUywKLSAgICAgIERCVVNfUEFUSF9EQlVTLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiR2V0Iik7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlID0gImNvbS5leGFtcGxlLk5vcGUiOwotICBjb25zdCBjaGFyICpwcm9wZXJ0eSA9ICJXaGF0ZXZlciI7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJnByb3BlcnR5LAotICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKLSAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8Ci0gICAgICBwYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLQotICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0sIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICB3aGlsZSAobSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgaWYgKCFkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZlcnJvciwgbSkpCi0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3VjY2VzcyIpOwotCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfVU5LTk9XTl9JTlRFUkZBQ0UpOwotICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9nZXRfaW52YWxpZCAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChEQlVTX1NFUlZJQ0VfREJVUywKLSAgICAgIERCVVNfUEFUSF9EQlVTLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiR2V0Iik7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlID0gREJVU19JTlRFUkZBQ0VfREJVUzsKLSAgY29uc3QgY2hhciAqcHJvcGVydHkgPSAiV2hhdGV2ZXIiOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwcm9wZXJ0eSwKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlICgmZXJyb3IsIG0pKQotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLQotICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX1VOS05PV05fUFJPUEVSVFkpOwotICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9nZXRfYWxsX2ludmFsaWRfaWZhY2UgKEZpeHR1cmUgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLAotICAgICAgREJVU19QQVRIX0RCVVMsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXRBbGwiKTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYyA9IE5VTEw7Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgY29uc3QgY2hhciAqaWZhY2UgPSAiY29tLmV4YW1wbGUuTm9wZSI7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlICgmZXJyb3IsIG0pKQotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLQotICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNFKTsKLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZ2V0X2FsbF9pbnZhbGlkX3BhdGggKEZpeHR1cmUgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNNZXNzYWdlICptID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICAiLyIsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXRBbGwiKTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYyA9IE5VTEw7Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKLSAgY29uc3QgY2hhciAqaWZhY2UgPSBEQlVTX0lOVEVSRkFDRV9EQlVTOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAotICAgICAgIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGYtPmxlZnRfY29ubiwgbSwgJnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVElNRU9VVF9VU0VfREVGQVVMVCkgfHwKLSAgICAgIHBjID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotCi0gIGlmIChkYnVzX3BlbmRpbmdfY2FsbF9nZXRfY29tcGxldGVkIChwYykpCi0gICAgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHkgKHBjLCAmbSk7Ci0gIGVsc2UgaWYgKCFkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5IChwYywgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbSwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIHdoaWxlIChtID09IE5VTEwpCi0gICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKLQotICBpZiAoIWRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCBtKSkKLSAgICBnX2Vycm9yICgiVW5leHBlY3RlZCBzdWNjZXNzIik7Ci0KLSAgLyogVGhhdCBvYmplY3QgcGF0aCBkb2VzIG5vdCBoYXZlIHRoYXQgaW50ZXJmYWNlICovCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfVU5LTk9XTl9JTlRFUkZBQ0UpOwotICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0gIGRidXNfY2xlYXJfcGVuZGluZ19jYWxsICgmcGMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9zZXRfaW52YWxpZF9pZmFjZSAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChEQlVTX1NFUlZJQ0VfREJVUywKLSAgICAgIERCVVNfUEFUSF9EQlVTLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiU2V0Iik7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlID0gImNvbS5leGFtcGxlLk5vcGUiOwotICBjb25zdCBjaGFyICpwcm9wZXJ0eSA9ICJXaGF0ZXZlciI7Ci0gIERCdXNNZXNzYWdlSXRlciBhcmdzX2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciB2YXJfaXRlcjsKLSAgZGJ1c19ib29sX3QgYiA9IEZBTFNFOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwcm9wZXJ0eSwKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZCAobSwgJmFyZ3NfaXRlcik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFyZ3NfaXRlciwKLSAgICAgICAgREJVU19UWVBFX1ZBUklBTlQsICJiIiwgJnZhcl9pdGVyKSB8fAotICAgICAgIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJnZhcl9pdGVyLCBEQlVTX1RZUEVfQk9PTEVBTiwgJmIpIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmYXJnc19pdGVyLCAmdmFyX2l0ZXIpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlICgmZXJyb3IsIG0pKQotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLQotICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNFKTsKLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2V0X2ludmFsaWRfcGF0aCAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLAotICAgICAgIi8iLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiU2V0Iik7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlID0gREJVU19JTlRFUkZBQ0VfREJVUzsKLSAgY29uc3QgY2hhciAqcHJvcGVydHkgPSAiSW50ZXJmYWNlcyI7Ci0gIERCdXNNZXNzYWdlSXRlciBhcmdzX2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciB2YXJfaXRlcjsKLSAgZGJ1c19ib29sX3QgYiA9IEZBTFNFOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwcm9wZXJ0eSwKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZCAobSwgJmFyZ3NfaXRlcik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFyZ3NfaXRlciwKLSAgICAgICAgREJVU19UWVBFX1ZBUklBTlQsICJiIiwgJnZhcl9pdGVyKSB8fAotICAgICAgIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJnZhcl9pdGVyLCBEQlVTX1RZUEVfQk9PTEVBTiwgJmIpIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmYXJnc19pdGVyLCAmdmFyX2l0ZXIpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlICgmZXJyb3IsIG0pKQotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN1Y2Nlc3MiKTsKLQotICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNFKTsKLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2V0X2ludmFsaWQgKEZpeHR1cmUgKmYsCi0gICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNNZXNzYWdlICptID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICBEQlVTX1BBVEhfREJVUywgREJVU19JTlRFUkZBQ0VfUFJPUEVSVElFUywgIlNldCIpOwotICBEQnVzUGVuZGluZ0NhbGwgKnBjID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICBjb25zdCBjaGFyICppZmFjZSA9IERCVVNfSU5URVJGQUNFX0RCVVM7Ci0gIGNvbnN0IGNoYXIgKnByb3BlcnR5ID0gIldoYXRldmVyIjsKLSAgREJ1c01lc3NhZ2VJdGVyIGFyZ3NfaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIHZhcl9pdGVyOwotICBkYnVzX2Jvb2xfdCBiID0gRkFMU0U7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJnByb3BlcnR5LAotICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kIChtLCAmYXJnc19pdGVyKTsKLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmYXJnc19pdGVyLAotICAgICAgICBEQlVTX1RZUEVfVkFSSUFOVCwgImIiLCAmdmFyX2l0ZXIpIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmdmFyX2l0ZXIsIERCVVNfVFlQRV9CT09MRUFOLCAmYikgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcmdzX2l0ZXIsICZ2YXJfaXRlcikgfHwKLSAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8Ci0gICAgICBwYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLQotICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0sIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICB3aGlsZSAobSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgaWYgKCFkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZlcnJvciwgbSkpCi0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3VjY2VzcyIpOwotCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfVU5LTk9XTl9QUk9QRVJUWSk7Ci0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLSAgZGJ1c19jbGVhcl9wZW5kaW5nX2NhbGwgKCZwYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3NldCAoRml4dHVyZSAqZiwKLSAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIERCdXNNZXNzYWdlICptID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICBEQlVTX1BBVEhfREJVUywgREJVU19JTlRFUkZBQ0VfUFJPUEVSVElFUywgIlNldCIpOwotICBEQnVzUGVuZGluZ0NhbGwgKnBjID0gTlVMTDsKLSAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICBjb25zdCBjaGFyICppZmFjZSA9IERCVVNfSU5URVJGQUNFX0RCVVM7Ci0gIGNvbnN0IGNoYXIgKnByb3BlcnR5ID0gIkZlYXR1cmVzIjsKLSAgREJ1c01lc3NhZ2VJdGVyIGFyZ3NfaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIHZhcl9pdGVyOwotICBkYnVzX2Jvb2xfdCBiID0gRkFMU0U7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJnByb3BlcnR5LAotICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kIChtLCAmYXJnc19pdGVyKTsKLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmYXJnc19pdGVyLAotICAgICAgICBEQlVTX1RZUEVfVkFSSUFOVCwgImIiLCAmdmFyX2l0ZXIpIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmdmFyX2l0ZXIsIERCVVNfVFlQRV9CT09MRUFOLCAmYikgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcmdzX2l0ZXIsICZ2YXJfaXRlcikgfHwKLSAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5sZWZ0X2Nvbm4sIG0sICZwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8Ci0gICAgICBwYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZtKTsKLQotICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0sIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICB3aGlsZSAobSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgaWYgKCFkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZlcnJvciwgbSkpCi0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3VjY2VzcyIpOwotCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZXJyb3IubmFtZSwgPT0sIERCVVNfRVJST1JfUFJPUEVSVFlfUkVBRF9PTkxZKTsKLSAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2ZlYXR1cmVzIChEQnVzTWVzc2FnZUl0ZXIgKnZhcl9pdGVyKQotewotICBEQnVzTWVzc2FnZUl0ZXIgYXJyX2l0ZXI7Ci0gIGdib29sZWFuIGhhdmVfc3lzdGVtZF9hY3RpdmF0aW9uID0gRkFMU0U7Ci0KLSAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKHZhcl9pdGVyKSwgPT0sCi0gICAgICBEQlVTX1RZUEVfQVJSQVkpOwotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUgKHZhcl9pdGVyKSwgPT0sCi0gICAgICBEQlVTX1RZUEVfU1RSSU5HKTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAodmFyX2l0ZXIsICZhcnJfaXRlcik7Ci0KLSAgd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJmFycl9pdGVyKSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICpmZWF0dXJlOwotCi0gICAgICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJmFycl9pdGVyKSwgPT0sCi0gICAgICAgICAgREJVU19UWVBFX1NUUklORyk7Ci0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKCZhcnJfaXRlciwgJmZlYXR1cmUpOwotCi0gICAgICBnX3Rlc3RfbWVzc2FnZSAoIkZlYXR1cmU6ICVzIiwgZmVhdHVyZSk7Ci0KLSAgICAgIGlmIChnX3N0cmNtcDAgKGZlYXR1cmUsICJTeXN0ZW1kQWN0aXZhdGlvbiIpID09IDApCi0gICAgICAgIGhhdmVfc3lzdGVtZF9hY3RpdmF0aW9uID0gVFJVRTsKLQotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJmFycl9pdGVyKTsKLSAgICB9Ci0KLSAgLyogV2UgcGFzcyAtLXN5c3RlbWQtYWN0aXZhdGlvbiB0byB0aGUgZGFlbW9uIGZvciB0aGlzIHVuaXQgdGVzdCBvbiBVbml4Ci0gICAqIChpdCBjYW4gb25seSB3b3JrIGluIHByYWN0aWNlIG9uIExpbnV4LCBidXQgdGhlcmUncyBub3RoaW5nCi0gICAqIGluaGVyZW50bHkgTGludXgtc3BlY2lmaWMgYWJvdXQgdGhlIHByb3RvY29sKS4gKi8KLSNpZmRlZiBEQlVTX1VOSVgKLSAgZ19hc3NlcnRfdHJ1ZSAoaGF2ZV9zeXN0ZW1kX2FjdGl2YXRpb24pOwotI2Vsc2UKLSAgZ19hc3NlcnRfZmFsc2UgKGhhdmVfc3lzdGVtZF9hY3RpdmF0aW9uKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9mZWF0dXJlcyAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChEQlVTX1NFUlZJQ0VfREJVUywKLSAgICAgIERCVVNfUEFUSF9EQlVTLCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTLCAiR2V0Iik7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGMgPSBOVUxMOwotICBEQnVzTWVzc2FnZUl0ZXIgYXJnc19pdGVyOwotICBEQnVzTWVzc2FnZUl0ZXIgdmFyX2l0ZXI7Ci0gIGNvbnN0IGNoYXIgKmlmYWNlID0gREJVU19JTlRFUkZBQ0VfREJVUzsKLSAgY29uc3QgY2hhciAqZmVhdHVyZXMgPSAiRmVhdHVyZXMiOwotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBpZiAobSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtLAotICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaWZhY2UsCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZmZWF0dXJlcywKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCAobSwgJmFyZ3NfaXRlcikpCi0gICAgZ19lcnJvciAoIlJlcGx5IGhhcyBubyBhcmd1bWVudHMiKTsKLQotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJmFyZ3NfaXRlciksID09LAotICAgICAgREJVU19UWVBFX1ZBUklBTlQpOwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UgKCZhcmdzX2l0ZXIsICZ2YXJfaXRlcik7Ci0gIGNoZWNrX2ZlYXR1cmVzICgmdmFyX2l0ZXIpOwotCi0gIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmYXJnc19pdGVyKSkKLSAgICBnX2Vycm9yICgiUmVwbHkgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2ludGVyZmFjZXMgKERCdXNNZXNzYWdlSXRlciAqdmFyX2l0ZXIpCi17Ci0gIERCdXNNZXNzYWdlSXRlciBhcnJfaXRlcjsKLSAgZ2Jvb2xlYW4gaGF2ZV9tb25pdG9yaW5nID0gRkFMU0U7Ci0gIGdib29sZWFuIGhhdmVfc3RhdHMgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gaGF2ZV92ZXJib3NlID0gRkFMU0U7Ci0KLSAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKHZhcl9pdGVyKSwgPT0sCi0gICAgICBEQlVTX1RZUEVfQVJSQVkpOwotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUgKHZhcl9pdGVyKSwgPT0sCi0gICAgICBEQlVTX1RZUEVfU1RSSU5HKTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAodmFyX2l0ZXIsICZhcnJfaXRlcik7Ci0KLSAgd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJmFycl9pdGVyKSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICppZmFjZTsKLQotICAgICAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKCZhcnJfaXRlciksID09LAotICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcpOwotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljICgmYXJyX2l0ZXIsICZpZmFjZSk7Ci0gICAgICBnX3Rlc3RfbWVzc2FnZSAoIkludGVyZmFjZTogJXMiLCBpZmFjZSk7Ci0KLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoaWZhY2UsICE9LCBEQlVTX0lOVEVSRkFDRV9EQlVTKTsKLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoaWZhY2UsICE9LCBEQlVTX0lOVEVSRkFDRV9QUk9QRVJUSUVTKTsKLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoaWZhY2UsICE9LCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSk7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGlmYWNlLCAhPSwgREJVU19JTlRFUkZBQ0VfUEVFUik7Ci0KLSAgICAgIGlmIChnX3N0cmNtcDAgKGlmYWNlLCBEQlVTX0lOVEVSRkFDRV9NT05JVE9SSU5HKSA9PSAwKQotICAgICAgICBoYXZlX21vbml0b3JpbmcgPSBUUlVFOwotICAgICAgZWxzZSBpZiAoZ19zdHJjbXAwIChpZmFjZSwgQlVTX0lOVEVSRkFDRV9TVEFUUykgPT0gMCkKLSAgICAgICAgaGF2ZV9zdGF0cyA9IFRSVUU7Ci0gICAgICBlbHNlIGlmIChnX3N0cmNtcDAgKGlmYWNlLCBEQlVTX0lOVEVSRkFDRV9WRVJCT1NFKSA9PSAwKQotICAgICAgICBoYXZlX3ZlcmJvc2UgPSBUUlVFOwotCi0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmYXJyX2l0ZXIpOwotICAgIH0KLQotICBnX2Fzc2VydF90cnVlIChoYXZlX21vbml0b3JpbmcpOwotCi0jaWZkZWYgREJVU19FTkFCTEVfU1RBVFMKLSAgZ19hc3NlcnRfdHJ1ZSAoaGF2ZV9zdGF0cyk7Ci0jZWxzZQotICBnX2Fzc2VydF9mYWxzZSAoaGF2ZV9zdGF0cyk7Ci0jZW5kaWYKLQotI2lmZGVmIERCVVNfRU5BQkxFX1ZFUkJPU0VfTU9ERQotICBnX2Fzc2VydF90cnVlIChoYXZlX3ZlcmJvc2UpOwotI2Vsc2UKLSAgZ19hc3NlcnRfZmFsc2UgKGhhdmVfdmVyYm9zZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfaW50ZXJmYWNlcyAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLAotICAgICAgREJVU19QQVRIX0RCVVMsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXQiKTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYyA9IE5VTEw7Ci0gIERCdXNNZXNzYWdlSXRlciBhcmdzX2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciB2YXJfaXRlcjsKLSAgY29uc3QgY2hhciAqaWZhY2UgPSBEQlVTX0lOVEVSRkFDRV9EQlVTOwotICBjb25zdCBjaGFyICppZmFjZXMgPSAiSW50ZXJmYWNlcyI7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX1NUUklORywgJmlmYWNlcywKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCAobSwgJmFyZ3NfaXRlcikpCi0gICAgZ19lcnJvciAoIlJlcGx5IGhhcyBubyBhcmd1bWVudHMiKTsKLQotICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlICgmYXJnc19pdGVyKSAhPSBEQlVTX1RZUEVfVkFSSUFOVCkKLSAgICBnX2Vycm9yICgiUmVwbHkgZG9lcyBub3QgaGF2ZSBhIHZhcmlhbnQgYXJndW1lbnQiKTsKLQotICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlICgmYXJnc19pdGVyLCAmdmFyX2l0ZXIpOwotICBjaGVja19pbnRlcmZhY2VzICgmdmFyX2l0ZXIpOwotCi0gIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmYXJnc19pdGVyKSkKLSAgICBnX2Vycm9yICgiUmVwbHkgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZ2V0X2FsbCAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKERCVVNfU0VSVklDRV9EQlVTLAotICAgICAgREJVU19QQVRIX0RCVVMsIERCVVNfSU5URVJGQUNFX1BST1BFUlRJRVMsICJHZXRBbGwiKTsKLSAgREJ1c1BlbmRpbmdDYWxsICpwYyA9IE5VTEw7Ci0gIERCdXNNZXNzYWdlSXRlciBhcmdzX2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciBhcnJfaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIHBhaXJfaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIHZhcl9pdGVyOwotICBjb25zdCBjaGFyICppZmFjZSA9IERCVVNfSU5URVJGQUNFX0RCVVM7Ci0gIGdib29sZWFuIGhhdmVfZmVhdHVyZXMgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gaGF2ZV9pbnRlcmZhY2VzID0gRkFMU0U7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0gIGlmIChtID09IE5VTEwgfHwKLSAgICAgICFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZpZmFjZSwKLSAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bGVmdF9jb25uLCBtLCAmcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19USU1FT1VUX1VTRV9ERUZBVUxUKSB8fAotICAgICAgcGMgPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmbSk7Ci0KLSAgaWYgKGRidXNfcGVuZGluZ19jYWxsX2dldF9jb21wbGV0ZWQgKHBjKSkKLSAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXQgKG0sICZhcmdzX2l0ZXIpOwotICBnX2Fzc2VydF9jbXB1aW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKCZhcmdzX2l0ZXIpLCA9PSwKLSAgICAgIERCVVNfVFlQRV9BUlJBWSk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUgKCZhcmdzX2l0ZXIpLCA9PSwKLSAgICAgIERCVVNfVFlQRV9ESUNUX0VOVFJZKTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJmFyZ3NfaXRlciwgJmFycl9pdGVyKTsKLQotICB3aGlsZSAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlICgmYXJyX2l0ZXIpICE9IERCVVNfVFlQRV9JTlZBTElEKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0KLSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UgKCZhcnJfaXRlciwgJnBhaXJfaXRlcik7Ci0gICAgICBnX2Fzc2VydF9jbXB1aW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKCZwYWlyX2l0ZXIpLCA9PSwKLSAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HKTsKLSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyAoJnBhaXJfaXRlciwgJm5hbWUpOwotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJnBhaXJfaXRlcik7Ci0gICAgICBnX2Fzc2VydF9jbXB1aW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKCZwYWlyX2l0ZXIpLCA9PSwKLSAgICAgICAgICBEQlVTX1RZUEVfVkFSSUFOVCk7Ci0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlICgmcGFpcl9pdGVyLCAmdmFyX2l0ZXIpOwotCi0gICAgICBpZiAoZ19zdHJjbXAwIChuYW1lLCAiRmVhdHVyZXMiKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgY2hlY2tfZmVhdHVyZXMgKCZ2YXJfaXRlcik7Ci0gICAgICAgICAgaGF2ZV9mZWF0dXJlcyA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGdfc3RyY21wMCAobmFtZSwgIkludGVyZmFjZXMiKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgY2hlY2tfaW50ZXJmYWNlcyAoJnZhcl9pdGVyKTsKLSAgICAgICAgICBoYXZlX2ludGVyZmFjZXMgPSBUUlVFOwotICAgICAgICB9Ci0KLSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZhcnJfaXRlcik7Ci0gICAgfQotCi0gIGdfYXNzZXJ0X3RydWUgKGhhdmVfZmVhdHVyZXMpOwotICBnX2Fzc2VydF90cnVlIChoYXZlX2ludGVyZmFjZXMpOwotCi0gIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmYXJnc19pdGVyKSkKLSAgICBnX2Vycm9yICgiUmVwbHkgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIpOwotCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJm0pOwotICBkYnVzX2NsZWFyX3BlbmRpbmdfY2FsbCAoJnBjKTsKLX0KLQotI2RlZmluZSBERVNJUkVEX1JMSU1JVCA2NTUzNgotCi0jaWZkZWYgREJVU19VTklYCi1zdGF0aWMgdm9pZAotdGVzdF9mZF9saW1pdCAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSNpZmRlZiBIQVZFX1BSTElNSVQKLSAgc3RydWN0IHJsaW1pdCBsaW07Ci0gIHN0cnVjdCBybGltaXQgbmV3X2xpbWl0OwotICBjb25zdCBzdHJ1Y3QgcGFzc3dkICpwd2QgPSBOVUxMOwotI2VuZGlmCi0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCi0jaWZkZWYgSEFWRV9QUkxJTUlUCi0KLSAgaWYgKGdldHVpZCAoKSAhPSAwKQotICAgIHsKLSAgICAgIGdfdGVzdF9za2lwICgiQ2Fubm90IHRlc3QsIG9ubHkgdWlkIDAgaXMgZXhwZWN0ZWQgdG8gcmFpc2UgZmQgbGltaXQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgcHdkID0gZ2V0cHduYW0gKERCVVNfVVNFUik7Ci0KLSAgaWYgKHB3ZCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdjaGFyICptZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgidXNlciAnJXMnIGRvZXMgbm90IGV4aXN0IiwKLSAgICAgICAgICBEQlVTX1VTRVIpOwotCi0gICAgICBnX3Rlc3Rfc2tpcCAobWVzc2FnZSk7Ci0gICAgICBnX2ZyZWUgKG1lc3NhZ2UpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBpZiAocHJsaW1pdCAoZ2V0cGlkICgpLCBSTElNSVRfTk9GSUxFLCBOVUxMLCAmbGltKSA8IDApCi0gICAgZ19lcnJvciAoImdldCBwcmxpbWl0IChzZWxmKTogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotCi0gIGdfdGVzdF9tZXNzYWdlICgib3VyIFJMSU1JVF9OT0ZJTEU6IHJsaW1fY3VyOiAlbGQsIHJsaW1fbWF4OiAlbGQiLAotICAgICAgICAgICAgICAgICAgKGxvbmcpIGxpbS5ybGltX2N1ciwgKGxvbmcpIGxpbS5ybGltX21heCk7Ci0KLSAgaWYgKGxpbS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZIHx8IGxpbS5ybGltX2N1ciA+PSBERVNJUkVEX1JMSU1JVCkKLSAgICB7Ci0gICAgICAvKiBUaGUgZGJ1cy1kYWVtb24gd2lsbCBoYXZlIGluaGVyaXRlZCBvdXIgbGFyZ2UgcmxpbWl0ICovCi0gICAgICBnX3Rlc3Rfc2tpcCAoIkNhbm5vdCB0ZXN0LCBvdXIgb3duIGZkIGxpbWl0IHdhcyBhbHJlYWR5IGxhcmdlIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIG5ld19saW1pdCA9IGxpbTsKLSAgbmV3X2xpbWl0LnJsaW1fY3VyID0gREVTSVJFRF9STElNSVQ7Ci0gIG5ld19saW1pdC5ybGltX21heCA9IERFU0lSRURfUkxJTUlUOwotCi0gIC8qIFRyeSB0byBpbmNyZWFzZSB0aGUgcmxpbWl0IG91cnNlbHZlcy4gSWYgd2UncmUgcm9vdCBpbiBhbgotICAgKiB1bnByaXZpbGVnZWQgTGludXggY29udGFpbmVyLCB0aGVuIHdlIHdvbid0IGhhdmUgQ0FQX1NZU19SRVNPVVJDRQotICAgKiBhbmQgdGhpcyB3aWxsIGZhaWwgd2l0aCBFUEVSTS4gSWYgc28sIHRoZSBkYnVzLWRhZW1vbiB3b3VsZG4ndCBiZQotICAgKiBhYmxlIHRvIGluY3JlYXNlIGl0cyBybGltaXQgZWl0aGVyLiAqLwotICBpZiAocHJsaW1pdCAoZ2V0cGlkICgpLCBSTElNSVRfTk9GSUxFLCAmbmV3X2xpbWl0LCBOVUxMKSA8IDApCi0gICAgewotICAgICAgZ2NoYXIgKm1lc3NhZ2U7Ci0KLSAgICAgIG1lc3NhZ2UgPSBnX3N0cmR1cF9wcmludGYgKCJDYW5ub3QgdGVzdCwgd2UgY2Fubm90IGNoYW5nZSB0aGUgcmxpbWl0IHNvICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVzdW1hYmx5IG5laXRoZXIgY2FuIHRoZSBkYnVzLWRhZW1vbjogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIGdfdGVzdF9za2lwIChtZXNzYWdlKTsKLSAgICAgIGdfZnJlZSAobWVzc2FnZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIC8qIEltbWVkaWF0ZWx5IHB1dCBvdXIgb3JpZ2luYWwgbGltaXQgYmFjayBzbyBpdCB3b24ndCBpbnRlcmZlcmUgd2l0aAotICAgKiBzdWJzZXF1ZW50IHRlc3RzLiBUaGlzIHNob3VsZCBhbHdheXMgc3VjY2VlZC4gKi8KLSAgaWYgKHBybGltaXQgKGdldHBpZCAoKSwgUkxJTUlUX05PRklMRSwgJmxpbSwgTlVMTCkgPCAwKQotICAgIGdfZXJyb3IgKCJDYW5ub3QgcmVzdG9yZSBvdXIgb3JpZ2luYWwgbGltaXRzOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0KLSAgaWYgKHBybGltaXQgKGYtPmRhZW1vbl9waWQsIFJMSU1JVF9OT0ZJTEUsIE5VTEwsICZsaW0pIDwgMCkKLSAgICBnX2Vycm9yICgiZ2V0IHBybGltaXQgKGRidXMtZGFlbW9uKTogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotCi0gIGdfdGVzdF9tZXNzYWdlICgiZGJ1cy1kYWVtb24ncyBSTElNSVRfTk9GSUxFOiBybGltX2N1cjogJWxkLCBybGltX21heDogJWxkIiwKLSAgICAgICAgICAgICAgICAgIChsb25nKSBsaW0ucmxpbV9jdXIsIChsb25nKSBsaW0ucmxpbV9tYXgpOwotCi0gIGlmIChsaW0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkKLSAgICBnX2Fzc2VydF9jbXBpbnQgKGxpbS5ybGltX2N1ciwgPj0sIERFU0lSRURfUkxJTUlUKTsKLQotI2Vsc2UgLyogIUhBVkVfUFJMSU1JVCAqLwotCi0gIGdfdGVzdF9za2lwICgicHJsaW1pdCgpIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOwotCi0jZW5kaWYgLyogIUhBVkVfUFJMSU1JVCAqLwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCiB0ZWFyZG93biAoRml4dHVyZSAqZiwKICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQgR19HTlVDX1VOVVNFRCkKIHsKQEAgLTIxMzAsNyArNjUzLDExIEBACiAgIGdfY2xlYXJfZXJyb3IgKCZmLT5nZSk7CiAKICAgaWYgKGYtPmxlZnRfY29ubiAhPSBOVUxMKQotICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+bGVmdF9jb25uKTsKKyAgICB7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgKGYtPmxlZnRfY29ubik7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYgKGYtPmxlZnRfY29ubik7CisgICAgICBmLT5sZWZ0X2Nvbm4gPSBOVUxMOworICAgIH0KIAogICBpZiAoZi0+cmlnaHRfY29ubiAhPSBOVUxMKQogICAgIHsKQEAgLTIxNDAsMjEgKzY2NywxMSBAQAogICAgICAgICAgIGYtPnJpZ2h0X2Nvbm5fZWNobyA9IEZBTFNFOwogICAgICAgICB9CiAKLSAgICAgIGlmIChmLT5yaWdodF9jb25uX2hvbGQpCi0gICAgICAgIHsKLSAgICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+cmlnaHRfY29ubiwgaG9sZF9maWx0ZXIsIGYpOwotICAgICAgICAgIGYtPnJpZ2h0X2Nvbm5faG9sZCA9IEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgIGdfcXVldWVfZm9yZWFjaCAoJmYtPmhlbGRfbWVzc2FnZXMsIChHRnVuYykgZGJ1c19tZXNzYWdlX3VucmVmLCBOVUxMKTsKLSAgICAgIGdfcXVldWVfY2xlYXIgKCZmLT5oZWxkX21lc3NhZ2VzKTsKLQogICAgICAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlIChmLT5yaWdodF9jb25uKTsKKyAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZiAoZi0+cmlnaHRfY29ubik7CisgICAgICBmLT5yaWdodF9jb25uID0gTlVMTDsKICAgICB9CiAKLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZi0+bGVmdF9jb25uKTsKLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZi0+cmlnaHRfY29ubik7Ci0KICAgaWYgKGYtPmRhZW1vbl9waWQgIT0gMCkKICAgICB7CiAgICAgICB0ZXN0X2tpbGxfcGlkIChmLT5kYWVtb25fcGlkKTsKQEAgLTIxNjgsMTEgKzY4NSwxMCBAQAogCiAgICAgICAvKiB0aGUgc29ja2V0IG1heSBleGlzdCAqLwogICAgICAgcGF0aCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzL2J1cyIsIGYtPnRtcF9ydW50aW1lX2Rpcik7Ci0KLSAgICAgIHRlc3RfcmVtb3ZlX2lmX2V4aXN0cyAocGF0aCk7CisgICAgICBnX2Fzc2VydCAoZ19yZW1vdmUgKHBhdGgpID09IDAgfHwgZXJybm8gPT0gRU5PRU5UKTsKICAgICAgIGdfZnJlZSAocGF0aCk7CiAgICAgICAvKiB0aGVyZSBzaG91bGRuJ3QgYmUgYW55dGhpbmcgZWxzZSBpbiB0aGVyZSAqLwotICAgICAgdGVzdF9ybWRpcl9tdXN0X2V4aXN0IChmLT50bXBfcnVudGltZV9kaXIpOworICAgICAgZ19hc3NlcnRfY21waW50IChnX3JtZGlyIChmLT50bXBfcnVudGltZV9kaXIpLCA9PSwgMCk7CiAKICAgICAgIC8qIHdlJ3JlIHJlbHlpbmcgb24gYmVpbmcgc2luZ2xlLXRocmVhZGVkIGZvciB0aGlzIHRvIGJlIHNhZmUgKi8KICAgICAgIGlmIChmLT5zYXZlZF9ydW50aW1lX2RpciAhPSBOVUxMKQpAQCAtMjE4NCw2OSArNzAwLDIyIEBACiAgICAgfQogCiAgIHRlc3RfbWFpbl9jb250ZXh0X3VucmVmIChmLT5jdHgpOwotICBnX2ZyZWUgKGYtPmFkZHJlc3MpOwogfQogCiBzdGF0aWMgQ29uZmlnIGxpbWl0ZWRfY29uZmlnID0gewogICAgICIzNDM5MyIsIDEwMDAwLCAidmFsaWQtY29uZmlnLWZpbGVzL2luY29taW5nLWxpbWl0LmNvbmYiLAotICAgIFRFU1RfVVNFUl9NRSwgU1BFQ0lGWV9BRERSRVNTCisgICAgU1BFQ0lGWV9BRERSRVNTCiB9OwogCiBzdGF0aWMgQ29uZmlnIGZpbml0ZV90aW1lb3V0X2NvbmZpZyA9IHsKICAgICBOVUxMLCAxLCAidmFsaWQtY29uZmlnLWZpbGVzL2Zpbml0ZS10aW1lb3V0LmNvbmYiLAotICAgIFRFU1RfVVNFUl9NRSwgU1BFQ0lGWV9BRERSRVNTCisgICAgU1BFQ0lGWV9BRERSRVNTCiB9OwogCiAjaWZkZWYgREJVU19VTklYCiBzdGF0aWMgQ29uZmlnIGxpc3Rlbl91bml4X3J1bnRpbWVfY29uZmlnID0gewogICAgICI2MTMwMyIsIDEsICJ2YWxpZC1jb25maWctZmlsZXMvbGlzdGVuLXVuaXgtcnVudGltZS5jb25mIiwKLSAgICBURVNUX1VTRVJfTUUsIFJFTFlfT05fREVGQVVMVAotfTsKLSNlbmRpZgotCi1zdGF0aWMgQ29uZmlnIG1heF9jb21wbGV0ZWRfY29ubmVjdGlvbnNfY29uZmlnID0gewotICAgIE5VTEwsIDEsICJ2YWxpZC1jb25maWctZmlsZXMvbWF4LWNvbXBsZXRlZC1jb25uZWN0aW9ucy5jb25mIiwKLSAgICBURVNUX1VTRVJfTUUsIFNQRUNJRllfQUREUkVTUwotfTsKLQotc3RhdGljIENvbmZpZyBtYXhfY29ubmVjdGlvbnNfcGVyX3VzZXJfY29uZmlnID0gewotICAgIE5VTEwsIDEsICJ2YWxpZC1jb25maWctZmlsZXMvbWF4LWNvbm5lY3Rpb25zLXBlci11c2VyLmNvbmYiLAotICAgIFRFU1RfVVNFUl9NRSwgU1BFQ0lGWV9BRERSRVNTCi19OwotCi1zdGF0aWMgQ29uZmlnIG1heF9yZXBsaWVzX3Blcl9jb25uZWN0aW9uX2NvbmZpZyA9IHsKLSAgICBOVUxMLCAxLCAidmFsaWQtY29uZmlnLWZpbGVzL21heC1yZXBsaWVzLXBlci1jb25uZWN0aW9uLmNvbmYiLAotICAgIFRFU1RfVVNFUl9NRSwgU1BFQ0lGWV9BRERSRVNTCi19OwotCi1zdGF0aWMgQ29uZmlnIG1heF9tYXRjaF9ydWxlc19wZXJfY29ubmVjdGlvbl9jb25maWcgPSB7Ci0gICAgTlVMTCwgMSwgInZhbGlkLWNvbmZpZy1maWxlcy9tYXgtbWF0Y2gtcnVsZXMtcGVyLWNvbm5lY3Rpb24uY29uZiIsCi0gICAgVEVTVF9VU0VSX01FLCBTUEVDSUZZX0FERFJFU1MKLX07Ci0KLXN0YXRpYyBDb25maWcgbWF4X25hbWVzX3Blcl9jb25uZWN0aW9uX2NvbmZpZyA9IHsKLSAgICBOVUxMLCAxLCAidmFsaWQtY29uZmlnLWZpbGVzL21heC1uYW1lcy1wZXItY29ubmVjdGlvbi5jb25mIiwKLSAgICBURVNUX1VTRVJfTUUsIFNQRUNJRllfQUREUkVTUwotfTsKLQotI2lmIGRlZmluZWQoREJVU19VTklYKSAmJiBkZWZpbmVkKEhBVkVfVU5JWF9GRF9QQVNTSU5HKSAmJiBkZWZpbmVkKEhBVkVfR0lPX1VOSVgpCi1zdGF0aWMgQ29uZmlnIHBlbmRpbmdfZmRfdGltZW91dF9jb25maWcgPSB7Ci0gICAgTlVMTCwgMSwgInZhbGlkLWNvbmZpZy1maWxlcy9wZW5kaW5nLWZkLXRpbWVvdXQuY29uZiIsCi0gICAgVEVTVF9VU0VSX01FLCBTUEVDSUZZX0FERFJFU1MKLX07Ci0KLXN0YXRpYyBDb25maWcgY291bnRfZmRzX2NvbmZpZyA9IHsKLSAgICBOVUxMLCAxLCAidmFsaWQtY29uZmlnLWZpbGVzL2NvdW50LWZkcy5jb25mIiwKLSAgICBURVNUX1VTRVJfTUUsIFNQRUNJRllfQUREUkVTUwotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChEQlVTX1VOSVgpCi1zdGF0aWMgQ29uZmlnIGFzX2Fub3RoZXJfdXNlcl9jb25maWcgPSB7Ci0gICAgTlVMTCwgMSwgInZhbGlkLWNvbmZpZy1maWxlcy9hcy1hbm90aGVyLXVzZXIuY29uZiIsCi0gICAgLyogV2Ugc3RhcnQgdGhlIGRidXMtZGFlbW9uIGFzIHJvb3QgYW5kIGRyb3AgcHJpdmlsZWdlcywgbGlrZSB0aGUKLSAgICAgKiByZWFsIHN5c3RlbSBidXMgZG9lcyAqLwotICAgIFRFU1RfVVNFUl9ST09ULCBTUEVDSUZZX0FERFJFU1MKKyAgICBSRUxZX09OX0RFRkFVTFQKIH07CiAjZW5kaWYKIApAQCAtMjI2Nyw2OCArNzM2LDEyIEBACiAgIGdfdGVzdF9hZGQgKCIvcHJvY2Vzc2lkIiwgRml4dHVyZSwgTlVMTCwgc2V0dXAsIHRlc3RfcHJvY2Vzc2lkLCB0ZWFyZG93bik7CiAgIGdfdGVzdF9hZGQgKCIvY2Fub25pY2FsLXBhdGgvdWFlIiwgRml4dHVyZSwgTlVMTCwKICAgICAgIHNldHVwLCB0ZXN0X2Nhbm9uaWNhbF9wYXRoX3VhZSwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2xpbWl0cy9tYXgtY29tcGxldGVkLWNvbm5lY3Rpb25zIiwgRml4dHVyZSwKLSAgICAgICZtYXhfY29tcGxldGVkX2Nvbm5lY3Rpb25zX2NvbmZpZywKLSAgICAgIHNldHVwLCB0ZXN0X21heF9jb25uZWN0aW9ucywgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2xpbWl0cy9tYXgtY29ubmVjdGlvbnMtcGVyLXVzZXIiLCBGaXh0dXJlLAotICAgICAgJm1heF9jb25uZWN0aW9uc19wZXJfdXNlcl9jb25maWcsCi0gICAgICBzZXR1cCwgdGVzdF9tYXhfY29ubmVjdGlvbnMsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9saW1pdHMvbWF4LXJlcGxpZXMtcGVyLWNvbm5lY3Rpb24iLCBGaXh0dXJlLAotICAgICAgJm1heF9yZXBsaWVzX3Blcl9jb25uZWN0aW9uX2NvbmZpZywKLSAgICAgIHNldHVwLCB0ZXN0X21heF9yZXBsaWVzX3Blcl9jb25uZWN0aW9uLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvbGltaXRzL21heC1tYXRjaC1ydWxlcy1wZXItY29ubmVjdGlvbiIsIEZpeHR1cmUsCi0gICAgICAmbWF4X21hdGNoX3J1bGVzX3Blcl9jb25uZWN0aW9uX2NvbmZpZywKLSAgICAgIHNldHVwLCB0ZXN0X21heF9tYXRjaF9ydWxlc19wZXJfY29ubmVjdGlvbiwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2xpbWl0cy9tYXgtbmFtZXMtcGVyLWNvbm5lY3Rpb24iLCBGaXh0dXJlLAotICAgICAgJm1heF9uYW1lc19wZXJfY29ubmVjdGlvbl9jb25maWcsCi0gICAgICBzZXR1cCwgdGVzdF9tYXhfbmFtZXNfcGVyX2Nvbm5lY3Rpb24sIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wZWVyL3BpbmciLCBGaXh0dXJlLCBOVUxMLCBzZXR1cCwgdGVzdF9wZWVyX3BpbmcsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wZWVyL2dldC1tYWNoaW5lLWlkIiwgRml4dHVyZSwgTlVMTCwKLSAgICAgIHNldHVwLCB0ZXN0X3BlZXJfZ2V0X21hY2hpbmVfaWQsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL2dldC1pbnZhbGlkLWlmYWNlIiwgRml4dHVyZSwgTlVMTCwKLSAgICAgIHNldHVwLCB0ZXN0X2dldF9pbnZhbGlkX2lmYWNlLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvcHJvcGVydGllcy9nZXQtaW52YWxpZC1wYXRoIiwgRml4dHVyZSwgTlVMTCwKLSAgICAgIHNldHVwLCB0ZXN0X2dldF9pbnZhbGlkX3BhdGgsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL2dldC1pbnZhbGlkIiwgRml4dHVyZSwgTlVMTCwKLSAgICAgIHNldHVwLCB0ZXN0X2dldF9pbnZhbGlkLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvcHJvcGVydGllcy9nZXQtYWxsLWludmFsaWQtaWZhY2UiLCBGaXh0dXJlLCBOVUxMLCBzZXR1cCwKLSAgICAgIHRlc3RfZ2V0X2FsbF9pbnZhbGlkX2lmYWNlLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvcHJvcGVydGllcy9nZXQtYWxsLWludmFsaWQtcGF0aCIsIEZpeHR1cmUsIE5VTEwsIHNldHVwLAotICAgICAgdGVzdF9nZXRfYWxsX2ludmFsaWRfcGF0aCwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL3Byb3BlcnRpZXMvc2V0LWludmFsaWQtaWZhY2UiLCBGaXh0dXJlLCBOVUxMLAotICAgICAgc2V0dXAsIHRlc3Rfc2V0X2ludmFsaWRfaWZhY2UsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL3NldC1pbnZhbGlkLXBhdGgiLCBGaXh0dXJlLCBOVUxMLAotICAgICAgc2V0dXAsIHRlc3Rfc2V0X2ludmFsaWRfcGF0aCwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL3Byb3BlcnRpZXMvc2V0LWludmFsaWQiLCBGaXh0dXJlLCBOVUxMLAotICAgICAgc2V0dXAsIHRlc3Rfc2V0X2ludmFsaWQsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL3NldCIsIEZpeHR1cmUsIE5VTEwsCi0gICAgICBzZXR1cCwgdGVzdF9zZXQsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL2ZlYXR1cmVzIiwgRml4dHVyZSwgTlVMTCwKLSAgICAgIHNldHVwLCB0ZXN0X2ZlYXR1cmVzLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvcHJvcGVydGllcy9pbnRlcmZhY2VzIiwgRml4dHVyZSwgTlVMTCwgc2V0dXAsCi0gICAgICB0ZXN0X2ludGVyZmFjZXMsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9wcm9wZXJ0aWVzL2dldC1hbGwiLCBGaXh0dXJlLCBOVUxMLCBzZXR1cCwKLSAgICAgIHRlc3RfZ2V0X2FsbCwgdGVhcmRvd24pOwotCi0jaWYgZGVmaW5lZChEQlVTX1VOSVgpICYmIGRlZmluZWQoSEFWRV9VTklYX0ZEX1BBU1NJTkcpICYmIGRlZmluZWQoSEFWRV9HSU9fVU5JWCkKLSAgZ190ZXN0X2FkZCAoIi9saW1pdHMvcGVuZGluZy1mZC10aW1lb3V0IiwgRml4dHVyZSwKLSAgICAgICZwZW5kaW5nX2ZkX3RpbWVvdXRfY29uZmlnLAotICAgICAgc2V0dXAsIHRlc3RfcGVuZGluZ19mZF90aW1lb3V0LCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvcG9saWN5L2NvdW50LWZkcyIsIEZpeHR1cmUsICZjb3VudF9mZHNfY29uZmlnLAotICAgICAgc2V0dXAsIHRlc3RfY291bnRfZmRzLCB0ZWFyZG93bik7Ci0jZW5kaWYKLQogI2lmZGVmIERCVVNfVU5JWAogICAvKiBXZSBjYW4ndCB0ZXN0IHRoaXMgaW4gbG9vcGJhY2suYyB3aXRoIHRoZSByZXN0IG9mIHVuaXg6cnVudGltZT15ZXMsCiAgICAqIGJlY2F1c2UgZGJ1c19idXNfZ2V0W19wcml2YXRlXSBpcyB0aGUgb25seSB3YXkgdG8gdXNlIHRoZSBkZWZhdWx0LAogICAgKiBhbmQgdGhhdCBibG9ja3Mgb24gYSByb3VuZC10cmlwIHRvIHRoZSBkYnVzLWRhZW1vbiAqLwogICBnX3Rlc3RfYWRkICgiL3VuaXgtcnVudGltZS1pcy1kZWZhdWx0IiwgRml4dHVyZSwgJmxpc3Rlbl91bml4X3J1bnRpbWVfY29uZmlnLAogICAgICAgc2V0dXAsIHRlc3RfZWNobywgdGVhcmRvd24pOwotCi0gIGdfdGVzdF9hZGQgKCIvZmQtbGltaXQvc2Vzc2lvbiIsIEZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgIHNldHVwLCB0ZXN0X2ZkX2xpbWl0LCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvZmQtbGltaXQvc3lzdGVtIiwgRml4dHVyZSwgJmFzX2Fub3RoZXJfdXNlcl9jb25maWcsCi0gICAgICAgICAgICAgIHNldHVwLCB0ZXN0X2ZkX2xpbWl0LCB0ZWFyZG93bik7CiAjZW5kaWYKIAogICByZXR1cm4gZ190ZXN0X3J1biAoKTsKZGlmZiAtLWdpdCBhL3Rlc3QvZGJ1cy10ZXN0LXJ1bm5lciBiL3Rlc3QvZGJ1cy10ZXN0LXJ1bm5lcgpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS90ZXN0L2ZkcGFzcy5jIGIvdGVzdC9mZHBhc3MuYwppbmRleCA4YmFkNjc1Li42NjViNGExIDEwMDY0NAotLS0gYS90ZXN0L2ZkcGFzcy5jCisrKyBiL3Rlc3QvZmRwYXNzLmMKQEAgLTUwLDE0ICs1MCw2IEBACiAKICNpbmNsdWRlICJ0ZXN0LXV0aWxzLWdsaWIuaCIKIAotI2lmZGVmIERCVVNfRU5BQkxFX0VNQkVEREVEX1RFU1RTCi0jaW5jbHVkZSA8ZGJ1cy9kYnVzLW1lc3NhZ2UtaW50ZXJuYWwuaD4KLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfREJ1c0luaXRpYWxGRHMgREJ1c0luaXRpYWxGRHM7Ci0jZGVmaW5lIF9kYnVzX2NoZWNrX2ZkbGVha3NfZW50ZXIoKSBOVUxMCi0jZGVmaW5lIF9kYnVzX2NoZWNrX2ZkbGVha3NfbGVhdmUoZmRzKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCiAvKiBBcmJpdHJhcnk7IGluY2x1ZGVkIGhlcmUgdG8gYXZvaWQgcmVseWluZyBvbiB0aGUgZGVmYXVsdCAqLwogI2RlZmluZSBNQVhfTUVTU0FHRV9VTklYX0ZEUyAyMAogLyogVGhpcyB0ZXN0IHdvbid0IHdvcmsgb24gTGludXggdW5sZXNzIHRoaXMgaXMgdHJ1ZS4gKi8KQEAgLTg3LDcgKzc5LDYgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBUZXN0TWFpbkNvbnRleHQgKmN0eDsKICAgICBEQnVzRXJyb3IgZTsKLSAgICBnYm9vbGVhbiBza2lwOwogCiAgICAgREJ1c1NlcnZlciAqc2VydmVyOwogCkBAIC0xMDAsNyArOTEsNiBAQAogICAgIEdRdWV1ZSBtZXNzYWdlczsKIAogICAgIGludCBmZF9iZWZvcmU7Ci0gICAgREJ1c0luaXRpYWxGRHMgKmluaXRpYWxfZmRzOwogfSBGaXh0dXJlOwogCiBzdGF0aWMgdm9pZCBvb20gKGNvbnN0IGdjaGFyICpkb2luZykgR19HTlVDX05PUkVUVVJOOwpAQCAtMTgyLDExICsxNzIsNiBAQAogewogICBjaGFyICphZGRyZXNzOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQotICBmLT5pbml0aWFsX2ZkcyA9IF9kYnVzX2NoZWNrX2ZkbGVha3NfZW50ZXIgKCk7Ci0KICAgZ19hc3NlcnQgKGYtPmxlZnRfc2VydmVyX2Nvbm4gPT0gTlVMTCk7CiAgIGdfYXNzZXJ0IChmLT5yaWdodF9zZXJ2ZXJfY29ubiA9PSBOVUxMKTsKIApAQCAtMjY2LDE0ICsyNTEsNiBAQAogICBkYnVzX2Vycm9yX2luaXQgKCZmLT5lKTsKICAgZ19xdWV1ZV9pbml0ICgmZi0+bWVzc2FnZXMpOwogCi0gIGlmICgoZ19zdHJfaGFzX3ByZWZpeCAoYWRkcmVzcywgInRjcDoiKSB8fAotICAgICAgIGdfc3RyX2hhc19wcmVmaXggKGFkZHJlc3MsICJub25jZS10Y3A6IikpICYmCi0gICAgICAhdGVzdF9jaGVja190Y3Bfd29ya3MgKCkpCi0gICAgewotICAgICAgZi0+c2tpcCA9IFRSVUU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCiAgIGYtPnNlcnZlciA9IGRidXNfc2VydmVyX2xpc3RlbiAoYWRkcmVzcywgJmYtPmUpOwogICBhc3NlcnRfbm9fZXJyb3IgKCZmLT5lKTsKICAgZ19hc3NlcnQgKGYtPnNlcnZlciAhPSBOVUxMKTsKQEAgLTMxMiw5ICsyODksNiBAQAogdGVzdF91bnN1cHBvcnRlZCAoRml4dHVyZSAqZiwKICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCiB7Ci0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICB0ZXN0X2Nvbm5lY3QgKGYsIEZBTFNFKTsKIAogICBpZiAoZGJ1c19jb25uZWN0aW9uX2Nhbl9zZW5kX3R5cGUgKGYtPmxlZnRfY2xpZW50X2Nvbm4sCkBAIC0zNDcsOSArMzIxLDYgQEAKICAgc3RydWN0IHN0YXQgc3RhdF9iZWZvcmU7CiAgIHN0cnVjdCBzdGF0IHN0YXRfYWZ0ZXI7CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIHRlc3RfY29ubmVjdCAoZiwgVFJVRSk7CiAKICAgb3V0Z29pbmcgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9jb20vZXhhbXBsZS9IZWxsbyIsCkBAIC0zODgsOSArMzU5LDcgQEAKICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X3BhdGggKGluY29taW5nKSwgPT0sICIvY29tL2V4YW1wbGUvSGVsbG8iKTsKICAgZ19hc3NlcnRfY21wdWludCAoZGJ1c19tZXNzYWdlX2dldF9zZXJpYWwgKGluY29taW5nKSwgPT0sIHNlcmlhbCk7CiAKLSAgaWYgKGRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmYtPmUsIGluY29taW5nKSkKLSAgICBnX2Vycm9yICgiJXM6ICVzIiwgZi0+ZS5uYW1lLCBmLT5lLm1lc3NhZ2UpOwotICBlbHNlIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChpbmNvbWluZywKKyAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKGluY29taW5nLAogICAgICAgICAmZi0+ZSwKICAgICAgICAgREJVU19UWVBFX1VOSVhfRkQsICZmZF9hZnRlciwKICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQpAQCAtNDMyLDkgKzQwMSw2IEBACiAgIERCdXNNZXNzYWdlICpvdXRnb2luZywgKmluY29taW5nOwogICBpbnQgaTsKIAotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KICAgdGVzdF9jb25uZWN0IChmLCBUUlVFKTsKIAogICBvdXRnb2luZyA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2NvbS9leGFtcGxlL0hlbGxvIiwKQEAgLTQ5Myw5ICs0NTksNiBAQAogICBEQnVzTWVzc2FnZSAqb3V0Z29pbmc7CiAgIHVuc2lnbmVkIGludCBpOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICB0ZXN0X2Nvbm5lY3QgKGYsIFRSVUUpOwogCiAgIG91dGdvaW5nID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvY29tL2V4YW1wbGUvSGVsbG8iLApAQCAtNTQ4LDEyICs1MTEsNiBAQAogICBEQnVzU3RyaW5nIGJ1ZmZlcjsKICAgaW50IGZkc1tUT09fTUFOWV9GRFNdOwogICBpbnQgZG9uZTsKLSNpZmRlZiBIQVZFX0dFVFJMSU1JVAotICBzdHJ1Y3QgcmxpbWl0IGxpbTsKLSNlbmRpZgotCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKIAogICAvKiBUaGlzIHRlc3QgZGVsaWJlcmF0ZWx5IHB1c2hlcyB1cCBhZ2FpbnN0IE9TIGxpbWl0cywgc28gc2tpcCBpdAogICAgKiBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBmZHMuIDQgdGltZXMgdGhlIG1heGltdW0gcGVyIG1lc3NhZ2UKQEAgLTU2MSw2ICs1MTgsOCBAQAogICAgKiB3ZSBhY3R1YWxseSBzZW5kLCB0aGUgY29weSB0aGF0IHdlIHBvdGVudGlhbGx5IHJlY2VpdmUsIGFuZCBzb21lCiAgICAqIHNwYXJlIGNhcGFjaXR5IGZvciBldmVyeXRoaW5nIGVsc2UuICovCiAjaWZkZWYgSEFWRV9HRVRSTElNSVQKKyAgc3RydWN0IHJsaW1pdCBsaW07CisKICAgaWYgKGdldHJsaW1pdCAoUkxJTUlUX05PRklMRSwgJmxpbSkgPT0gMCkKICAgICB7CiAgICAgICBpZiAobGltLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkgJiYKQEAgLTY4Miw5ICs2NDEsNiBAQAogICBEQnVzTWVzc2FnZSAqb3V0Z29pbmdbU09NRV9NRVNTQUdFU107CiAgIGRidXNfdWludDMyX3Qgc2VyaWFsOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICB0ZXN0X2Nvbm5lY3QgKGYsIFRSVUUpOwogCiAgIGZvciAoaiA9IDA7IGogPCBTT01FX01FU1NBR0VTOyBqKyspCkBAIC03NTcsOSArNzEzLDYgQEAKICAgREJ1c01lc3NhZ2UgKm91dGdvaW5nOwogICBpbnQgaTsKIAotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KICAgdGVzdF9jb25uZWN0IChmLCBUUlVFKTsKICAgZGJ1c19jb25uZWN0aW9uX3NldF9tYXhfbWVzc2FnZV91bml4X2ZkcyAoZi0+bGVmdF9zZXJ2ZXJfY29ubiwgNyk7CiAgIGRidXNfY29ubmVjdGlvbl9zZXRfbWF4X21lc3NhZ2VfdW5peF9mZHMgKGYtPnJpZ2h0X3NlcnZlcl9jb25uLCA3KTsKQEAgLTg4Miw5ICs4MzUsNiBAQAogICBpZiAoZi0+ZmRfYmVmb3JlID49IDAgJiYgY2xvc2UgKGYtPmZkX2JlZm9yZSkgPCAwKQogICAgIGdfZXJyb3IgKCIlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CiAjZW5kaWYKLQotICBpZiAoZi0+aW5pdGlhbF9mZHMgIT0gTlVMTCkKLSAgICBfZGJ1c19jaGVja19mZGxlYWtzX2xlYXZlIChmLT5pbml0aWFsX2Zkcyk7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90cmFuc2llbnQtc2VydmljZXMuc2ggYi90ZXN0L2ludGVncmF0aW9uL3RyYW5zaWVudC1zZXJ2aWNlcy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5NDZkOS4uMDAwMDAwMAotLS0gYS90ZXN0L2ludGVncmF0aW9uL3RyYW5zaWVudC1zZXJ2aWNlcy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBDb3B5cmlnaHQgwqkgMjAxNyBDb2xsYWJvcmEgTHRkLgotIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotIyBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwotIyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAotIyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAotIyBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAotIyBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAotIyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLSMgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLSMgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KLSMgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FSRS4KLQotc2V0IC1lCi0KLWlmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCi0gICAgZWNobyAiMS4uMCAjIFNLSVAgLSAkWERHX1JVTlRJTUVfRElSIGlzIGVtcHR5IG9yIHVuc2V0IgotICAgIGV4aXQgMAotZmkKLQotIyB0ZXN0IC1PIGlzIG5vbi1QT1NJWCwgYnV0IGJhc2ggYW5kIGRhc2ggaGF2ZSBpdC4gSWYgaXQgZG9lc24ndCB3b3JrLAotIyB3ZSdyZSBwcm9iYWJseSBub3Qgb24gTGludXggYW5kIHNvIHdvdWxkIGxpa2VseSBiZSBza2lwcGluZyB0aGlzIHRlc3QKLSMgYW55d2F5LgotaWYgISB0ZXN0IC1PICIkWERHX1JVTlRJTUVfRElSIjsgdGhlbgotICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gJFhER19SVU5USU1FX0RJUiBpcyBub3Qgb3VycyBvciB0ZXN0IC1PIGRvZXMgbm90IHdvcmsiCi0gICAgZXhpdCAwCi1maQotCi1pZiAhIHRlc3QgLVMgIiRYREdfUlVOVElNRV9ESVIvYnVzIjsgdGhlbgotICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gJFhER19SVU5USU1FX0RJUi9idXMgaXMgbm90IGEgc29ja2V0IgotICAgIGV4aXQgMAotZmkKLQotaWYgISB0ZXN0IC1PICIkWERHX1JVTlRJTUVfRElSL2J1cyI7IHRoZW4KLSAgICBlY2hvICIxLi4wICMgU0tJUCAtICRYREdfUlVOVElNRV9ESVIvYnVzIGlzIG5vdCBvdXJzIgotICAgIGV4aXQgMAotZmkKLQotaWYgdGVzdCAtbiAiJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIgJiYgXAotICAgICAgICAhIHRlc3QgInVuaXg6cGF0aD0kWERHX1JVTlRJTUVfRElSL2J1cyIgPSAiJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyI7IHRoZW4KLSAgICBlY2hvICIxLi4wICMgU0tJUCAtIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyBkb2VzIG5vdCBwb2ludCB0byAkWERHX1JVTlRJTUVfRElSL2J1cyIKLSAgICBleGl0IDAKLWZpCi0KLSMgQW55IHVuaXF1ZSB0b2tlbiB0aGF0IHdvbid0IGNvbGxpZGUgd291bGQgZG8gaGVyZS4gSXQgbXVzdCBzdGFydCB3aXRoCi0jIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUuCi11bmlxdWU9InQkKGRidXMtdXVpZGdlbikiCi0KLWlmICEgd29ya2Rpcj0iJChta3RlbXAgLWQpIjsgdGhlbgotICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gbWt0ZW1wIC1kIGRvZXNuJ3Qgd29yayIKLSAgICBleGl0IDAKLWZpCi0KLWNsZWFudXAgKCkgewotICAgIHJtIC1mciAiJHdvcmtkaXIiCi0gICAgcm0gLWYgIiRYREdfUlVOVElNRV9ESVIvZGJ1cy0xL3NlcnZpY2VzL2NvbS5leGFtcGxlLkRCdXNUZXN0cy4kdW5pcXVlLnRtcCIKLSAgICBybSAtZiAiJFhER19SVU5USU1FX0RJUi9kYnVzLTEvc2VydmljZXMvY29tLmV4YW1wbGUuREJ1c1Rlc3RzLiR1bmlxdWUuc2VydmljZSIKLSAgICBybSAtZiAiJFhER19SVU5USU1FX0RJUi9kYnVzLTEvc2VydmljZXMvY29tLmV4YW1wbGUuREJ1c1Rlc3RzLlN5c3RlbWQuJHVuaXF1ZS50bXAiCi0gICAgcm0gLWYgIiRYREdfUlVOVElNRV9ESVIvZGJ1cy0xL3NlcnZpY2VzL2NvbS5leGFtcGxlLkRCdXNUZXN0cy5TeXN0ZW1kLiR1bmlxdWUuc2VydmljZSIKLSAgICBybSAtZiAiJFhER19SVU5USU1FX0RJUi9zeXN0ZW1kL3VzZXIvZGJ1cy1jb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlLnNlcnZpY2UiCi19Ci10cmFwIGNsZWFudXAgRVhJVAotCi1lY2hvICIxLi4yIgotCi0jIFRoaXMgaXMgYW4gaW50ZWdyYXRpb24gdGVzdCwgc28gd2UgZXhwZWN0IHRoZSBkYnVzLWRhZW1vbiB0byBhbHJlYWR5IGJlCi0jIHJ1bm5pbmcKLWlmICEgdGVzdCAtZCAiJFhER19SVU5USU1FX0RJUi9kYnVzLTEvc2VydmljZXMiOyB0aGVuCi0gICAgZWNobyAiQmFpbCBvdXQhICRYREdfUlVOVElNRV9ESVIvZGJ1cy0xL3NlcnZpY2VzIGlzIG5vdCBhIGRpcmVjdG9yeSIKLSAgICBleGl0IDEKLWZpCi0KLWNkICIkWERHX1JVTlRJTUVfRElSL2RidXMtMS9zZXJ2aWNlcyIKLQotc2VkIC1lICdzL14gKi8vJyA+ICJjb20uZXhhbXBsZS5EQnVzVGVzdHMuJHVuaXF1ZS50bXAiIDw8RU9GCi0gICAgW0QtQlVTIFNlcnZpY2VdCi0gICAgTmFtZT1jb20uZXhhbXBsZS5EQnVzVGVzdHMuJHVuaXF1ZQotICAgIEV4ZWM9L2Jpbi9zaCAtYyAndG91Y2ggIlwkMSI7IGV4aXQgMScgc2ggJyR3b3JrZGlyL3Jhbi0kdW5pcXVlJwotRU9GCi1tdiAiY29tLmV4YW1wbGUuREJ1c1Rlc3RzLiR1bmlxdWUudG1wIiAiY29tLmV4YW1wbGUuREJ1c1Rlc3RzLiR1bmlxdWUuc2VydmljZSIKLQotKAotZGJ1cy1zZW5kIC0tc2Vzc2lvbiAtLWRlc3Q9Im9yZy5mcmVlZGVza3RvcC5EQnVzIiBcCi0gICAgLS10eXBlPW1ldGhvZF9jYWxsIC0tcHJpbnQtcmVwbHkgL29yZy9mcmVlZGVza3RvcC9EQnVzIFwKLSAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5SZWxvYWRDb25maWcgfHwgdG91Y2ggIiR3b3JrZGlyL2ZhaWxlZCIgXAotKSAyPiYxIHwgc2VkIC1lICdzL14vIyAvJwotCi1pZiBbIC1lICIkd29ya2Rpci9mYWlsZWQiIF07IHRoZW4KLSAgICBlY2hvICJCYWlsIG91dCEgVW5hYmxlIHRvIHRlbGwgZGJ1cy1kYWVtb24gdG8gcmVsb2FkIgotICAgIGV4aXQgMQotZmkKLQotIyBCZWNhdXNlIHRoZSBzZXJ2aWNlIG5ldmVyIGFjdHVhbGx5IHRha2VzIGEgYnVzIG5hbWUsIHdlIGV4cGVjdCB0aGlzIHRvIGZhaWw7Ci0jIGJ1dCBpdHMgZXhpdCBzdGF0dXMgaXMgaWdub3JlZCBiZWNhdXNlIGl0J3MgaW4gYSBwaXBlbGluZS4KLWRidXMtc2VuZCAtLXNlc3Npb24gLS1kZXN0PSJjb20uZXhhbXBsZS5EQnVzVGVzdHMuJHVuaXF1ZSIgXAotICAgIC0tdHlwZT1tZXRob2RfY2FsbCAtLXByaW50LXJlcGx5IC8gY29tLmV4YW1wbGUuREJ1c1Rlc3RzLlRoaXNXaWxsRmFpbCBcCi0gICAgMj4mMSB8IHNlZCAtZSAncy9eLyMgLycKLQotaWYgWyAtZSAiJHdvcmtkaXIvcmFuLSR1bmlxdWUiIF07IHRoZW4KLSAgICBlY2hvICJvayAxIC0gYXR0ZW1wdGVkIHRvIHJ1biB0cmFuc2llbnQgc2VydmljZSBkaXJlY3RseSIKLWVsc2UKLSAgICBlY2hvICJub3Qgb2sgMSAtIG5vIHNpZ24gb2YgaGF2aW5nIHJ1biB0cmFuc2llbnQgc2VydmljZSIKLWZpCi0KLSMgU2VlIHdoZXRoZXIgc3lzdGVtZCBpcyBvbiB0aGUgc2Vzc2lvbiBidXMuCi0oCi1kYnVzLXNlbmQgLS1zZXNzaW9uIC0tZGVzdD0ib3JnLmZyZWVkZXNrdG9wLnN5c3RlbWQxIiBcCi0gICAgLS10eXBlPW1ldGhvZF9jYWxsIC0tcHJpbnQtcmVwbHkgL29yZy9mcmVlZGVza3RvcC9zeXN0ZW1kMS9NYW5hZ2VyIFwKLSAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyLlBpbmcgfHwgdG91Y2ggIiR3b3JrZGlyL25vLXN5c3RlbWQiIFwKLSkgMj4mMSB8IHNlZCAtZSAncy9eLyMgLycKLQotaWYgWyAtZCAiJFhER19SVU5USU1FX0RJUi9zeXN0ZW1kIiBdICYmICEgWyAtZSAiJHdvcmtkaXIvbm8tc3lzdGVtZCIgXTsgdGhlbgotCi0gICAgIyBzeXN0ZW1kIGlzIExpbnV4LXNwZWNpZmljLCBzbyB3ZSBjYW4gYXNzdW1lIEdOVSBta2Rpci4KLSAgICBta2RpciAtcCAtbTcwMCAiJFhER19SVU5USU1FX0RJUi9zeXN0ZW1kL3VzZXIiCi0gICAgY2QgIiRYREdfUlVOVElNRV9ESVIvc3lzdGVtZC91c2VyIgotCi0gICAgc2VkIC1lICdzL14gKi8vJyA+ICJkYnVzLWNvbS5leGFtcGxlLkRCdXNUZXN0cy5TeXN0ZW1kLiR1bmlxdWUudG1wIiA8PEVPRgotICAgICAgICBbVW5pdF0KLSAgICAgICAgRGVzY3JpcHRpb249Tm9uLWZ1bmN0aW9uYWwgc2VydmljZSBpbiB0aGUgZGJ1cyBpbnRlZ3JhdGlvbiB0ZXN0cwotICAgICAgICBbU2VydmljZV0KLSAgICAgICAgRXhlY1N0YXJ0PS9iaW4vc2ggLWMgJ3RvdWNoICJcJDEiOyBleGl0IDEnIHNoICckd29ya2Rpci9yYW4tJHVuaXF1ZS12aWEtc3lzdGVtZCcKLSAgICAgICAgVHlwZT1mb3JraW5nCi1FT0YKLSAgICBtdiAiZGJ1cy1jb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlLnRtcCIgXAotICAgICAgICAiZGJ1cy1jb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlLnNlcnZpY2UiCi0KLSAgICBpZiAhIHN5c3RlbWN0bCAtLXVzZXIgZGFlbW9uLXJlbG9hZDsgdGhlbgotICAgICAgICBlY2hvICJCYWlsIG91dCEgVW5hYmxlIHRvIHRlbGwgc3lzdGVtZCB0byByZWxvYWQiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBjZCAiJFhER19SVU5USU1FX0RJUi9kYnVzLTEvc2VydmljZXMiCi0KLSAgICBzZWQgLWUgJ3MvXiAqLy8nID4gImNvbS5leGFtcGxlLkRCdXNUZXN0cy5TeXN0ZW1kLiR1bmlxdWUudG1wIiA8PEVPRgotICAgICAgICBbRC1CVVMgU2VydmljZV0KLSAgICAgICAgTmFtZT1jb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlCi0gICAgICAgIFN5c3RlbWRTZXJ2aWNlPWRidXMtY29tLmV4YW1wbGUuREJ1c1Rlc3RzLlN5c3RlbWQuJHVuaXF1ZS5zZXJ2aWNlCi0gICAgICAgIEV4ZWM9L2Jpbi9zaCAtYyAndG91Y2ggIlwkMSI7IGV4aXQgMScgc2ggJyR3b3JrZGlyL3Jhbi0kdW5pcXVlLXdyb25nJwotRU9GCi0gICAgbXYgImNvbS5leGFtcGxlLkRCdXNUZXN0cy5TeXN0ZW1kLiR1bmlxdWUudG1wIiBcCi0gICAgICAgICJjb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlLnNlcnZpY2UiCi0KLSAgICAoCi0gICAgZGJ1cy1zZW5kIC0tc2Vzc2lvbiAtLWRlc3Q9Im9yZy5mcmVlZGVza3RvcC5EQnVzIiBcCi0gICAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAtLXByaW50LXJlcGx5IC9vcmcvZnJlZWRlc2t0b3AvREJ1cyBcCi0gICAgICAgIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZyB8fCB0b3VjaCAiJHdvcmtkaXIvZmFpbGVkIiBcCi0gICAgKSAyPiYxIHwgc2VkIC1lICdzL14vIyAvJwotCi0gICAgaWYgWyAtZSAiJHdvcmtkaXIvZmFpbGVkIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIkJhaWwgb3V0ISBVbmFibGUgdG8gdGVsbCBkYnVzLWRhZW1vbiB0byByZWxvYWQiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICAjIEJlY2F1c2UgdGhlIHNlcnZpY2UgbmV2ZXIgYWN0dWFsbHkgdGFrZXMgYSBidXMgbmFtZSwgd2UgZXhwZWN0IHRoaXMgdG8gZmFpbDsKLSAgICAjIGJ1dCBpdHMgZXhpdCBzdGF0dXMgaXMgaWdub3JlZCBiZWNhdXNlIGl0J3MgaW4gYSBwaXBlbGluZS4KLSAgICAjCi0gICAgIyBzeXN0ZW1kIG5ldmVyIHNlbmRzIGJhY2sgYW4gQWN0aXZhdGlvbkZhaWx1cmUgbWVzc2FnZSBmb3IgYSBzZXJ2aWNlCi0gICAgIyBpZiBpdCBzdGFydHMgdGhlIGpvYiBidXQgdGhlIHNlcnZpY2Ugc3Vic2VxdWVudGx5IGRvZXNuJ3QgYmVoYXZlIGFzCi0gICAgIyBpbnRlbmRlZCwgc28gdXNlIGEgcmVsYXRpdmVseSBzaG9ydCB0aW1lb3V0ICgzMDAwbXMpLgotICAgIGRidXMtc2VuZCAtLXNlc3Npb24gLS1kZXN0PSJjb20uZXhhbXBsZS5EQnVzVGVzdHMuU3lzdGVtZC4kdW5pcXVlIiBcCi0gICAgICAgIC0tcmVwbHktdGltZW91dD0zMDAwIC0tdHlwZT1tZXRob2RfY2FsbCAtLXByaW50LXJlcGx5IFwKLSAgICAgICAgLyBjb20uZXhhbXBsZS5EQnVzVGVzdHMuVGhpc1dpbGxGYWlsIFwKLSAgICAgICAgMj4mMSB8IHNlZCAtZSAncy9eLyMgLycKLQotICAgIGlmIFsgLWUgIiR3b3JrZGlyL3Jhbi0kdW5pcXVlLXZpYS1zeXN0ZW1kIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gIm9rIDIgLSBhdHRlbXB0ZWQgdG8gcnVuIHRyYW5zaWVudCBzZXJ2aWNlIHZpYSBzeXN0ZW1kIgotICAgIGVsaWYgWyAtZSAiJHdvcmtkaXIvcmFuLSR1bmlxdWUtd3JvbmciIF07IHRoZW4KLSAgICAgICAgZWNobyAibm90IG9rIDIgLSByYW4gdHJhbnNpZW50IHNlcnZpY2UgaW5jb3JyZWN0bHkiCi0gICAgZWxzZQotICAgICAgICBlY2hvICJub3Qgb2sgMiAtIG5vIHNpZ24gb2YgaGF2aW5nIHJ1biB0cmFuc2llbnQgc2VydmljZSIKLSAgICBmaQotZWxzZQotICAgIGVjaG8gIm9rIDIgIyBTS0lQIHNlc3Npb24gYnVzIGRvZXMgbm90IGFwcGVhciB0byBiZSBtYW5hZ2VkIGJ5IHN5c3RlbWQiCi1maQotCi1lY2hvICIjIERvbmUuIgotY2xlYW51cAotdHJhcCAnJyBFWElUCi1leGl0IDAKZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZXJuYWxzL3ByaW50Zi5jIGIvdGVzdC9pbnRlcm5hbHMvcHJpbnRmLmMKaW5kZXggZmI4ZjM1NS4uMjAwNmYzMiAxMDA2NDQKLS0tIGEvdGVzdC9pbnRlcm5hbHMvcHJpbnRmLmMKKysrIGIvdGVzdC9pbnRlcm5hbHMvcHJpbnRmLmMKQEAgLTM0LDEwICszNCw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotc3RhdGljIHZvaWQgZG9fdGVzdCAoaW50IG1pbmltdW0sCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAuLi4pIF9EQlVTX0dOVUNfUFJJTlRGICgyLCAzKTsKLQogc3RhdGljIHZvaWQKIGRvX3Rlc3QgKGludCBtaW5pbXVtLAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZXJuYWxzL3JlZnMuYyBiL3Rlc3QvaW50ZXJuYWxzL3JlZnMuYwppbmRleCA3MmZmODc0Li5hNDY1NjYyIDEwMDY0NAotLS0gYS90ZXN0L2ludGVybmFscy9yZWZzLmMKKysrIGIvdGVzdC9pbnRlcm5hbHMvcmVmcy5jCkBAIC04MCw2ICs4MCwxMSBAQAogICBWb2lkRnVuYyB1bmxvY2s7CiB9IFRocmVhZDsKIAorLyogcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzaGltIHdoZW4gYnVpbGRpbmcgd2l0aCBhIGdsaWIgPD0gMi4zMC54ICovCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDMxLDApCisjZGVmaW5lIGdfdGhyZWFkX25ldyhuYW1lLGZ1bmMsZGF0YSkgZ190aHJlYWRfY3JlYXRlKGZ1bmMsZGF0YSxUUlVFLE5VTEwpCisjZW5kaWYKKwogc3RhdGljIGdwb2ludGVyCiByZWZfdGhyZWFkIChncG9pbnRlciBkYXRhKQogewpAQCAtMjAxLDkgKzIwNiw2IEBACiAgIGlmICghZGJ1c190aHJlYWRzX2luaXRfZGVmYXVsdCAoKSkKICAgICBnX2Vycm9yICgiT09NIik7CiAKLSAgLyogVGhpcyBjYW4gYmUgZmFpcmx5IHNsb3csIHNvIG1ha2UgdGhlIHRlc3QgdGltZW91dCBwZXItdGVzdCAqLwotICB0ZXN0X3RpbWVvdXRfcmVzZXQgKDEpOwotCiAgIGYtPm5fdGhyZWFkcyA9IE5fVEhSRUFEUzsKICAgZi0+bl9yZWZzID0gTl9SRUZTOwogCkBAIC0yMjMsMTIgKzIyNSw3IEBACiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZi0+ZSk7CiAKLSNpZmRlZiBEQlVTX1VOSVgKLSAgZi0+c2VydmVyID0gZGJ1c19zZXJ2ZXJfbGlzdGVuICgidW5peDp0bXBkaXI9L3RtcCIsICZmLT5lKTsKLSNlbHNlCiAgIGYtPnNlcnZlciA9IGRidXNfc2VydmVyX2xpc3RlbiAoInRjcDpob3N0PTEyNy4wLjAuMSIsICZmLT5lKTsKLSNlbmRpZgotCiAgIGFzc2VydF9ub19lcnJvciAoJmYtPmUpOwogICBnX2Fzc2VydCAoZi0+c2VydmVyICE9IE5VTEwpOwogCmRpZmYgLS1naXQgYS90ZXN0L2ludGVybmFscy9zZXJ2ZXItb29tLmMgYi90ZXN0L2ludGVybmFscy9zZXJ2ZXItb29tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjM2FiMDUuLjAwMDAwMDAKLS0tIGEvdGVzdC9pbnRlcm5hbHMvc2VydmVyLW9vbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qIFRhcmdldGVkIHVuaXQgdGVzdHMgZm9yIE9PTSBwYXRocyBpbiBEQnVzU2VydmVyCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMTcgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKLSAqICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCi0gKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAotICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCi0gKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgotI2luY2x1ZGUgImRidXMvZGJ1cy1pbnRlcm5hbHMuaCIKLSNpbmNsdWRlICJkYnVzL2RidXMtcGlwZS5oIgotI2luY2x1ZGUgImRidXMvZGJ1cy1zZXJ2ZXItc29ja2V0LmgiCi0jaW5jbHVkZSAidGVzdC11dGlscy1nbGliLmgiCi0KLS8qIFJldHVybiBUUlVFIGlmIHRoZSByaWdodCB0aGluZyBoYXBwZW5zLCBidXQgdGhlIHJpZ2h0IHRoaW5nIG1pZ2h0IGluY2x1ZGUKLSAqIE9PTS4gKi8KLXN0YXRpYyBkYnVzX2Jvb2xfdAotdGVzdF9uZXdfc2VydmVyICh2b2lkICp1c2VyX2RhdGEpCi17Ci0gIGNvbnN0IGNoYXIgKmxpc3Rlbl9hZGRyZXNzID0gdXNlcl9kYXRhOwotICBEQnVzRXJyb3IgZXJyb3IgPSBEQlVTX0VSUk9SX0lOSVQ7Ci0gIERCdXNTZXJ2ZXIgKnNlcnZlciA9IE5VTEw7Ci0gIGRidXNfYm9vbF90IHJlc3VsdCA9IEZBTFNFOwotCi0gIHNlcnZlciA9IGRidXNfc2VydmVyX2xpc3RlbiAobGlzdGVuX2FkZHJlc3MsICZlcnJvcik7Ci0KLSAgaWYgKHNlcnZlciA9PSBOVUxMKQotICAgIGdvdG8gb3V0OwotCi0gIHJlc3VsdCA9IFRSVUU7Ci0KLW91dDoKLSAgaWYgKHJlc3VsdCkKLSAgICB7Ci0gICAgICB0ZXN0X2Fzc2VydF9ub19lcnJvciAoJmVycm9yKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGVycm9yLm5hbWUsID09LCBEQlVTX0VSUk9SX05PX01FTU9SWSk7Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgIH0KLQotICBpZiAoc2VydmVyICE9IE5VTEwpCi0gICAgZGJ1c19zZXJ2ZXJfZGlzY29ubmVjdCAoc2VydmVyKTsKLQotICBkYnVzX2NsZWFyX3NlcnZlciAoJnNlcnZlcik7Ci0gIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgREJ1c1Rlc3RNZW1vcnlGdW5jdGlvbiBmdW5jdGlvbjsKLSAgY29uc3Qgdm9pZCAqZGF0YTsKLX0gT09NVGVzdENhc2U7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X29vbV93cmFwcGVyIChnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gIGNvbnN0IE9PTVRlc3RDYXNlICp0ZXN0ID0gZGF0YTsKLQotICBpZiAoKGdfc3RyX2hhc19wcmVmaXggKHRlc3QtPmRhdGEsICJ0Y3A6IikgfHwKLSAgICAgICBnX3N0cl9oYXNfcHJlZml4ICh0ZXN0LT5kYXRhLCAibm9uY2UtdGNwOiIpKSAmJgotICAgICAgIXRlc3RfY2hlY2tfdGNwX3dvcmtzICgpKQotICAgIHJldHVybjsKLQotICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICh0ZXN0LT5uYW1lLCB0ZXN0LT5mdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGVzdC0+ZGF0YSkpCi0gICAgewotICAgICAgZ190ZXN0X21lc3NhZ2UgKCJPT00gdGVzdCBmYWlsZWQiKTsKLSAgICAgIGdfdGVzdF9mYWlsICgpOwotICAgIH0KLX0KLQotc3RhdGljIEdRdWV1ZSAqdGVzdF9jYXNlc190b19mcmVlID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLWFkZF9vb21fdGVzdCAoY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgIERCdXNUZXN0TWVtb3J5RnVuY3Rpb24gZnVuY3Rpb24sCi0gICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gIC8qIEJ5IHVzaW5nIEdMaWIgbWVtb3J5IGFsbG9jYXRpb24gaGVyZSwgd2UgYXZvaWQgYmVpbmcgYWZmZWN0ZWQgYnkKLSAgICogZGJ1c19zaHV0ZG93bigpIG9yIGNvbnRyaWJ1dGluZyB0bwotICAgKiBfZGJ1c19nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZygpICovCi0gIE9PTVRlc3RDYXNlICp0ZXN0X2Nhc2UgPSBnX25ldzAgKE9PTVRlc3RDYXNlLCAxKTsKLQotICB0ZXN0X2Nhc2UtPm5hbWUgPSBuYW1lOwotICB0ZXN0X2Nhc2UtPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0gIHRlc3RfY2FzZS0+ZGF0YSA9IGRhdGE7Ci0gIGdfdGVzdF9hZGRfZGF0YV9mdW5jIChuYW1lLCB0ZXN0X2Nhc2UsIHRlc3Rfb29tX3dyYXBwZXIpOwotICBnX3F1ZXVlX3B1c2hfdGFpbCAodGVzdF9jYXNlc190b19mcmVlLCB0ZXN0X2Nhc2UpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLAotICAgICAgY2hhciAqKmFyZ3YpCi17Ci0gIGludCByZXQ7Ci0KLSAgdGVzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIHRlc3RfY2FzZXNfdG9fZnJlZSA9IGdfcXVldWVfbmV3ICgpOwotICBhZGRfb29tX3Rlc3QgKCIvc2VydmVyL25ldy10Y3AiLCB0ZXN0X25ld19zZXJ2ZXIsICJ0Y3A6aG9zdD0xMjcuMC4wLjEsYmluZD0xMjcuMC4wLjEiKTsKLSAgYWRkX29vbV90ZXN0ICgiL3NlcnZlci9uZXctbm9uY2UtdGNwIiwgdGVzdF9uZXdfc2VydmVyLCAibm9uY2UtdGNwOmhvc3Q9MTI3LjAuMC4xLGJpbmQ9MTI3LjAuMC4xIik7Ci0gIGFkZF9vb21fdGVzdCAoIi9zZXJ2ZXIvbmV3LXRjcC1zdGFyIiwgdGVzdF9uZXdfc2VydmVyLCAidGNwOmhvc3Q9MTI3LjAuMC4xLGJpbmQ9KiIpOwotICBhZGRfb29tX3Rlc3QgKCIvc2VydmVyL25ldy10Y3AtdjQiLCB0ZXN0X25ld19zZXJ2ZXIsICJ0Y3A6aG9zdD0xMjcuMC4wLjEsYmluZD0xMjcuMC4wLjEsZmFtaWx5PWlwdjQiKTsKLSNpZmRlZiBEQlVTX1VOSVgKLSAgYWRkX29vbV90ZXN0ICgiL3NlcnZlci91bml4IiwgdGVzdF9uZXdfc2VydmVyLCAidW5peDp0bXBkaXI9L3RtcCIpOwotI2VuZGlmCi0KLSAgcmV0ID0gZ190ZXN0X3J1biAoKTsKLQotICBnX3F1ZXVlX2ZyZWVfZnVsbCAodGVzdF9jYXNlc190b19mcmVlLCBnX2ZyZWUpOwotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlcm5hbHMvc3lzbG9nLmMgYi90ZXN0L2ludGVybmFscy9zeXNsb2cuYwppbmRleCBlNjljMTRhLi44MDVjNTc4IDEwMDY0NAotLS0gYS90ZXN0L2ludGVybmFscy9zeXNsb2cuYworKysgYi90ZXN0L2ludGVybmFscy9zeXNsb2cuYwpAQCAtNDcsNDkgKzQ3LDQyIEBACiAKIC8qIGhvcGVmdWxseSBjbGVhciBlbm91Z2ggdGhhdCBwZW9wbGUgZG9uJ3QgdGhpbmsgdGhlc2UgbWVzc2FnZXMgaW4gc3lzbG9nCiAgKiBhcmUgYSBidWcgKi8KLSNkZWZpbmUgTUVTU0FHRSAicmVncmVzc2lvbiB0ZXN0IGZvciBfZGJ1c19sb2coKTogIgorI2RlZmluZSBNRVNTQUdFICJyZWdyZXNzaW9uIHRlc3QgZm9yIF9kYnVzX3N5c3RlbV9sb2coKTogIgogCiBzdGF0aWMgdm9pZAotdGVzdF9zeXNsb2dfbm9ybWFsIChGaXh0dXJlICpmLAordGVzdF9zeXNsb2cgKEZpeHR1cmUgKmYsCiAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQogewotICBpZiAoZ190ZXN0X3N1YnByb2Nlc3MgKCkpCisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgaWYgKGdfdGVzdF90cmFwX2ZvcmsgKDAsIDApKQogICAgIHsKLSAgICAgIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoInRlc3Qtc3lzbG9nIiwKLSAgICAgICAgICBEQlVTX0xPR19GTEFHU19TWVNURU1fTE9HIHwgREJVU19MT0dfRkxBR1NfU1RERVJSKTsKLSAgICAgIF9kYnVzX2xvZyAoREJVU19TWVNURU1fTE9HX0lORk8sIE1FU1NBR0UgIiVkIiwgNDIpOwotICAgICAgX2RidXNfbG9nIChEQlVTX1NZU1RFTV9MT0dfV0FSTklORywgTUVTU0FHRSAiJWQiLCA0NSk7Ci0gICAgICBfZGJ1c19sb2cgKERCVVNfU1lTVEVNX0xPR19TRUNVUklUWSwgTUVTU0FHRSAiJWQiLCA2NjYpOwotICAgICAgX2RidXNfbG9nIChEQlVTX1NZU1RFTV9MT0dfRVJST1IsIE1FU1NBR0UgIiVkIiwgMjMpOwotCi0gICAgICBfZGJ1c19pbml0X3N5c3RlbV9sb2cgKCJ0ZXN0LXN5c2xvZy1zdGRlcnIiLCBEQlVTX0xPR19GTEFHU19TVERFUlIpOwotICAgICAgX2RidXNfbG9nIChEQlVTX1NZU1RFTV9MT0dfSU5GTywKLSAgICAgICAgICBNRVNTQUdFICJ0aGlzIHNob3VsZCBub3QgYXBwZWFyIGluIHRoZSBzeXNsb2ciKTsKLSAgICAgIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoInRlc3Qtc3lzbG9nLWJvdGgiLAotICAgICAgICAgIERCVVNfTE9HX0ZMQUdTX1NZU1RFTV9MT0cgfCBEQlVTX0xPR19GTEFHU19TVERFUlIpOwotICAgICAgX2RidXNfbG9nIChEQlVTX1NZU1RFTV9MT0dfSU5GTywKLSAgICAgICAgICBNRVNTQUdFICJ0aGlzIHNob3VsZCBhcHBlYXIgaW4gdGhlIHN5c2xvZyBhbmQgb24gc3RkZXJyIik7Ci0gICAgICBfZGJ1c19pbml0X3N5c3RlbV9sb2cgKCJ0ZXN0LXN5c2xvZy1vbmx5IiwgREJVU19MT0dfRkxBR1NfU1lTVEVNX0xPRyk7Ci0gICAgICBfZGJ1c19sb2cgKERCVVNfU1lTVEVNX0xPR19JTkZPLAotICAgICAgICAgIE1FU1NBR0UgInRoaXMgc2hvdWxkIGFwcGVhciBpbiB0aGUgc3lzbG9nIG9ubHkiKTsKLQorICAgICAgX2RidXNfaW5pdF9zeXN0ZW1fbG9nIChGQUxTRSk7CisgICAgICBfZGJ1c19zeXN0ZW1fbG9nIChEQlVTX1NZU1RFTV9MT0dfRkFUQUwsIE1FU1NBR0UgIiVkIiwgMjMpOworICAgICAgLyogc2hvdWxkIG5vdCBiZSByZWFjaGVkOiBleGl0IDAgc28gdGhlIGFzc2VydGlvbiBpbiB0aGUgbWFpbiBwcm9jZXNzCisgICAgICAgKiB3aWxsIGZhaWwgKi8KICAgICAgIGV4aXQgKDApOwogICAgIH0KIAotICBnX3Rlc3RfdHJhcF9zdWJwcm9jZXNzIChOVUxMLCAwLCAwKTsKKyAgZ190ZXN0X3RyYXBfYXNzZXJ0X2ZhaWxlZCAoKTsKKyAgZ190ZXN0X3RyYXBfYXNzZXJ0X3N0ZGVyciAoIioiIE1FU1NBR0UgIjIzXG4qIik7CisKKyAgaWYgKGdfdGVzdF90cmFwX2ZvcmsgKDAsIDApKQorICAgIHsKKyAgICAgIF9kYnVzX2luaXRfc3lzdGVtX2xvZyAoRkFMU0UpOworICAgICAgX2RidXNfc3lzdGVtX2xvZyAoREJVU19TWVNURU1fTE9HX0lORk8sIE1FU1NBR0UgIiVkIiwgNDIpOworICAgICAgX2RidXNfc3lzdGVtX2xvZyAoREJVU19TWVNURU1fTE9HX1dBUk5JTkcsIE1FU1NBR0UgIiVkIiwgNDUpOworICAgICAgX2RidXNfc3lzdGVtX2xvZyAoREJVU19TWVNURU1fTE9HX1NFQ1VSSVRZLCBNRVNTQUdFICIlZCIsIDY2Nik7CisgICAgICBleGl0ICgwKTsKKyAgICB9CisKICAgZ190ZXN0X3RyYXBfYXNzZXJ0X3Bhc3NlZCAoKTsKLSAgZ190ZXN0X3RyYXBfYXNzZXJ0X3N0ZGVyciAoIioiIE1FU1NBR0UgIjQyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIiBNRVNTQUdFICI0NVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiIgTUVTU0FHRSAiNjY2XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIiBNRVNTQUdFICIyM1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKnRlc3Qtc3lzbG9nLXN0ZGVycioiIE1FU1NBR0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBzaG91bGQgbm90IGFwcGVhciBpbiB0aGUgc3lzbG9nXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqdGVzdC1zeXNsb2ctYm90aCoiIE1FU1NBR0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBzaG91bGQgYXBwZWFyIGluIHRoZSBzeXNsb2cgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gc3RkZXJyXG4iKTsKLSAgZ190ZXN0X3RyYXBfYXNzZXJ0X3N0ZGVycl91bm1hdGNoZWQgKCIqdGhpcyBzaG91bGQgYXBwZWFyIGluIHRoZSBzeXNsb2cgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkqIik7Ci0gIGdfdGVzdF90cmFwX2Fzc2VydF9zdGRlcnJfdW5tYXRjaGVkICgiKnRlc3Qtc3lzbG9nLW9ubHkqIik7CisgIGdfdGVzdF90cmFwX2Fzc2VydF9zdGRlcnIgKCIqIiBNRVNTQUdFICI0MlxuKiIgTUVTU0FHRSAiNDVcbioiIE1FU1NBR0UgIjY2NlxuKiIpOworI2VuZGlmCisgIC8qIG1hbnVhbCB0ZXN0ICh0aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBvbiBXaW5kb3dzKSAqLworICBfZGJ1c19pbml0X3N5c3RlbV9sb2cgKEZBTFNFKTsKKyAgX2RidXNfc3lzdGVtX2xvZyAoREJVU19TWVNURU1fTE9HX0lORk8sIE1FU1NBR0UgIiVkIiwgNDIpOworICBfZGJ1c19zeXN0ZW1fbG9nIChEQlVTX1NZU1RFTV9MT0dfV0FSTklORywgTUVTU0FHRSAiJWQiLCA0NSk7CisgIF9kYnVzX3N5c3RlbV9sb2cgKERCVVNfU1lTVEVNX0xPR19TRUNVUklUWSwgTUVTU0FHRSAiJWQiLCA2NjYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTA0LDggKzk3LDcgQEAKIHsKICAgdGVzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwogCi0gIGdfdGVzdF9hZGQgKCIvc3lzbG9nL25vcm1hbCIsIEZpeHR1cmUsIE5VTEwsIHNldHVwLCB0ZXN0X3N5c2xvZ19ub3JtYWwsCi0gICAgICAgICAgICAgIHRlYXJkb3duKTsKKyAgZ190ZXN0X2FkZCAoIi9zeXNsb2ciLCBGaXh0dXJlLCBOVUxMLCBzZXR1cCwgdGVzdF9zeXNsb2csIHRlYXJkb3duKTsKIAogICByZXR1cm4gZ190ZXN0X3J1biAoKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZXJuYWxzL3ZhcmlhbnQuYyBiL3Rlc3QvaW50ZXJuYWxzL3ZhcmlhbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiNjMzYi4uMDAwMDAwMAotLS0gYS90ZXN0L2ludGVybmFscy92YXJpYW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzIgKzAsMCBAQAotLyogUmVncmVzc2lvbiB0ZXN0IGZvciBEQnVzVmFyaWFudAotICoKLSAqIENvcHlyaWdodCDCqSAyMDE3IENvbGxhYm9yYSBMdGQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCi0gKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAotICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKLSAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCi0gKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAotICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgotI2luY2x1ZGUgPGRidXMvZGJ1cy1pbnRlcm5hbHMuaD4KLSNpbmNsdWRlIDxkYnVzL2RidXMtc3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZGJ1cy9kYnVzLW1lc3NhZ2UtaW50ZXJuYWwuaD4KLSNpbmNsdWRlICJ0ZXN0LXV0aWxzLWdsaWIuaCIKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgREJ1c01lc3NhZ2UgKm9yaWdpbmFsOwotICBEQnVzTWVzc2FnZSAqY29weTsKLX0gRml4dHVyZTsKLQotLyogUmV0dXJuIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gT09NLCBhYm9ydCBvbiBmYWlsdXJlLiAqLwotc3RhdGljIGdib29sZWFuCi1zZXR1cCAoRml4dHVyZSAqZikKLXsKLSAgZGJ1c19pbnQzMl90IGZvcnR5dHdvID0gNDI7Ci0gIGRidXNfaW50NjRfdCB0d2VudHl0aHJlZSA9IDIzOwotICBjb25zdCBjaGFyICpzID0gIkhlbGxvLCB3b3JsZCEiOwotICBEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIGFycl9pdGVyOwotICBEQnVzTWVzc2FnZUl0ZXIgc3RydWN0X2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciBwYWlyX2l0ZXI7Ci0KLSAgZi0+b3JpZ2luYWwgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi8iLCAiYS5iIiwgImMiKTsKLQotICBpZiAoZi0+b3JpZ2luYWwgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogSXQgZW5kcyB1cCBhczoKLSAgICogKAotICAgKiAgaW50MzIgNDIsCi0gICAqICAiSGVsbG8sIHdvcmxkISIsCi0gICAqICBpbnQ2NCAyMywKLSAgICogIFtpbnQzMiA0MiwgaW50MzIgNDJdLAotICAgKiAgKGludDMyIDQyLCAiSGVsbG8sIHdvcmxkISIsIGludDY0IDIzKSwKLSAgICogIHtpbnQzMiA0MjogaW50NjQgMjN9LAotICAgKiApCi0gICAqLwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChmLT5vcmlnaW5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmZvcnR5dHdvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UNjQsICZ0d2VudHl0aHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKGYtPm9yaWdpbmFsLCAmaXRlcik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJml0ZXIsIERCVVNfVFlQRV9BUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyX0FTX1NUUklORywgJmFycl9pdGVyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgewotICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmYXJyX2l0ZXIsIERCVVNfVFlQRV9JTlQzMiwgJmZvcnR5dHdvKSB8fAotICAgICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmYXJyX2l0ZXIsIERCVVNfVFlQRV9JTlQzMiwgJmZvcnR5dHdvKSkKLSAgICAgIHsKLSAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKCZpdGVyLCAmYXJyX2l0ZXIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gIH0KLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lciAoJml0ZXIsICZhcnJfaXRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKCZpdGVyLCBEQlVTX1RZUEVfU1RSVUNULCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X2l0ZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICB7Ci0gICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX0lOVDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ydHl0d28pIHx8Ci0gICAgICAgICFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX1NUUklORywgJnMpIHx8Ci0gICAgICAgICFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZzdHJ1Y3RfaXRlciwgREJVU19UWVBFX0lOVDY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHdlbnR5dGhyZWUpKQotICAgICAgewotICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lciAoJml0ZXIsICZzdHJ1Y3RfaXRlcik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgfQotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwgJnN0cnVjdF9pdGVyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJml0ZXIsIERCVVNfVFlQRV9BUlJBWSwgIntpeH0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyX2l0ZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICB7Ci0gICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFycl9pdGVyLCBEQlVTX1RZUEVfRElDVF9FTlRSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmcGFpcl9pdGVyKSkKLSAgICAgIHsKLSAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKCZpdGVyLCAmYXJyX2l0ZXIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICB7Ci0gICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJnBhaXJfaXRlciwgREJVU19UWVBFX0lOVDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3J0eXR3bykgfHwKLSAgICAgICAgICAhZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljICgmcGFpcl9pdGVyLCBEQlVTX1RZUEVfSU5UNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR3ZW50eXRocmVlKSkKLSAgICAgICAgewotICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyICgmYXJyX2l0ZXIsICZwYWlyX2l0ZXIpOwotICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyICgmaXRlciwgJmFycl9pdGVyKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lciAoJmFycl9pdGVyLCAmcGFpcl9pdGVyKSkKLSAgICAgIHsKLSAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXIgKCZpdGVyLCAmYXJyX2l0ZXIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gIH0KLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lciAoJml0ZXIsICZhcnJfaXRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBBc3NlcnQgdGhhdCBpdGVtX2l0ZXIgcG9pbnRzIHRvIGFuIGludDMyIGVxdWFsIHRvIGV4cGVjdGVkX3ZhbHVlLgotICogQ29weSBpdCBpbnRvIGEgREJ1c1ZhcmlhbnQgYW5kIGFzc2VydCB0aGF0IHRoZSBjb3B5IGlzIGRvbmUgY29ycmVjdGx5LgotICogUmV0dXJuIFRSVUUgb24gc3VjY2VzcywgRkFMU0UgaWYgbGliZGJ1cyBwcmV0ZW5kcyB0byBydW4gb3V0IG9mIG1lbW9yeSwKLSAqIG9yIGFib3J0IG9uIGZhaWx1cmUuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWFzc2VydF9pbnQzMiAoREJ1c01lc3NhZ2VJdGVyICppdGVtX2l0ZXIsCi0gICAgICAgICAgICAgIGRidXNfaW50MzJfdCBleHBlY3RlZF92YWx1ZSkKLXsKLSAgREJ1c1ZhcmlhbnQgKnY7Ci0gIGNvbnN0IERCdXNTdHJpbmcgKnM7Ci0gIGNvbnN0IHZvaWQgKnZhbHVlX3A7Ci0gIGRidXNfaW50MzJfdCB2YWx1ZTsKLQotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoaXRlbV9pdGVyKSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyKTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljIChpdGVtX2l0ZXIsICZ2YWx1ZSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgdiA9IF9kYnVzX3ZhcmlhbnRfcmVhZCAoaXRlbV9pdGVyKTsKLQotICBpZiAodiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzID0gX2RidXNfdmFyaWFudF9wZWVrICh2KTsKLSAgZ19hc3NlcnQgKHMgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoX2RidXNfdmFyaWFudF9nZXRfc2lnbmF0dXJlICh2KSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyX0FTX1NUUklORyk7Ci0KLSAgLyogVmFyaWFudCBzZXJpYWxpemF0aW9uIG9mIDxpbnQzMiBzb21ldGhpbmc+IGF0IG9mZnNldCAwOgotICAgKiAwMSAnaScgMDAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUKLSAgICogICAgICAgICAgIDAwICAgICAgICAgICAgICAgcGFkZGluZwotICAgKiAgICAgICAgICAgICAgIHZ2IHZ2IHZ2IHZ2ICBieXRlcyBvZiB2YWx1ZQotICAgKi8KLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c192YXJpYW50X2dldF9sZW5ndGggKHYpLCA9PSwgOCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKHMpLCA9PSwgOCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAwKSwgPT0sIDEpOwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAocywgMSksID09LCBEQlVTX1RZUEVfSU5UMzIpOwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAocywgMiksID09LCAnXDAnKTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKHMsIDMpLCA9PSwgMCk7IC8qIHBhZGRpbmcgKi8KLSAgdmFsdWVfcCA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHMsIDQsIDQpOwotICBtZW1jcHkgKCZ2YWx1ZSwgdmFsdWVfcCwgNCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgX2RidXNfdmFyaWFudF9mcmVlICh2KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIEFzc2VydCB0aGF0IGl0ZW1faXRlciBwb2ludHMgdG8gYW4gaW50NjQgZXF1YWwgdG8gZXhwZWN0ZWRfdmFsdWUuCi0gKiBDb3B5IGl0IGludG8gYSBEQnVzVmFyaWFudCBhbmQgYXNzZXJ0IHRoYXQgdGhlIGNvcHkgaXMgZG9uZSBjb3JyZWN0bHkuCi0gKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBpZiBsaWJkYnVzIHByZXRlbmRzIHRvIHJ1biBvdXQgb2YgbWVtb3J5LAotICogb3IgYWJvcnQgb24gZmFpbHVyZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotYXNzZXJ0X2ludDY0IChEQnVzTWVzc2FnZUl0ZXIgKml0ZW1faXRlciwKLSAgICAgICAgICAgICAgZGJ1c19pbnQ2NF90IGV4cGVjdGVkX3ZhbHVlKQotewotICBEQnVzVmFyaWFudCAqdjsKLSAgY29uc3QgREJ1c1N0cmluZyAqczsKLSAgY29uc3Qgdm9pZCAqdmFsdWVfcDsKLSAgZGJ1c19pbnQ2NF90IHZhbHVlOwotICBpbnQgaTsKLQotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoaXRlbV9pdGVyKSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDY0KTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljIChpdGVtX2l0ZXIsICZ2YWx1ZSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgdiA9IF9kYnVzX3ZhcmlhbnRfcmVhZCAoaXRlbV9pdGVyKTsKLQotICBpZiAodiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzID0gX2RidXNfdmFyaWFudF9wZWVrICh2KTsKLSAgZ19hc3NlcnQgKHMgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoX2RidXNfdmFyaWFudF9nZXRfc2lnbmF0dXJlICh2KSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDY0X0FTX1NUUklORyk7Ci0KLSAgLyogVmFyaWFudCBzZXJpYWxpemF0aW9uIG9mIDxpbnQ2NCBzb21ldGhpbmc+IGF0IG9mZnNldCAwOgotICAgKiAwMSAnaScgMDAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUKLSAgICogICAgICAgICAgMDAgIDAwIDAwIDAwIDAwICBwYWRkaW5nCi0gICAqIHZ2IHZ2IHZ2IHZ2ICB2diB2diB2diB2diAgYnl0ZXMgb2YgdmFsdWUKLSAgICovCi0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfdmFyaWFudF9nZXRfbGVuZ3RoICh2KSwgPT0sIDE2KTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAocyksID09LCAxNik7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAwKSwgPT0sIDEpOwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAocywgMSksID09LCBEQlVTX1RZUEVfSU5UNjQpOwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAocywgMiksID09LCAnXDAnKTsKLQotICBmb3IgKGkgPSAzOyBpIDwgODsgaSsrKQotICAgIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCBpKSwgPT0sIDApOyAvKiBwYWRkaW5nICovCi0KLSAgdmFsdWVfcCA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHMsIDgsIDgpOwotICBtZW1jcHkgKCZ2YWx1ZSwgdmFsdWVfcCwgOCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgX2RidXNfdmFyaWFudF9mcmVlICh2KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIEFzc2VydCB0aGF0IGl0ZW1faXRlciBwb2ludHMgdG8gYSBzdHJpbmcgZXF1YWwgdG8gZXhwZWN0ZWRfdmFsdWUuCi0gKiBDb3B5IGl0IGludG8gYSBEQnVzVmFyaWFudCBhbmQgYXNzZXJ0IHRoYXQgdGhlIGNvcHkgaXMgZG9uZSBjb3JyZWN0bHkuCi0gKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBpZiBsaWJkYnVzIHByZXRlbmRzIHRvIHJ1biBvdXQgb2YgbWVtb3J5LAotICogb3IgYWJvcnQgb24gZmFpbHVyZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotYXNzZXJ0X3N0cmluZyAoREJ1c01lc3NhZ2VJdGVyICppdGVtX2l0ZXIsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBlY3RlZF92YWx1ZSkKLXsKLSAgREJ1c1ZhcmlhbnQgKnY7Ci0gIGNvbnN0IERCdXNTdHJpbmcgKnM7Ci0gIGNvbnN0IGNoYXIgKnZhbHVlOwotICBkYnVzX2ludDMyX3QgbGVuZ3RoOwotCi0gIGdfYXNzZXJ0X2NtcGludCAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlIChpdGVtX2l0ZXIpLCA9PSwKLSAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HKTsKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljIChpdGVtX2l0ZXIsICZ2YWx1ZSk7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgdiA9IF9kYnVzX3ZhcmlhbnRfcmVhZCAoaXRlbV9pdGVyKTsKLQotICBpZiAodiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzID0gX2RidXNfdmFyaWFudF9wZWVrICh2KTsKLSAgZ19hc3NlcnQgKHMgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoX2RidXNfdmFyaWFudF9nZXRfc2lnbmF0dXJlICh2KSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcpOwotCi0gIC8qIFZhcmlhbnQgc2VyaWFsaXphdGlvbiBvZiA8InNvbWV0aGluZyI+IGF0IG9mZnNldCAwOgotICAgKiAwMSAncycgMDAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUKLSAgICogICAgICAgICAgMDAgICAgICAgICAgICAgICAgcGFkZGluZwotICAgKiAgICAgICAgICAgICAgbGwgbGwgbGwgbGwgICBieXRlcyBvZiBsZW5ndGggZXhjbHVkaW5nIFwwCi0gICAqIHZ2IHZ2IHZ2IC4uLiAwMCAgICAgICAgICAgIGJ5dGVzIG9mIHZhbHVlCi0gICAqLwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3ZhcmlhbnRfZ2V0X2xlbmd0aCAodiksID09LAotICAgICAgICAgICAgICAgICAgIChpbnQpIHN0cmxlbiAoZXhwZWN0ZWRfdmFsdWUpICsgOSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKHMpLCA9PSwKLSAgICAgICAgICAgICAgICAgICBfZGJ1c192YXJpYW50X2dldF9sZW5ndGggKHYpKTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKHMsIDApLCA9PSwgMSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAxKSwgPT0sIERCVVNfVFlQRV9TVFJJTkcpOwotICBnX2Fzc2VydF9jbXBpbnQgKF9kYnVzX3N0cmluZ19nZXRfYnl0ZSAocywgMiksID09LCAnXDAnKTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKHMsIDMpLCA9PSwgMCk7IC8qIHBhZGRpbmcgKi8KLQotICB2YWx1ZSA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHMsIDQsIDQpOwotICBtZW1jcHkgKCZsZW5ndGgsIHZhbHVlLCA0KTsKLSAgZ19hc3NlcnRfY21wdWludCAobGVuZ3RoLCA9PSwgKGludCkgc3RybGVuIChleHBlY3RlZF92YWx1ZSkpOwotICB2YWx1ZSA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHMsIDgsIGxlbmd0aCArIDEpOwotICBnX2Fzc2VydF9jbXBzdHIgKHZhbHVlLCA9PSwgZXhwZWN0ZWRfdmFsdWUpOwotCi0gIF9kYnVzX3ZhcmlhbnRfZnJlZSAodik7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBBc3NlcnQgdGhhdCBpdGVtX2l0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIG5fdmFsdWVzIHJlcGV0aXRpb25zIG9mIHRoZQotICogaW50MzIgZXhwZWN0ZWRfdmFsdWUuIENvcHkgaXQgaW50byBhIERCdXNWYXJpYW50IGFuZCBhc3NlcnQgdGhhdCB0aGUKLSAqIGNvcHkgaXMgZG9uZSBjb3JyZWN0bHkuCi0gKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBpZiBsaWJkYnVzIHByZXRlbmRzIHRvIHJ1biBvdXQgb2YgbWVtb3J5LAotICogb3IgYWJvcnQgb24gZmFpbHVyZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotYXNzZXJ0X2FycmF5X29mX2ludDMyIChEQnVzTWVzc2FnZUl0ZXIgKml0ZW1faXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG5fdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2ludDMyX3QgZXhwZWN0ZWRfdmFsdWUpCi17Ci0gIERCdXNNZXNzYWdlSXRlciBhcnJfaXRlcjsKLSAgREJ1c1ZhcmlhbnQgKnY7Ci0gIGNvbnN0IERCdXNTdHJpbmcgKnM7Ci0gIGNvbnN0IHZvaWQgKnZhbHVlX3A7Ci0gIGRidXNfaW50MzJfdCB2YWx1ZTsKLSAgaW50IGk7Ci0KLSAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKGl0ZW1faXRlciksID09LAotICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9BUlJBWSk7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoaXRlbV9pdGVyLCAmYXJyX2l0ZXIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKQotICAgIHsKLSAgICAgIGFzc2VydF9pbnQzMiAoJmFycl9pdGVyLCBleHBlY3RlZF92YWx1ZSk7Ci0KLSAgICAgIGlmIChpID09IG5fdmFsdWVzIC0gMSkKLSAgICAgICAgZ19hc3NlcnRfZmFsc2UgKGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZhcnJfaXRlcikpOwotICAgICAgZWxzZQotICAgICAgICBnX2Fzc2VydF90cnVlIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmYXJyX2l0ZXIpKTsKLSAgICB9Ci0KLSAgdiA9IF9kYnVzX3ZhcmlhbnRfcmVhZCAoaXRlbV9pdGVyKTsKLQotICBpZiAodiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzID0gX2RidXNfdmFyaWFudF9wZWVrICh2KTsKLSAgZ19hc3NlcnQgKHMgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoX2RidXNfdmFyaWFudF9nZXRfc2lnbmF0dXJlICh2KSwgPT0sCi0gICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0FSUkFZX0FTX1NUUklORyBEQlVTX1RZUEVfSU5UMzJfQVNfU1RSSU5HKTsKLQotICAvKiBWYXJpYW50IHNlcmlhbGl6YXRpb24gb2YgPFtpbnQzMiBzb21ldGhpbmcsIC4uLl0+IGF0IG9mZnNldCAwOgotICAgKiAwMiAnYScgJ2knIDAwICAgICAgICAgICAgICBzaWduYXR1cmUKLSAgICogICAgICAgICAgICAgICBsbCBsbCBsbCBsbCAgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHZhbHVlcwotICAgKiB2diB2diB2diB2diAgIC4uLiAgICAgICAgICBieXRlcyBvZiB2YWx1ZXMKLSAgICovCi0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfdmFyaWFudF9nZXRfbGVuZ3RoICh2KSwgPT0sIDggKyAoNCAqIG5fdmFsdWVzKSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9sZW5ndGggKHMpLCA9PSwgOCArICg0ICogbl92YWx1ZXMpKTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKHMsIDApLCA9PSwgMik7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAxKSwgPT0sIERCVVNfVFlQRV9BUlJBWSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAyKSwgPT0sIERCVVNfVFlQRV9JTlQzMik7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfc3RyaW5nX2dldF9ieXRlIChzLCAzKSwgPT0sICdcMCcpOwotICB2YWx1ZV9wID0gX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhX2xlbiAocywgNCwgNCk7Ci0gIG1lbWNweSAoJnZhbHVlLCB2YWx1ZV9wLCA0KTsKLSAgZ19hc3NlcnRfY21waW50ICh2YWx1ZSwgPT0sIG5fdmFsdWVzICogNCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspCi0gICAgewotICAgICAgdmFsdWVfcCA9IF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YV9sZW4gKHMsIDggKyAoNCAqIChuX3ZhbHVlcyAtIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0KTsKLSAgICAgIG1lbWNweSAoJnZhbHVlLCB2YWx1ZV9wLCA0KTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAodmFsdWUsID09LCBleHBlY3RlZF92YWx1ZSk7Ci0gICAgfQotCi0gIF9kYnVzX3ZhcmlhbnRfZnJlZSAodik7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBBc3NlcnQgdGhhdCBtIGlzIChpbiBHVmFyaWFudCBub3RhdGlvbik6Ci0gKiAoCi0gKiAgaW50MzIgNDIsCi0gKiAgIkhlbGxvLCB3b3JsZCEiLAotICogIGludDY0IDIzLAotICogIFtpbnQzMiA0MiwgaW50MzIgNDJdLAotICogIChpbnQzMiA0MiwgIkhlbGxvLCB3b3JsZCEiLCBpbnQ2NCAyMyksCi0gKiAge2ludDMyIDQyOiBpbnQ2NCAyM30sCi0gKiApCi0gKgotICogU2VyaWFsaXplIHNvbWUgb2YgdGhvc2UgdmFsdWVzIGludG8gREJ1c1ZhcmlhbnRzIGFuZCBhc3NlcnQgdGhhdCBpdCBpcwotICogZG9uZSBjb3JyZWN0bHkuCi0gKgotICogUmV0dXJuIFRSVUUgb24gc3VjY2VzcywgRkFMU0UgaWYgbGliZGJ1cyBwcmV0ZW5kcyB0byBydW4gb3V0IG9mIG1lbW9yeSwKLSAqIG9yIGFib3J0IG9uIGZhaWx1cmUuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWFzc2VydF9tZXNzYWdlX2FzX2V4cGVjdGVkIChEQnVzTWVzc2FnZSAqbSkKLXsKLSAgREJ1c01lc3NhZ2VJdGVyIGl0ZW1faXRlcjsKLSAgREJ1c01lc3NhZ2VJdGVyIGFycl9pdGVyOwotICBEQnVzTWVzc2FnZUl0ZXIgc3RydWN0X2l0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciBwYWlyX2l0ZXI7Ci0KLSAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZSAobSksID09LCAiaXN4YWkoaXN4KWF7aXh9Iik7Ci0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXQgKG0sICZpdGVtX2l0ZXIpOwotCi0gIHsKLSAgICBpZiAoIWFzc2VydF9pbnQzMiAoJml0ZW1faXRlciwgNDIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgZ19hc3NlcnRfdHJ1ZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZW1faXRlcikpOwotCi0gICAgaWYgKCFhc3NlcnRfc3RyaW5nICgmaXRlbV9pdGVyLCAiSGVsbG8sIHdvcmxkISIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgZ19hc3NlcnRfdHJ1ZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZW1faXRlcikpOwotCi0gICAgaWYgKCFhc3NlcnRfaW50NjQgKCZpdGVtX2l0ZXIsIDIzKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGdfYXNzZXJ0X3RydWUgKGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVtX2l0ZXIpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlICgmaXRlbV9pdGVyKSwgPT0sCi0gICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfQVJSQVkpOwotICAgIGlmICghYXNzZXJ0X2FycmF5X29mX2ludDMyICgmaXRlbV9pdGVyLCAyLCA0MikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBnX2Fzc2VydF90cnVlIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlbV9pdGVyKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSAoJml0ZW1faXRlciksID09LAotICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUlVDVCk7Ci0gICAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZW1faXRlciwgJnN0cnVjdF9pdGVyKTsKLQotICAgIHsKLSAgICAgIGlmICghYXNzZXJ0X2ludDMyICgmc3RydWN0X2l0ZXIsIDQyKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICBnX2Fzc2VydF90cnVlIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmc3RydWN0X2l0ZXIpKTsKLQotICAgICAgaWYgKCFhc3NlcnRfc3RyaW5nICgmc3RydWN0X2l0ZXIsICJIZWxsbywgd29ybGQhIikpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgZ19hc3NlcnRfdHJ1ZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJnN0cnVjdF9pdGVyKSk7Ci0KLSAgICAgIGlmICghYXNzZXJ0X2ludDY0ICgmc3RydWN0X2l0ZXIsIDIzKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICBnX2Fzc2VydF9mYWxzZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJnN0cnVjdF9pdGVyKSk7Ci0gICAgfQotCi0gICAgZ19hc3NlcnRfdHJ1ZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZW1faXRlcikpOwotCi0gICAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUgKCZpdGVtX2l0ZXIpLCA9PSwKLSAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9BUlJBWSk7Ci0gICAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJml0ZW1faXRlciwgJmFycl9pdGVyKTsKLQotICAgIHsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlICgmYXJyX2l0ZXIpLCA9PSwKLSAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0RJQ1RfRU5UUlkpOwotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJmFycl9pdGVyLCAmcGFpcl9pdGVyKTsKLQotICAgICAgewotICAgICAgICBpZiAoIWFzc2VydF9pbnQzMiAoJnBhaXJfaXRlciwgNDIpKQotICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICBnX2Fzc2VydF90cnVlIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmcGFpcl9pdGVyKSk7Ci0KLSAgICAgICAgaWYgKCFhc3NlcnRfaW50NjQgKCZwYWlyX2l0ZXIsIDIzKSkKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgZ19hc3NlcnRfZmFsc2UgKGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZwYWlyX2l0ZXIpKTsKLSAgICAgIH0KLQotICAgICAgZ19hc3NlcnRfZmFsc2UgKGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZhcnJfaXRlcikpOwotICAgIH0KLSAgfQotCi0gIGdfYXNzZXJ0X2ZhbHNlIChkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlbV9pdGVyKSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzIG9yIE9PTSwgYXMgcGVyIERCdXNUZXN0TWVtb3J5RnVuY3Rpb24gc2lnbmF0dXJlICovCi1zdGF0aWMgZGJ1c19ib29sX3QKLXRlc3Rfb25jZSAodm9pZCAqZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKnJlYWxseV9zdWNjZWVkZWQgPSBkYXRhOwotICBGaXh0dXJlIGZpeHR1cmUgPSB7IE5VTEwsIE5VTEwgfTsKLSAgRml4dHVyZSAqZiA9ICZmaXh0dXJlOwotICBEQnVzTWVzc2FnZUl0ZXIgaXRlbV9pdGVyOwotICBEQnVzTWVzc2FnZUl0ZXIgYXBwZW5kZXI7Ci0gIGludCBpOwotCi0gIGlmIChyZWFsbHlfc3VjY2VlZGVkICE9IE5VTEwpCi0gICAgKnJlYWxseV9zdWNjZWVkZWQgPSBGQUxTRTsKLQotICBpZiAoIXNldHVwIChmKSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoIWFzc2VydF9tZXNzYWdlX2FzX2V4cGVjdGVkIChmLT5vcmlnaW5hbCkpCi0gICAgZ290byBvdXQ7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCAoZi0+b3JpZ2luYWwsICZpdGVtX2l0ZXIpOwotCi0gIGYtPmNvcHkgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi8iLCAiYS5iIiwgImMiKTsKLQotICBpZiAoZi0+Y29weSA9PSBOVUxMKQotICAgIGdvdG8gb3V0OwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kIChmLT5jb3B5LCAmYXBwZW5kZXIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgREJ1c1ZhcmlhbnQgKnZhciA9IF9kYnVzX3ZhcmlhbnRfcmVhZCAoJml0ZW1faXRlcik7Ci0KLSAgICAgIGlmICh2YXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIGlmICghX2RidXNfdmFyaWFudF93cml0ZSAodmFyLCAmYXBwZW5kZXIpKQotICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfdmFyaWFudF9mcmVlICh2YXIpOwotICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgIF9kYnVzX3ZhcmlhbnRfZnJlZSAodmFyKTsKLQotICAgICAgaWYgKGkgPT0gNSkKLSAgICAgICAgZ19hc3NlcnRfZmFsc2UgKGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVtX2l0ZXIpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZSAoZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZW1faXRlcikpOwotICAgIH0KLQotICBpZiAoIWFzc2VydF9tZXNzYWdlX2FzX2V4cGVjdGVkIChmLT5jb3B5KSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAocmVhbGx5X3N1Y2NlZWRlZCAhPSBOVUxMKQotICAgICpyZWFsbHlfc3VjY2VlZGVkID0gVFJVRTsKLW91dDoKLSAgaWYgKGYtPm9yaWdpbmFsKQotICAgIGRidXNfbWVzc2FnZV91bnJlZiAoZi0+b3JpZ2luYWwpOwotCi0gIGlmIChmLT5jb3B5KQotICAgIGRidXNfbWVzc2FnZV91bnJlZiAoZi0+Y29weSk7Ci0KLSAgZGJ1c19zaHV0ZG93biAoKTsKLSAgZ19hc3NlcnRfY21waW50IChfZGJ1c19nZXRfbWFsbG9jX2Jsb2Nrc19vdXRzdGFuZGluZyAoKSwgPT0sIDApOwotCi0gIHJldHVybiAhZ190ZXN0X2ZhaWxlZCAoKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2ltcGxlICh2b2lkKQotewotICBnYm9vbGVhbiByZWFsbHlfc3VjY2VlZGVkID0gRkFMU0U7Ci0KLSAgaWYgKCF0ZXN0X29uY2UgKCZyZWFsbHlfc3VjY2VlZGVkKSkKLSAgICBnX2Vycm9yICgiVGVzdCBmYWlsZWQiKTsKLQotICBpZiAoIXJlYWxseV9zdWNjZWVkZWQpCi0gICAgZ19lcnJvciAoIk91dCBvZiBtZW1vcnkiKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfb29tICh2b2lkKQotewotICBpZiAoIV9kYnVzX3Rlc3Rfb29tX2hhbmRsaW5nICgiREJ1c1ZhcmlhbnQiLCB0ZXN0X29uY2UsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJUZXN0IGZhaWxlZCIpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLAotICAgICAgY2hhciAqKmFyZ3YpCi17Ci0gIHRlc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBnX3Rlc3RfYWRkX2Z1bmMgKCIvdmFyaWFudC9zaW1wbGUiLCB0ZXN0X3NpbXBsZSk7Ci0gIGdfdGVzdF9hZGRfZnVuYyAoIi92YXJpYW50L29vbSIsIHRlc3Rfb29tKTsKLQotICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3QvbG9vcGJhY2suYyBiL3Rlc3QvbG9vcGJhY2suYwppbmRleCBiODcyNWI3Li5iZjA1NDJhIDEwMDY0NAotLS0gYS90ZXN0L2xvb3BiYWNrLmMKKysrIGIvdGVzdC9sb29wYmFjay5jCkBAIC00MCw3ICs0MCw2IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgVGVzdE1haW5Db250ZXh0ICpjdHg7CiAgICAgREJ1c0Vycm9yIGU7Ci0gICAgZ2Jvb2xlYW4gc2tpcDsKIAogICAgIERCdXNTZXJ2ZXIgKnNlcnZlcjsKICAgICBEQnVzQ29ubmVjdGlvbiAqc2VydmVyX2Nvbm47CkBAIC05OCwxNCArOTcsNiBAQAogICBkYnVzX2Vycm9yX2luaXQgKCZmLT5lKTsKICAgZ19xdWV1ZV9pbml0ICgmZi0+c2VydmVyX21lc3NhZ2VzKTsKIAotICBpZiAoKGdfc3RyX2hhc19wcmVmaXggKGFkZHIsICJ0Y3A6IikgfHwKLSAgICAgICBnX3N0cl9oYXNfcHJlZml4IChhZGRyLCAibm9uY2UtdGNwOiIpKSAmJgotICAgICAgIXRlc3RfY2hlY2tfdGNwX3dvcmtzICgpKQotICAgIHsKLSAgICAgIGYtPnNraXAgPSBUUlVFOwotICAgICAgcmV0dXJuOwotICAgIH0KLQogICBmLT5zZXJ2ZXIgPSBkYnVzX3NlcnZlcl9saXN0ZW4gKGFkZHIsICZmLT5lKTsKICAgYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7CiAgIGdfYXNzZXJ0IChmLT5zZXJ2ZXIgIT0gTlVMTCk7CkBAIC0xMzMsOSArMTI0LDYgQEAKIAogICBzZXR1cCAoZiwgYWRkcik7CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIGxpc3RlbmluZ19hdCA9IGRidXNfc2VydmVyX2dldF9hZGRyZXNzIChmLT5zZXJ2ZXIpOwogICBnX3Rlc3RfbWVzc2FnZSAoImxpc3RlbmluZyBhdCAlcyIsIGxpc3RlbmluZ19hdCk7CiAgIGdfYXNzZXJ0IChnX3N0cl9oYXNfcHJlZml4IChsaXN0ZW5pbmdfYXQsICJ1bml4OnBhdGg9IikpOwpAQCAtMTU4LDkgKzE0Niw2IEBACiAKICAgc2V0dXAgKGYsIGFkZHIpOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICBsaXN0ZW5pbmdfYXQgPSBkYnVzX3NlcnZlcl9nZXRfYWRkcmVzcyAoZi0+c2VydmVyKTsKICAgZ190ZXN0X21lc3NhZ2UgKCJsaXN0ZW5pbmcgYXQgJXMiLCBsaXN0ZW5pbmdfYXQpOwogICAvKiB3ZSBoYXZlIGZhbGxlbiBiYWNrIHRvIHNvbWV0aGluZyBpbiAvdG1wLCBlaXRoZXIgYWJzdHJhY3Qgb3Igbm90ICovCkBAIC0xNzMsOTkgKzE1OCwxMiBAQAogCiBzdGF0aWMgdm9pZAogdGVzdF9jb25uZWN0IChGaXh0dXJlICpmLAotICAgIGdjb25zdHBvaW50ZXIgYWRkcikKKyAgICBnY29uc3Rwb2ludGVyIGFkZHIgR19HTlVDX1VOVVNFRCkKIHsKLSAgY29uc3QgY2hhciAqbGlzdGVuaW5nX2FkZHJlc3MgPSBhZGRyOwotICBjaGFyICphZGRyZXNzOwotICBEQnVzQWRkcmVzc0VudHJ5ICoqZW50cmllczsKLSAgaW50IG5fZW50cmllczsKLSAgZGJ1c19ib29sX3Qgb2s7Ci0KLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIGdfYXNzZXJ0IChmLT5zZXJ2ZXJfY29ubiA9PSBOVUxMKTsKIAotICBhZGRyZXNzID0gZGJ1c19zZXJ2ZXJfZ2V0X2FkZHJlc3MgKGYtPnNlcnZlcik7Ci0gIGdfdGVzdF9tZXNzYWdlICgibGlzdGVuaW5nIGF0ICVzIiwgYWRkcmVzcyk7Ci0KLSAgb2sgPSBkYnVzX3BhcnNlX2FkZHJlc3MgKGFkZHJlc3MsICZlbnRyaWVzLCAmbl9lbnRyaWVzLCAmZi0+ZSk7Ci0gIGFzc2VydF9ub19lcnJvciAoJmYtPmUpOwotICBnX2Fzc2VydF90cnVlIChvayk7Ci0gIGdfYXNzZXJ0X2NtcGludCAobl9lbnRyaWVzLCA9PSwgMSk7Ci0KLSAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyaWVzWzBdLCAiZ3VpZCIpLCAhPSwKLSAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICBpZiAoZ19zdHJjbXAwIChsaXN0ZW5pbmdfYWRkcmVzcywgInRjcDpob3N0PTEyNy4wLjAuMSIpID09IDApCi0gICAgewotICAgICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X21ldGhvZCAoZW50cmllc1swXSksID09LCAidGNwIik7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfYWRkcmVzc19lbnRyeV9nZXRfdmFsdWUgKGVudHJpZXNbMF0sICJob3N0IiksID09LAotICAgICAgICAgICAgICAgICAgICAgICAiMTI3LjAuMC4xIik7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfYWRkcmVzc19lbnRyeV9nZXRfdmFsdWUgKGVudHJpZXNbMF0sICJwb3J0IiksICE9LAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19hZGRyZXNzX2VudHJ5X2dldF92YWx1ZSAoZW50cmllc1swXSwgIm5vbmNlZmlsZSIpLAotICAgICAgICAgICAgICAgICAgICAgICA9PSwgTlVMTCk7Ci0gICAgfQotICBlbHNlIGlmIChnX3N0cmNtcDAgKGxpc3RlbmluZ19hZGRyZXNzLCAibm9uY2UtdGNwOmhvc3Q9MTI3LjAuMC4xIikgPT0gMCkKLSAgICB7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfYWRkcmVzc19lbnRyeV9nZXRfbWV0aG9kIChlbnRyaWVzWzBdKSwgPT0sCi0gICAgICAgICAgICAgICAgICAgICAgICJub25jZS10Y3AiKTsKLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19hZGRyZXNzX2VudHJ5X2dldF92YWx1ZSAoZW50cmllc1swXSwgImhvc3QiKSwgPT0sCi0gICAgICAgICAgICAgICAgICAgICAgICIxMjcuMC4wLjEiKTsKLSAgICAgIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19hZGRyZXNzX2VudHJ5X2dldF92YWx1ZSAoZW50cmllc1swXSwgInBvcnQiKSwgIT0sCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyaWVzWzBdLCAibm9uY2VmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICE9LCBOVUxMKTsKLSAgICB9Ci0jaWZkZWYgREJVU19VTklYCi0gIGVsc2UgaWYgKGdfc3RyY21wMCAobGlzdGVuaW5nX2FkZHJlc3MsICJ1bml4OnRtcGRpcj0vdG1wIikgPT0gMCkKLSAgICB7Ci0gICAgICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfYWRkcmVzc19lbnRyeV9nZXRfbWV0aG9kIChlbnRyaWVzWzBdKSwgPT0sICJ1bml4Iik7Ci0KLSAgICAgIGlmIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyaWVzWzBdLCAiYWJzdHJhY3QiKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgY29uc3QgY2hhciAqYWJzdHJhY3QgPSBkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyaWVzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic3RyYWN0Iik7Ci0KLSAgICAgICAgICBnX2Fzc2VydF90cnVlIChnX3N0cl9oYXNfcHJlZml4IChhYnN0cmFjdCwgIi90bXAvZGJ1cy0iKSk7Ci0gICAgICAgICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X3ZhbHVlIChlbnRyaWVzWzBdLCAicGF0aCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0sIE5VTEwpOwotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBjb25zdCBjaGFyICpwYXRoID0gZGJ1c19hZGRyZXNzX2VudHJ5X2dldF92YWx1ZSAoZW50cmllc1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiKTsKLQotICAgICAgICAgIGdfYXNzZXJ0X25vbm51bGwgKHBhdGgpOwotICAgICAgICAgIGdfYXNzZXJ0X3RydWUgKGdfc3RyX2hhc19wcmVmaXggKHBhdGgsICIvdG1wL2RidXMtIikpOwotICAgICAgICB9Ci0gICAgfQotICBlbHNlIGlmIChnX3N0cmNtcDAgKGxpc3RlbmluZ19hZGRyZXNzLCAidW5peDpkaXI9L3RtcCIpID09IDApCi0gICAgewotICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGRidXNfYWRkcmVzc19lbnRyeV9nZXRfdmFsdWUgKGVudHJpZXNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiKTsKLQotICAgICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X21ldGhvZCAoZW50cmllc1swXSksID09LCAidW5peCIpOwotICAgICAgZ19hc3NlcnRfbm9ubnVsbCAocGF0aCk7Ci0gICAgICBnX2Fzc2VydF90cnVlIChnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL3RtcC9kYnVzLSIpKTsKLSAgICB9Ci0gIGVsc2UgaWYgKGdfc3RyY21wMCAobGlzdGVuaW5nX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgInVuaXg6cnVudGltZT15ZXM7dW5peDp0bXBkaXI9L3RtcCIpID09IDApCi0gICAgewotICAgICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX2FkZHJlc3NfZW50cnlfZ2V0X21ldGhvZCAoZW50cmllc1swXSksID09LCAidW5peCIpOwotICAgICAgLyogTm8gcGFydGljdWxhciBzdGF0ZW1lbnQgYWJvdXQgdGhlIHBhdGggaGVyZTogZm9yIHRoYXQgc2VlCi0gICAgICAgKiBzZXR1cF9ydW50aW1lKCkgYW5kIHNldHVwX25vX3J1bnRpbWUoKSAqLwotICAgIH0KLSNlbmRpZgotICBlbHNlCi0gICAgewotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgfQotCi0gIGRidXNfYWRkcmVzc19lbnRyaWVzX2ZyZWUgKGVudHJpZXMpOwotCi0gIGYtPmNsaWVudF9jb25uID0gZGJ1c19jb25uZWN0aW9uX29wZW5fcHJpdmF0ZSAoYWRkcmVzcywgJmYtPmUpOworICBmLT5jbGllbnRfY29ubiA9IGRidXNfY29ubmVjdGlvbl9vcGVuX3ByaXZhdGUgKAorICAgICAgZGJ1c19zZXJ2ZXJfZ2V0X2FkZHJlc3MgKGYtPnNlcnZlciksICZmLT5lKTsKICAgYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7CiAgIGdfYXNzZXJ0IChmLT5jbGllbnRfY29ubiAhPSBOVUxMKTsKICAgdGVzdF9jb25uZWN0aW9uX3NldHVwIChmLT5jdHgsIGYtPmNsaWVudF9jb25uKTsKQEAgLTI3NSw4ICsxNzMsNiBAQAogICAgICAgdGVzdF9wcm9ncmVzcyAoJy4nKTsKICAgICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7CiAgICAgfQotCi0gIGRidXNfZnJlZSAoYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yODQsMTcgKzE4MCwxMyBAQAogICAgIGdjb25zdHBvaW50ZXIgYWRkciBHX0dOVUNfVU5VU0VEKQogewogICBEQnVzTWVzc2FnZSAqaW5jb21pbmc7Ci0gIGNoYXIgKmFkZHJlc3M7CisgIGdjaGFyICphZGRyZXNzID0gZ19zdHJkdXAgKGRidXNfc2VydmVyX2dldF9hZGRyZXNzIChmLT5zZXJ2ZXIpKTsKICAgZ2NoYXIgKmd1aWQ7CiAKLSAgaWYgKGYtPnNraXApCi0gICAgcmV0dXJuOwotCiAgIGdfdGVzdF9idWcgKCIzOTcyMCIpOwogCiAgIGdfYXNzZXJ0IChmLT5zZXJ2ZXJfY29ubiA9PSBOVUxMKTsKIAotICBhZGRyZXNzID0gZGJ1c19zZXJ2ZXJfZ2V0X2FkZHJlc3MgKGYtPnNlcnZlcik7CiAgIGdfYXNzZXJ0IChzdHJzdHIgKGFkZHJlc3MsICJndWlkPSIpICE9IE5VTEwpOwogICBndWlkID0gc3Ryc3RyIChhZGRyZXNzLCAiZ3VpZD0iKTsKICAgZ19hc3NlcnRfY21wdWludCAoc3RybGVuIChndWlkKSwgPj0sIDUgKyAzMik7CkBAIC0zMzgsOCArMjMwLDkgQEAKICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZSAoaW5jb21pbmcpLCA9PSwgIiIpOwogICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfbWVzc2FnZV9nZXRfcGF0aCAoaW5jb21pbmcpLCA9PSwgREJVU19QQVRIX0xPQ0FMKTsKIAotICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZpbmNvbWluZyk7Ci0gIGRidXNfZnJlZSAoYWRkcmVzcyk7CisgIGRidXNfbWVzc2FnZV91bnJlZiAoaW5jb21pbmcpOworCisgIGdfZnJlZSAoYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNTAsOSArMjQzLDYgQEAKICAgZGJ1c191aW50MzJfdCBzZXJpYWw7CiAgIERCdXNNZXNzYWdlICpvdXRnb2luZywgKmluY29taW5nOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICB0ZXN0X2Nvbm5lY3QgKGYsIGFkZHIpOwogCiAgIG91dGdvaW5nID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvY29tL2V4YW1wbGUvSGVsbG8iLApAQCAtMzg0LDggKzI3NCw5IEBACiAgIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19tZXNzYWdlX2dldF9wYXRoIChpbmNvbWluZyksID09LCAiL2NvbS9leGFtcGxlL0hlbGxvIik7CiAgIGdfYXNzZXJ0X2NtcHVpbnQgKGRidXNfbWVzc2FnZV9nZXRfc2VyaWFsIChpbmNvbWluZyksID09LCBzZXJpYWwpOwogCi0gIGRidXNfY2xlYXJfbWVzc2FnZSAoJmluY29taW5nKTsKLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmb3V0Z29pbmcpOworICBkYnVzX21lc3NhZ2VfdW5yZWYgKGluY29taW5nKTsKKworICBkYnVzX21lc3NhZ2VfdW5yZWYgKG91dGdvaW5nKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM5MywxOCArMjg0LDI2IEBACiAgICAgZ2NvbnN0cG9pbnRlciBhZGRyIEdfR05VQ19VTlVTRUQpCiB7CiAgIGlmIChmLT5jbGllbnRfY29ubiAhPSBOVUxMKQotICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+Y2xpZW50X2Nvbm4pOworICAgIHsKKyAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+Y2xpZW50X2Nvbm4pOworICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChmLT5jbGllbnRfY29ubik7CisgICAgICBmLT5jbGllbnRfY29ubiA9IE5VTEw7CisgICAgfQogCiAgIGlmIChmLT5zZXJ2ZXJfY29ubiAhPSBOVUxMKQotICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+c2VydmVyX2Nvbm4pOwotCi0gIGRidXNfY2xlYXJfY29ubmVjdGlvbiAoJmYtPmNsaWVudF9jb25uKTsKLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZi0+c2VydmVyX2Nvbm4pOworICAgIHsKKyAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+c2VydmVyX2Nvbm4pOworICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChmLT5zZXJ2ZXJfY29ubik7CisgICAgICBmLT5zZXJ2ZXJfY29ubiA9IE5VTEw7CisgICAgfQogCiAgIGlmIChmLT5zZXJ2ZXIgIT0gTlVMTCkKLSAgICBkYnVzX3NlcnZlcl9kaXNjb25uZWN0IChmLT5zZXJ2ZXIpOworICAgIHsKKyAgICAgIGRidXNfc2VydmVyX2Rpc2Nvbm5lY3QgKGYtPnNlcnZlcik7CisgICAgICBkYnVzX3NlcnZlcl91bnJlZiAoZi0+c2VydmVyKTsKKyAgICAgIGYtPnNlcnZlciA9IE5VTEw7CisgICAgfQogCi0gIGRidXNfY2xlYXJfc2VydmVyICgmZi0+c2VydmVyKTsKICAgdGVzdF9tYWluX2NvbnRleHRfdW5yZWYgKGYtPmN0eCk7CiB9CiAKQEAgLTQzMywxMCArMzMyLDEwIEBACiAKICAgLyogdGhlIHNvY2tldCBtYXkgZXhpc3QgKi8KICAgcGF0aCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzL2J1cyIsIGYtPnRtcF9ydW50aW1lX2Rpcik7Ci0gIHRlc3RfcmVtb3ZlX2lmX2V4aXN0cyAocGF0aCk7CisgIGdfYXNzZXJ0IChnX3JlbW92ZSAocGF0aCkgPT0gMCB8fCBlcnJubyA9PSBFTk9FTlQpOwogICBnX2ZyZWUgKHBhdGgpOwogICAvKiB0aGVyZSBzaG91bGRuJ3QgYmUgYW55dGhpbmcgZWxzZSBpbiB0aGVyZSAqLwotICB0ZXN0X3JtZGlyX211c3RfZXhpc3QgKGYtPnRtcF9ydW50aW1lX2Rpcik7CisgIGdfYXNzZXJ0X2NtcGludCAoZ19ybWRpciAoZi0+dG1wX3J1bnRpbWVfZGlyKSwgPT0sIDApOwogCiAgIC8qIHdlJ3JlIHJlbHlpbmcgb24gYmVpbmcgc2luZ2xlLXRocmVhZGVkIGZvciB0aGlzIHRvIGJlIHNhZmUgKi8KICAgaWYgKGYtPnNhdmVkX3J1bnRpbWVfZGlyICE9IE5VTEwpCkBAIC00NjQsMTcgKzM2MywxMCBAQAogICBnX3Rlc3RfYWRkICgiL21lc3NhZ2Uvbm9uY2UtdGNwIiwgRml4dHVyZSwgIm5vbmNlLXRjcDpob3N0PTEyNy4wLjAuMSIsIHNldHVwLAogICAgICAgdGVzdF9tZXNzYWdlLCB0ZWFyZG93bik7CiAKLSAgZ190ZXN0X2FkZCAoIi9tZXNzYWdlL2JhZC1ndWlkL3RjcCIsIEZpeHR1cmUsICJ0Y3A6aG9zdD0xMjcuMC4wLjEiLCBzZXR1cCwKLSAgICAgIHRlc3RfYmFkX2d1aWQsIHRlYXJkb3duKTsKLQogI2lmZGVmIERCVVNfVU5JWAotICBnX3Rlc3RfYWRkICgiL2Nvbm5lY3QvdW5peC90bXBkaXIiLCBGaXh0dXJlLCAidW5peDp0bXBkaXI9L3RtcCIsIHNldHVwLAorICBnX3Rlc3RfYWRkICgiL2Nvbm5lY3QvdW5peCIsIEZpeHR1cmUsICJ1bml4OnRtcGRpcj0vdG1wIiwgc2V0dXAsCiAgICAgICB0ZXN0X2Nvbm5lY3QsIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9tZXNzYWdlL3VuaXgvdG1wZGlyIiwgRml4dHVyZSwgInVuaXg6dG1wZGlyPS90bXAiLCBzZXR1cCwKLSAgICAgIHRlc3RfbWVzc2FnZSwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2Nvbm5lY3QvdW5peC9kaXIiLCBGaXh0dXJlLCAidW5peDpkaXI9L3RtcCIsIHNldHVwLAotICAgICAgdGVzdF9jb25uZWN0LCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvbWVzc2FnZS91bml4L2RpciIsIEZpeHR1cmUsICJ1bml4OmRpcj0vdG1wIiwgc2V0dXAsCisgIGdfdGVzdF9hZGQgKCIvbWVzc2FnZS91bml4IiwgRml4dHVyZSwgInVuaXg6dG1wZGlyPS90bXAiLCBzZXR1cCwKICAgICAgIHRlc3RfbWVzc2FnZSwgdGVhcmRvd24pOwogCiAgIGdfdGVzdF9hZGQgKCIvY29ubmVjdC91bml4L3J1bnRpbWUiLCBGaXh0dXJlLApAQCAtNDgzLDEwICszNzUsMTAgQEAKICAgZ190ZXN0X2FkZCAoIi9jb25uZWN0L3VuaXgvbm8tcnVudGltZSIsIEZpeHR1cmUsCiAgICAgICAidW5peDpydW50aW1lPXllczt1bml4OnRtcGRpcj0vdG1wIiwgc2V0dXBfbm9fcnVudGltZSwgdGVzdF9jb25uZWN0LAogICAgICAgdGVhcmRvd25fbm9fcnVudGltZSk7Ci0KLSAgZ190ZXN0X2FkZCAoIi9tZXNzYWdlL2JhZC1ndWlkL3VuaXgiLCBGaXh0dXJlLCAidW5peDp0bXBkaXI9L3RtcCIsIHNldHVwLAotICAgICAgdGVzdF9iYWRfZ3VpZCwgdGVhcmRvd24pOwogI2VuZGlmCiAKKyAgZ190ZXN0X2FkZCAoIi9tZXNzYWdlL2JhZC1ndWlkIiwgRml4dHVyZSwgInRjcDpob3N0PTEyNy4wLjAuMSIsIHNldHVwLAorICAgICAgdGVzdF9iYWRfZ3VpZCwgdGVhcmRvd24pOworCiAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9tYW51YWwtYmFja3RyYWNlLmMgYi90ZXN0L21hbnVhbC1iYWNrdHJhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjMTQ5OS4uMDAwMDAwMAotLS0gYS90ZXN0L21hbnVhbC1iYWNrdHJhY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qIC0qLSBtb2RlOiBDOyBjLWZpbGUtc3R5bGU6ICJnbnUiOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IC0qLSAqLwotLyogdGVzdC1iYWNrdHJhY2UuYyBiYWNrdHJhY2UgdGVzdCBhcHAKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmFsZiBIYWJhY2tlciA8cmFsZi5oYWJhY2tlckBmcmVlbmV0LmRlPgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+Ci0jaW5jbHVkZSA8ZGJ1cy9kYnVzLXN5c2RlcHMuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXN0YXRpYyB2b2lkCi10ZXN0MiAodm9pZCkKLXsKLSAgX2RidXNfcHJpbnRfYmFja3RyYWNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0MSAodm9pZCkKLXsKLSAgdGVzdDIoKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3QgKHZvaWQpCi17Ci0gIHRlc3QxKCk7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBpZiAoYXJnYyA9PSAyKQotICAgIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiZGJ1c19hYm9ydCB0ZXN0XG4iKTsKLSAgICAgIF9kYnVzX2Fib3J0ICgpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHRlc3QoKTsKLSAgICB9Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdC9tYW51YWwtZGlyLWl0ZXIuYyBiL3Rlc3QvbWFudWFsLWRpci1pdGVyLmMKaW5kZXggODUwODE3NC4uMjFhYzBlOSAxMDA2NDQKLS0tIGEvdGVzdC9tYW51YWwtZGlyLWl0ZXIuYworKysgYi90ZXN0L21hbnVhbC1kaXItaXRlci5jCkBAIC00Nyw5ICs0Nyw3IEBACiAgIGlmICghX2RidXNfc3RyaW5nX2luaXQgKCZkaXJuYW1lKSkKICAgICAgIG9vbSAoImluaXQgZGlybmFtZSIpOwogCi0gIGlmICghX2RidXNfc3RyaW5nX2FwcGVuZCAoJmRpcm5hbWUsIGFyZ3ZbMV0pKQotICAgICAgb29tICgiYXBwZW5kIGFyZ3ZbMV0iKTsKLQorICBfZGJ1c19zdHJpbmdfYXBwZW5kICgmZGlybmFtZSwgYXJndlsxXSk7CiAgIGRpciA9IF9kYnVzX2RpcmVjdG9yeV9vcGVuICgmZGlybmFtZSwgJnRtcF9lcnJvcik7CiAKICAgaWYgKGRpciA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvdGVzdC9tYW51YWwtcGF0aHMuYyBiL3Rlc3QvbWFudWFsLXBhdGhzLmMKaW5kZXggODJmYzY2OS4uZTM5MmM1YyAxMDA2NDQKLS0tIGEvdGVzdC9tYW51YWwtcGF0aHMuYworKysgYi90ZXN0L21hbnVhbC1wYXRocy5jCkBAIC0xMiwzOSArMTIsMjAgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLXN0YXRpYyBkYnVzX2Jvb2xfdAotcHJpbnRfaW5zdGFsbF9yb290ICh2b2lkKQorc3RhdGljIGRidXNfYm9vbF90IHByaW50X2luc3RhbGxfcm9vdCgpCiB7Ci0gIERCdXNTdHJpbmcgcnVudGltZV9wcmVmaXg7CisgIGNoYXIgcnVudGltZV9wcmVmaXhbMTAwMF07CiAKLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnJ1bnRpbWVfcHJlZml4KSkKKyAgaWYgKCFfZGJ1c19nZXRfaW5zdGFsbF9yb290KHJ1bnRpbWVfcHJlZml4LCBzaXplb2YocnVudGltZV9wcmVmaXgpKSkKICAgICB7Ci0gICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJvdXQgb2YgbWVtb3J5Iik7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImRidXNfZ2V0X2luc3RhbGxfcm9vdCgpIGZhaWxlZFxuIik7CiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotCi0gIGlmICghX2RidXNfZ2V0X2luc3RhbGxfcm9vdCAoJnJ1bnRpbWVfcHJlZml4KSkKLSAgICB7Ci0gICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnJ1bnRpbWVfcHJlZml4KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgaWYgKF9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmcnVudGltZV9wcmVmaXgpID09IDApCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiX2RidXNfZ2V0X2luc3RhbGxfcm9vdCgpIGZhaWxlZFxuIik7Ci0gICAgICBfZGJ1c19zdHJpbmdfZnJlZSAoJnJ1bnRpbWVfcHJlZml4KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgZnByaW50ZiAoc3Rkb3V0LCAiX2RidXNfZ2V0X2luc3RhbGxfcm9vdCgpIHJldHVybmVkICclcydcbiIsCi0gICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCZydW50aW1lX3ByZWZpeCkpOwotICBfZGJ1c19zdHJpbmdfZnJlZSAoJnJ1bnRpbWVfcHJlZml4KTsKKyAgZnByaW50ZihzdGRvdXQsICJkYnVzX2dldF9pbnN0YWxsX3Jvb3QoKSByZXR1cm5lZCAnJXMnXG4iLCBydW50aW1lX3ByZWZpeCk7CiAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZGJ1c19ib29sX3QKLXByaW50X3NlcnZpY2VfZGlycyAodm9pZCkKK3N0YXRpYyBkYnVzX2Jvb2xfdCBwcmludF9zZXJ2aWNlX2RpcnMoKQogewogICBEQnVzTGlzdCAqZGlyczsKICAgREJ1c0xpc3QgKmxpbms7CkBAIC02NSwyNSArNDYsMTEgQEAKIAogc3RhdGljIGRidXNfYm9vbF90IHByaW50X3JlcGxhY2VfaW5zdGFsbF9wcmVmaXgoY29uc3QgY2hhciAqcykKIHsKLSAgREJ1c1N0cmluZyBzdHI7CisgIGNvbnN0IGNoYXIgKnMyID0gX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeChzKTsKKyAgaWYgKCFzMikKKyAgICByZXR1cm4gRkFMU0U7CiAKLSAgaWYgKCFfZGJ1c19zdHJpbmdfaW5pdCAoJnN0cikpCi0gICAgewotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgib3V0IG9mIG1lbW9yeSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZzdHIsIHMpIHx8Ci0gICAgICAhX2RidXNfcmVwbGFjZV9pbnN0YWxsX3ByZWZpeCAoJnN0cikpCi0gICAgewotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgib3V0IG9mIG1lbW9yeSIpOwotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZzdHIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICBmcHJpbnRmKHN0ZG91dCwgInJlcGxhY2VkICclcycgYnkgJyVzJ1xuIiwgcywKLSAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoJnN0cikpOwotICBfZGJ1c19zdHJpbmdfZnJlZSAoJnN0cik7CisgIGZwcmludGYoc3Rkb3V0LCAicmVwbGFjZWQgJyVzJyBieSAnJXMnXG4iLCBzLCBzMik7CiAgIHJldHVybiBUUlVFOwogfQogCmRpZmYgLS1naXQgYS90ZXN0L21lc3NhZ2UuYyBiL3Rlc3QvbWVzc2FnZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWM0NDFlLi4wMDAwMDAwCi0tLSBhL3Rlc3QvbWVzc2FnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLS8qIFRhcmdldGVkIHVuaXQgdGVzdHMgZm9yIE9PTSBwYXRocyBpbiBEQnVzTWVzc2FnZQotICoKLSAqIENvcHlyaWdodCDCqSAyMDE3IENvbGxhYm9yYSBMdGQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCi0gKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAotICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKLSAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCi0gKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAotICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpbmNsdWRlIDxkYnVzL2RidXMuaD4KLSNpbmNsdWRlICJkYnVzL2RidXMtaW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAiZGJ1cy9kYnVzLXBpcGUuaCIKLSNpbmNsdWRlICJ0ZXN0LXV0aWxzLWdsaWIuaCIKLQotLyogUmV0dXJuIFRSVUUgaWYgdGhlIHJpZ2h0IHRoaW5nIGhhcHBlbnMsIGJ1dCB0aGUgcmlnaHQgdGhpbmcgbWlnaHQgaW5jbHVkZQotICogT09NLiAqLwotc3RhdGljIGRidXNfYm9vbF90Ci10ZXN0X2FycmF5ICh2b2lkICpjb250YWluZWRfc2lnbmF0dXJlKQotewotICBEQnVzTWVzc2FnZSAqbTsKLSAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0gIERCdXNNZXNzYWdlSXRlciBhcnJfaXRlcjsKLSAgZGJ1c19ib29sX3QgYXJyX2l0ZXJfb3BlbiA9IEZBTFNFOwotICBEQnVzTWVzc2FnZUl0ZXIgaW5uZXJfaXRlcjsKLSAgZGJ1c19ib29sX3QgaW5uZXJfaXRlcl9vcGVuID0gRkFMU0U7Ci0KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiLyIsICJhLmIiLCAiYyIpOwotCi0gIGlmIChtID09IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKG0sICZpdGVyKTsKLQotICAvKiBvcGVuX2NvbnRhaW5lciBvbmx5IG9wZW5zIHRoZSBjb250YWluZXIgaWYgaXQgc3VjY2VlZHMgKi8KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJml0ZXIsIERCVVNfVFlQRV9BUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkX3NpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycl9pdGVyKSkKLSAgICBnb3RvIG91dDsKLQotICBhcnJfaXRlcl9vcGVuID0gVFJVRTsKLQotICBpZiAoZ19zdHJjbXAwIChjb250YWluZWRfc2lnbmF0dXJlLCAiYWkiKSA9PSAwKQotICAgIHsKLSAgICAgIC8qIG9wZW5fY29udGFpbmVyIG9ubHkgb3BlbnMgdGhlIGNvbnRhaW5lciBpZiBpdCBzdWNjZWVkcyAqLwotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFycl9pdGVyLCBEQlVTX1RZUEVfQVJSQVksICJpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbm5lcl9pdGVyKSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIC8qIFdlIGRvIG5vdCBzZXQgaW5uZXJfaXRlcl9vcGVuIHRvIFRSVUUgaGVyZSBiZWNhdXNlIHdlIHdvdWxkCi0gICAgICAgKiBpbW1lZGlhdGVseSBzZXQgaXQgdG8gRkFMU0UgYWdhaW4gKi8KLQotICAgICAgLyogY2xvc2VfY29udGFpbmVyIGNsb3NlcyB0aGUgY29udGFpbmVyLCBldmVuIHdoZW4gaXQgZmFpbHMgKi8KLSAgICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmYXJyX2l0ZXIsICZpbm5lcl9pdGVyKSkKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICBlbHNlIGlmIChnX3N0cmNtcDAgKGNvbnRhaW5lZF9zaWduYXR1cmUsICJ7c3N9IikgPT0gMCkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICpzID0gImhlbGxvIjsKLQotICAgICAgLyogb3Blbl9jb250YWluZXIgb25seSBvcGVucyB0aGUgY29udGFpbmVyIGlmIGl0IHN1Y2NlZWRzICovCi0gICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmYXJyX2l0ZXIsIERCVVNfVFlQRV9ESUNUX0VOVFJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmlubmVyX2l0ZXIpKQotICAgICAgICBnb3RvIG91dDsKLQotICAgICAgaW5uZXJfaXRlcl9vcGVuID0gVFJVRTsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZpbm5lcl9pdGVyLCBEQlVTX1RZUEVfU1RSSU5HLCAmcykpCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJmlubmVyX2l0ZXIsIERCVVNfVFlQRV9TVFJJTkcsICZzKSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIC8qIGNsb3NlX2NvbnRhaW5lciBjbG9zZXMgdGhlIGNvbnRhaW5lciwgZXZlbiB3aGVuIGl0IGZhaWxzICovCi0gICAgICBpbm5lcl9pdGVyX29wZW4gPSBGQUxTRTsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcnJfaXRlciwgJmlubmVyX2l0ZXIpKQotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gIGVsc2UgaWYgKGdfc3RyY21wMCAoY29udGFpbmVkX3NpZ25hdHVyZSwgInYiKSA9PSAwKQotICAgIHsKLSAgICAgIGRidXNfYm9vbF90IHllcyA9IFRSVUU7Ci0KLSAgICAgIC8qIG9wZW5fY29udGFpbmVyIG9ubHkgb3BlbnMgdGhlIGNvbnRhaW5lciBpZiBpdCBzdWNjZWVkcyAqLwotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFycl9pdGVyLCBEQlVTX1RZUEVfVkFSSUFOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwgJmlubmVyX2l0ZXIpKQotICAgICAgICBnb3RvIG91dDsKLQotICAgICAgaW5uZXJfaXRlcl9vcGVuID0gVFJVRTsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZpbm5lcl9pdGVyLCBEQlVTX1RZUEVfQk9PTEVBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeWVzKSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIC8qIGNsb3NlX2NvbnRhaW5lciBjbG9zZXMgdGhlIGNvbnRhaW5lciwgZXZlbiB3aGVuIGl0IGZhaWxzICovCi0gICAgICBpbm5lcl9pdGVyX29wZW4gPSBGQUxTRTsKLQotICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcnJfaXRlciwgJmlubmVyX2l0ZXIpKQotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICB9Ci0KLSAgLyogY2xvc2VfY29udGFpbmVyIGNsb3NlcyB0aGUgY29udGFpbmVyLCBldmVuIHdoZW4gaXQgZmFpbHMgKi8KLSAgYXJyX2l0ZXJfb3BlbiA9IEZBTFNFOwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwgJmFycl9pdGVyKSkKLSAgICBnb3RvIG91dDsKLQotb3V0OgotICBpZiAoaW5uZXJfaXRlcl9vcGVuKQotICAgIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyICgmYXJyX2l0ZXIsICZpbm5lcl9pdGVyKTsKLQotICBpZiAoYXJyX2l0ZXJfb3BlbikKLSAgICBkYnVzX21lc3NhZ2VfaXRlcl9hYmFuZG9uX2NvbnRhaW5lciAoJml0ZXIsICZhcnJfaXRlcik7Ci0KLSAgaWYgKG0gIT0gTlVMTCkKLSAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIGRidXNfc2h1dGRvd24gKCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCksID09LCAwKTsKLQotICByZXR1cm4gIWdfdGVzdF9mYWlsZWQgKCk7Ci19Ci0KLS8qIFJldHVybiBUUlVFIGlmIHRoZSByaWdodCB0aGluZyBoYXBwZW5zLCBidXQgdGhlIHJpZ2h0IHRoaW5nIG1pZ2h0IGluY2x1ZGUKLSAqIE9PTSBvciBpbmFiaWxpdHkgdG8gcGFzcyBmZHMuICovCi1zdGF0aWMgZGJ1c19ib29sX3QKLXRlc3RfZmQgKHZvaWQgKmlnbm9yZWQpCi17Ci0gIERCdXNNZXNzYWdlICptID0gTlVMTDsKLSAgREJ1c1BpcGUgcGlwZTsKLQotICBfZGJ1c19waXBlX2luaXRfc3Rkb3V0ICgmcGlwZSk7Ci0KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiLyIsICJhLmIiLCAiYyIpOwotCi0gIGlmIChtID09IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVU5JWF9GRCwgJnBpcGUuZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpCi0gICAgZ290byBvdXQ7Ci0KLW91dDoKLSAgaWYgKG0gIT0gTlVMTCkKLSAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIGRidXNfc2h1dGRvd24gKCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCksID09LCAwKTsKLQotICByZXR1cm4gIWdfdGVzdF9mYWlsZWQgKCk7Ci19Ci0KLS8qIFNpbWlsYXIgdG8gdGVzdF9hcnJheSgpLCBidXQgbWFraW5nIHVzZSBvZgotICogZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbigpLgotICoKLSAqIFJldHVybiBUUlVFIGlmIHRoZSByaWdodCB0aGluZyBoYXBwZW5zLCBidXQgdGhlIHJpZ2h0IHRoaW5nIG1pZ2h0IGluY2x1ZGUKLSAqIE9PTS4gKi8KLXN0YXRpYyBkYnVzX2Jvb2xfdAotdGVzdF96ZXJvX2l0ZXIgKHZvaWQgKmlnbm9yZWQpCi17Ci0gIERCdXNNZXNzYWdlICptOwotICBEQnVzTWVzc2FnZUl0ZXIgaXRlciA9IERCVVNfTUVTU0FHRV9JVEVSX0lOSVRfQ0xPU0VEOwotICBEQnVzTWVzc2FnZUl0ZXIgYXJyX2l0ZXIgPSBEQlVTX01FU1NBR0VfSVRFUl9JTklUX0NMT1NFRDsKLSAgREJ1c01lc3NhZ2VJdGVyIGlubmVyX2l0ZXI7Ci0gIGRidXNfaW50MzJfdCBmb3J0eXR3byA9IDQyOwotICBkYnVzX2Jvb2xfdCBtZXNzYWdlX3Nob3VsZF9iZV9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIC8qIFRoaXMgb25lIHdhcyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGp1c3Qgc28gd2UgY291bGQgZXhlcmNpc2UgdGhpcwotICAgKiBmdW5jdGlvbiAqLwotICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2Nsb3NlZCAoJmlubmVyX2l0ZXIpOwotCi0gIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi8iLCAiYS5iIiwgImMiKTsKLQotICBpZiAobSA9PSBOVUxMKQotICAgIGdvdG8gb3V0OwotCi0gIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kIChtLCAmaXRlcik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJml0ZXIsIERCVVNfVFlQRV9BUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFpIiwgJmFycl9pdGVyKSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoIWRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmYXJyX2l0ZXIsIERCVVNfVFlQRV9BUlJBWSwgImkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5uZXJfaXRlcikpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZpbm5lcl9pdGVyLCBEQlVTX1RZUEVfSU5UMzIsICZmb3J0eXR3bykpCi0gICAgZ290byBvdXQ7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcnJfaXRlciwgJmlubmVyX2l0ZXIpKQotICAgIGdvdG8gb3V0OwotCi0gIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwgJmFycl9pdGVyKSkKLSAgICBnb3RvIG91dDsKLQotICBtZXNzYWdlX3Nob3VsZF9iZV9jb21wbGV0ZSA9IFRSVUU7Ci0KLW91dDoKLSAgZGJ1c19tZXNzYWdlX2l0ZXJfYWJhbmRvbl9jb250YWluZXJfaWZfb3BlbiAoJmFycl9pdGVyLCAmaW5uZXJfaXRlcik7Ci0gIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyX2lmX29wZW4gKCZpdGVyLCAmYXJyX2l0ZXIpOwotICAvKiBSZWR1bmRhbnQgY2FsbHMgYXJlIE9LICovCi0gIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyX2lmX29wZW4gKCZpdGVyLCAmYXJyX2l0ZXIpOwotCi0gIC8qIGRidXNfbWVzc2FnZV9pdGVyX2FiYW5kb25fY29udGFpbmVyX2lmX29wZW4gZG9lcyBub3QgbGVhdmUgdGhlIG1lc3NhZ2UKLSAgICogaW4gd2hhdCBzZWVtcyB0byBiZSBjb25zaXN0ZW50bHkgZG9jdW1lbnRlZCBhcyBhICJob3NlZCIgc3RhdGUgKi8KLSAgaWYgKG1lc3NhZ2Vfc2hvdWxkX2JlX2NvbXBsZXRlKQotICAgIHsKLSAgICAgIERCdXNCYXNpY1ZhbHVlIHJlYWRfYmFjazsKLQotICAgICAgX0RCVVNfWkVSTyAocmVhZF9iYWNrKTsKLSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQgKG0sICZpdGVyKTsKLSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UgKCZpdGVyLCAmYXJyX2l0ZXIpOwotICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSAoJmFycl9pdGVyLCAmaW5uZXJfaXRlcik7Ci0gICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKCZpbm5lcl9pdGVyLCAmcmVhZF9iYWNrKTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAocmVhZF9iYWNrLmkzMiwgPT0sIDQyKTsKLSAgICB9Ci0KLSAgaWYgKG0gIT0gTlVMTCkKLSAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIGRidXNfc2h1dGRvd24gKCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoX2RidXNfZ2V0X21hbGxvY19ibG9ja3Nfb3V0c3RhbmRpbmcgKCksID09LCAwKTsKLQotICByZXR1cm4gIWdfdGVzdF9mYWlsZWQgKCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBEQnVzVGVzdE1lbW9yeUZ1bmN0aW9uIGZ1bmN0aW9uOwotICBjb25zdCB2b2lkICpkYXRhOwotfSBPT01UZXN0Q2FzZTsKLQotc3RhdGljIHZvaWQKLXRlc3Rfb29tX3dyYXBwZXIgKGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgY29uc3QgT09NVGVzdENhc2UgKnRlc3QgPSBkYXRhOwotCi0gIGlmICghX2RidXNfdGVzdF9vb21faGFuZGxpbmcgKHRlc3QtPm5hbWUsIHRlc3QtPmZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSB0ZXN0LT5kYXRhKSkKLSAgICB7Ci0gICAgICBnX3Rlc3RfbWVzc2FnZSAoIk9PTSB0ZXN0IGZhaWxlZCIpOwotICAgICAgZ190ZXN0X2ZhaWwgKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgR1F1ZXVlICp0ZXN0X2Nhc2VzX3RvX2ZyZWUgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotYWRkX29vbV90ZXN0IChjb25zdCBnY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgREJ1c1Rlc3RNZW1vcnlGdW5jdGlvbiBmdW5jdGlvbiwKLSAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgLyogQnkgdXNpbmcgR0xpYiBtZW1vcnkgYWxsb2NhdGlvbiBoZXJlLCB3ZSBhdm9pZCBiZWluZyBhZmZlY3RlZCBieQotICAgKiBkYnVzX3NodXRkb3duKCkgb3IgY29udHJpYnV0aW5nIHRvCi0gICAqIF9kYnVzX2dldF9tYWxsb2NfYmxvY2tzX291dHN0YW5kaW5nKCkgKi8KLSAgT09NVGVzdENhc2UgKnRlc3RfY2FzZSA9IGdfbmV3MCAoT09NVGVzdENhc2UsIDEpOwotCi0gIHRlc3RfY2FzZS0+bmFtZSA9IG5hbWU7Ci0gIHRlc3RfY2FzZS0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKLSAgdGVzdF9jYXNlLT5kYXRhID0gZGF0YTsKLSAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMgKG5hbWUsIHRlc3RfY2FzZSwgdGVzdF9vb21fd3JhcHBlcik7Ci0gIGdfcXVldWVfcHVzaF90YWlsICh0ZXN0X2Nhc2VzX3RvX2ZyZWUsIHRlc3RfY2FzZSk7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsCi0gICAgICBjaGFyICoqYXJndikKLXsKLSAgaW50IHJldDsKLQotICB0ZXN0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgdGVzdF9jYXNlc190b19mcmVlID0gZ19xdWV1ZV9uZXcgKCk7Ci0gIGFkZF9vb21fdGVzdCAoIi9tZXNzYWdlL2FycmF5L2FycmF5IiwgdGVzdF9hcnJheSwgImFpIik7Ci0gIGFkZF9vb21fdGVzdCAoIi9tZXNzYWdlL2FycmF5L2RpY3QiLCB0ZXN0X2FycmF5LCAie3NzfSIpOwotICBhZGRfb29tX3Rlc3QgKCIvbWVzc2FnZS9hcnJheS92YXJpYW50IiwgdGVzdF9hcnJheSwgInYiKTsKLSAgYWRkX29vbV90ZXN0ICgiL21lc3NhZ2UvZmQiLCB0ZXN0X2ZkLCBOVUxMKTsKLSAgYWRkX29vbV90ZXN0ICgiL21lc3NhZ2UvemVyby1pdGVyIiwgdGVzdF96ZXJvX2l0ZXIsIE5VTEwpOwotCi0gIHJldCA9IGdfdGVzdF9ydW4gKCk7Ci0KLSAgZ19xdWV1ZV9mcmVlX2Z1bGwgKHRlc3RfY2FzZXNfdG9fZnJlZSwgZ19mcmVlKTsKLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3QvbW9uaXRvci5jIGIvdGVzdC9tb25pdG9yLmMKaW5kZXggZGY1YTcxOC4uYWQ0YjE5NSAxMDA2NDQKLS0tIGEvdGVzdC9tb25pdG9yLmMKKysrIGIvdGVzdC9tb25pdG9yLmMKQEAgLTQ4LDEwICs0OCw4IEBACiAgICAgREJ1c0Nvbm5lY3Rpb24gKm1vbml0b3I7CiAgICAgREJ1c0Nvbm5lY3Rpb24gKnNlbmRlcjsKICAgICBEQnVzQ29ubmVjdGlvbiAqcmVjaXBpZW50OwotICAgIGdib29sZWFuIHJlY2lwaWVudF9lbnF1ZXVlX2ZpbHRlcl9hZGRlZDsKIAogICAgIEdRdWV1ZSBtb25pdG9yZWQ7Ci0gICAgR1F1ZXVlIHJlY2VpdmVkOwogCiAgICAgY29uc3QgY2hhciAqbW9uaXRvcl9uYW1lOwogICAgIGNvbnN0IGNoYXIgKnNlbmRlcl9uYW1lOwpAQCAtOTQsMTEgKzkyLDYgQEAKICAgICBGQUxTRQogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3ZWxsX2tub3duX2Rlc3RpbmF0aW9uX21hdGNoX3J1bGVzW10gPSB7Ci0gICAgImRlc3RpbmF0aW9uPSdjb20uZXhhbXBsZS5SZWNpcGllbnQnIiwKLSAgICBOVUxMCi19OwotCiBzdGF0aWMgQ29uZmlnIGZvcmJpZGRpbmdfY29uZmlnID0gewogICAgICJ2YWxpZC1jb25maWctZmlsZXMvZm9yYmlkZGluZy5jb25mIiwKICAgICBOVUxMLApAQCAtMTE3LDEyICsxMTAsNiBAQAogICAgIEZBTFNFCiB9OwogCi1zdGF0aWMgQ29uZmlnIHdlbGxfa25vd25fZGVzdGluYXRpb25fY29uZmlnID0gewotICAgIE5VTEwsCi0gICAgd2VsbF9rbm93bl9kZXN0aW5hdGlvbl9tYXRjaF9ydWxlcywKLSAgICBGQUxTRQotfTsKLQogc3RhdGljIENvbmZpZyBub19ydWxlc19jb25maWcgPSB7CiAgICAgTlVMTCwKICAgICBub19tYXRjaF9ydWxlcywKQEAgLTM3Myw3ICszNjAsNyBAQAogfQogCiBzdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQKLXJlY2lwaWVudF9jaGVja19maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAorcmVjaXBpZW50X2ZpbHRlciAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCiAgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCiAgICAgdm9pZCAqdXNlcl9kYXRhKQogewpAQCAtMzg2LDI3ICszNzMsNiBAQAogfQogCiBzdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQKLXJlY2lwaWVudF9lbnF1ZXVlX2ZpbHRlciAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCi0gICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgdm9pZCAqdXNlcl9kYXRhKQotewotICBGaXh0dXJlICpmID0gdXNlcl9kYXRhOwotCi0gIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9EQlVTLAotICAgICAgICAiTmFtZUFjcXVpcmVkIikgfHwKLSAgICAgIGRidXNfbWVzc2FnZV9pc19zaWduYWwgKG1lc3NhZ2UsIERCVVNfSU5URVJGQUNFX0RCVVMsCi0gICAgICAgICJOYW1lTG9zdCIpIHx8Ci0gICAgICBkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9EQlVTLAotICAgICAgICAiTmFtZU93bmVyQ2hhbmdlZCIpKQotICAgIHsKLSAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKLSAgICB9Ci0KLSAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZmLT5yZWNlaXZlZCwgZGJ1c19tZXNzYWdlX3JlZiAobWVzc2FnZSkpOwotICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBEQnVzSGFuZGxlclJlc3VsdAogc3lzdGVtZF9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAogICAgIERCdXNNZXNzYWdlICptZXNzYWdlLAogICAgIHZvaWQgKnVzZXJfZGF0YSkKQEAgLTQ0OSwxOSArNDE1LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXRha2Vfd2VsbF9rbm93bl9uYW1lIChGaXh0dXJlICpmLAotICAgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAotICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIGludCByZXQ7Ci0KLSAgcmV0ID0gZGJ1c19idXNfcmVxdWVzdF9uYW1lIChjb25uZWN0aW9uLCBuYW1lLAotICAgICAgREJVU19OQU1FX0ZMQUdfRE9fTk9UX1FVRVVFLCAmZi0+ZSk7Ci0gIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAocmV0LCA9PSwgREJVU19SRVFVRVNUX05BTUVfUkVQTFlfUFJJTUFSWV9PV05FUik7Ci19Ci0KLXN0YXRpYyB2b2lkCiBzZXR1cCAoRml4dHVyZSAqZiwKICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCiB7CkBAIC00NzMsNyArNDI2LDcgQEAKICAgZGJ1c19lcnJvcl9pbml0ICgmZi0+ZSk7CiAKICAgZi0+YWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uIChmLT5jb25maWcgPyBmLT5jb25maWctPmNvbmZpZ19maWxlIDogTlVMTCwKLSAgICAgIFRFU1RfVVNFUl9NRSwgTlVMTCwgJmYtPmRhZW1vbl9waWQpOworICAgICAgVEVTVF9VU0VSX01FLCAmZi0+ZGFlbW9uX3BpZCk7CiAKICAgaWYgKGYtPmFkZHJlc3MgPT0gTlVMTCkKICAgICByZXR1cm47CkBAIC00ODgsMTQgKzQ0MSwxMiBAQAogICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5tb25pdG9yLCBtb25pdG9yX2ZpbHRlciwgZiwgTlVMTCkpCiAgICAgZ19lcnJvciAoIk9PTSIpOwogCi0gIGlmICghZGJ1c19jb25uZWN0aW9uX2FkZF9maWx0ZXIgKGYtPnJlY2lwaWVudCwgcmVjaXBpZW50X2NoZWNrX2ZpbHRlciwKLSAgICAgICAgZiwgTlVMTCkpCisgIGlmICghZGJ1c19jb25uZWN0aW9uX2FkZF9maWx0ZXIgKGYtPnJlY2lwaWVudCwgcmVjaXBpZW50X2ZpbHRlciwgZiwgTlVMTCkpCiAgICAgZ19lcnJvciAoIk9PTSIpOwogfQogCiBzdGF0aWMgdm9pZAotYmVjb21lX21vbml0b3IgKEZpeHR1cmUgKmYsCi0gICAgY29uc3QgQ29uZmlnICpjb25maWcpCitiZWNvbWVfbW9uaXRvciAoRml4dHVyZSAqZikKIHsKICAgREJ1c01lc3NhZ2UgKm07CiAgIERCdXNQZW5kaW5nQ2FsbCAqcGM7CkBAIC01MDcsMTEgKzQ1OCw4IEBACiAKICAgZGJ1c19jb25uZWN0aW9uX3NldF9yb3V0ZV9wZWVyX21lc3NhZ2VzIChmLT5tb25pdG9yLCBUUlVFKTsKIAotICBpZiAoY29uZmlnID09IE5VTEwpCi0gICAgY29uZmlnID0gZi0+Y29uZmlnOwotCi0gIGlmIChjb25maWcgIT0gTlVMTCAmJiBjb25maWctPm1hdGNoX3J1bGVzICE9IE5VTEwpCi0gICAgbWF0Y2hfcnVsZXMgPSBjb25maWctPm1hdGNoX3J1bGVzOworICBpZiAoZi0+Y29uZmlnICE9IE5VTEwgJiYgZi0+Y29uZmlnLT5tYXRjaF9ydWxlcyAhPSBOVUxMKQorICAgIG1hdGNoX3J1bGVzID0gZi0+Y29uZmlnLT5tYXRjaF9ydWxlczsKICAgZWxzZQogICAgIG1hdGNoX3J1bGVzID0gd2lsZGNhcmRfbWF0Y2hfcnVsZXM7CiAKQEAgLTYyNSw0OSArNTczLDYgQEAKICAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKG0pLCA9PSwKICAgICAgIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTKTsKIAotICAvKiBUcnkgdG8gYmVjb21lIGEgbW9uaXRvciBidXQgdXNlIHRoZSB3cm9uZyBvYmplY3QgcGF0aCAtIG5vdCBhbGxvd2VkCi0gICAqIChzZWN1cml0eSBoYXJkZW5pbmcgYWdhaW5zdCBpbmFwcHJvcHJpYXRlIFhNTCBwb2xpY3kgcnVsZXMpICovCi0KLSAgZGJ1c19wZW5kaW5nX2NhbGxfdW5yZWYgKHBjKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsCi0gICAgICAiLyIsIERCVVNfSU5URVJGQUNFX01PTklUT1JJTkcsICJCZWNvbWVNb25pdG9yIik7Ci0KLSAgaWYgKG0gPT0gTlVMTCkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKG0sICZhcHBlbmRlcik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJmFwcGVuZGVyLCBEQlVTX1RZUEVfQVJSQVksICJzIiwKLSAgICAgICAgJmFycmF5X2FwcGVuZGVyKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKCZhcHBlbmRlciwgJmFycmF5X2FwcGVuZGVyKSB8fAotICAgICAgIWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJmFwcGVuZGVyLCBEQlVTX1RZUEVfVUlOVDMyLCAmemVybykpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGlmICghZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseSAoZi0+bW9uaXRvciwgbSwgJnBjLAotICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8Ci0gICAgICBwYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICBtID0gTlVMTDsKLQotICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAmbSwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIHdoaWxlIChtID09IE5VTEwpCi0gICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKLQotICBnX2Fzc2VydF9jbXBpbnQgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSAobSksID09LCBEQlVTX01FU1NBR0VfVFlQRV9FUlJPUik7Ci0gIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19tZXNzYWdlX2dldF9lcnJvcl9uYW1lIChtKSwgPT0sCi0gICAgICBEQlVTX0VSUk9SX1VOS05PV05fSU5URVJGQUNFKTsKLQogICAvKiBUcnkgdG8gYmVjb21lIGEgbW9uaXRvciBidXQgc3BlY2lmeSBhIGJhZCBtYXRjaCBydWxlIC0KICAgICogYWxzbyBub3QgYWxsb3dlZCAqLwogCkBAIC03NDUsOSArNjUwLDYgQEAKICAgd2hpbGUgKG0gPT0gTlVMTCkKICAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwogCi0gIGlmIChkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZmLT5lLCBtKSkKLSAgICBnX2Vycm9yICgiJXM6ICVzIiwgZi0+ZS5uYW1lLCBmLT5lLm1lc3NhZ2UpOwotCiAgIG9rID0gZGJ1c19tZXNzYWdlX2dldF9hcmdzIChtLCAmZi0+ZSwKICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZzLAogICAgICAgREJVU19UWVBFX0lOVkFMSUQpOwpAQCAtODQ0LDcgKzc0Niw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgYmVjb21lX21vbml0b3IgKGYsIE5VTEwpOworICBiZWNvbWVfbW9uaXRvciAoZik7CiAKICAgd2hpbGUgKCFsb3N0X3VuaXF1ZSB8fCAhbG9zdF9hIHx8ICFsb3N0X2IgfHwgIWxvc3RfYykKICAgICB7CkBAIC05NDYsNyArODQ4LDcgQEAKICAgZGJ1c19idXNfYWRkX21hdGNoIChmLT5yZWNpcGllbnQsICJ0eXBlPSdzaWduYWwnIiwgJmYtPmUpOwogICB0ZXN0X2Fzc2VydF9ub19lcnJvciAoJmYtPmUpOwogCi0gIGJlY29tZV9tb25pdG9yIChmLCBOVUxMKTsKKyAgYmVjb21lX21vbml0b3IgKGYpOwogCiAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwgIkJyb2FkY2FzdFNpZ25hbDEiKTsKICAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7CkBAIC05OTQsMTIgKzg5Niw3IEBACiAgIGRidXNfYnVzX2FkZF9tYXRjaCAoZi0+cmVjaXBpZW50LCAidHlwZT0nc2lnbmFsJyIsICZmLT5lKTsKICAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZmLT5lKTsKIAotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5yZWNpcGllbnQsIHJlY2lwaWVudF9lbnF1ZXVlX2ZpbHRlciwKLSAgICAgICAgZiwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBmLT5yZWNpcGllbnRfZW5xdWV1ZV9maWx0ZXJfYWRkZWQgPSBUUlVFOwotCi0gIGJlY29tZV9tb25pdG9yIChmLCBOVUxMKTsKKyAgYmVjb21lX21vbml0b3IgKGYpOwogCiAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9mb28iLCAiY29tLmV4YW1wbGUuQ2Fubm90U2VuZCIsCiAgICAgICAiQnJvYWRjYXN0U2lnbmFsMSIpOwpAQCAtMTAxNiwyOCArOTEzLDcgQEAKICAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7CiAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7CiAKLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdCIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdEJyb2FkY2FzdDIiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdDIiKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgLyogdGhlc2UgdHdvIHdpbGwgZ28gdGhyb3VnaDogd2UgdXNlIHRoZW0gYXMgYW4gaW5kaXJlY3Qgd2F5IHRvIGFzc2VydCB0aGF0Ci0gICAqIHRoZSByZWNpcGllbnQgaGFzIG5vdCByZWNlaXZlZCBhbnl0aGluZyBlYXJsaWVyICovCi0gIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9mb28iLCAiY29tLmV4YW1wbGUuQ2Fubm90VW5pY2FzdCIsCi0gICAgICAiQ2Fubm90VW5pY2FzdCIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0MiIsCi0gICAgICAiQ2Fubm90VW5pY2FzdDIiKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPm1vbml0b3JlZCkgPCAxMikKKyAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPm1vbml0b3JlZCkgPCA2KQogICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7CiAKICAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5tb25pdG9yZWQpOwpAQCAtMTA3MSw1NSArOTQ3LDYgQEAKICAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKIAogICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdCIsICIiLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9lcnJvcl9yZXBseSAobSwgREJVU19TRVJWSUNFX0RCVVMsIGYtPnNlbmRlcl9uYW1lLAotICAgICAgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVEKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QyIiwKLSAgICAgICJDYW5ub3RCcm9hZGNhc3QyIiwgIiIsIE5VTEwpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X2Vycm9yX3JlcGx5IChtLCBEQlVTX1NFUlZJQ0VfREJVUywgZi0+c2VuZGVyX25hbWUsCi0gICAgICBEQlVTX0VSUk9SX0FDQ0VTU19ERU5JRUQpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X3NpZ25hbCAobSwgZi0+c2VuZGVyX25hbWUsICIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdFVuaWNhc3QiLAotICAgICAgIkNhbm5vdFVuaWNhc3QiLCAiIiwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5tb25pdG9yZWQpOwotICBhc3NlcnRfc2lnbmFsIChtLCBmLT5zZW5kZXJfbmFtZSwgIi9mb28iLCAiY29tLmV4YW1wbGUuQ2Fubm90VW5pY2FzdDIiLAotICAgICAgIkNhbm5vdFVuaWNhc3QyIiwgIiIsIE5VTEwpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgZ19hc3NlcnQgKG0gPT0gTlVMTCk7Ci0KLSAgLyogdGhlIGludGVuZGVkIHJlY2lwaWVudCBvbmx5IHJlY2VpdmVkIHRoZSBvbmVzIHRoYXQgd2VyZSBvbiB0aGUgaW50ZXJmYWNlCi0gICAqIHdoZXJlIGJyb2FkY2FzdHMgYXJlIGFsbG93ZWQgKi8KLQotICB3aGlsZSAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmZi0+cmVjZWl2ZWQpIDwgMikKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+cmVjZWl2ZWQpOwotICBhc3NlcnRfc2lnbmFsIChtLCBmLT5zZW5kZXJfbmFtZSwgIi9mb28iLCAiY29tLmV4YW1wbGUuQ2Fubm90VW5pY2FzdCIsCi0gICAgICAiQ2Fubm90VW5pY2FzdCIsICIiLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPnJlY2VpdmVkKTsKLSAgYXNzZXJ0X3NpZ25hbCAobSwgZi0+c2VuZGVyX25hbWUsICIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdFVuaWNhc3QyIiwKLSAgICAgICJDYW5ub3RVbmljYXN0MiIsICIiLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPnJlY2VpdmVkKTsKICAgZ19hc3NlcnQgKG0gPT0gTlVMTCk7CiB9CiAKQEAgLTExMzIsNyArOTU5LDcgQEAKICAgaWYgKGYtPmFkZHJlc3MgPT0gTlVMTCkKICAgICByZXR1cm47CiAKLSAgYmVjb21lX21vbml0b3IgKGYsIE5VTEwpOworICBiZWNvbWVfbW9uaXRvciAoZik7CiAKICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiVW5pY2FzdFNpZ25hbDEiKTsKICAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChtLCBmLT5yZWNpcGllbnRfbmFtZSkpCkBAIC0xMTgzLDEyICsxMDEwLDcgQEAKICAgaWYgKGYtPmFkZHJlc3MgPT0gTlVMTCkKICAgICByZXR1cm47CiAKLSAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlciAoZi0+cmVjaXBpZW50LCByZWNpcGllbnRfZW5xdWV1ZV9maWx0ZXIsCi0gICAgICAgIGYsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZi0+cmVjaXBpZW50X2VucXVldWVfZmlsdGVyX2FkZGVkID0gVFJVRTsKLQotICBiZWNvbWVfbW9uaXRvciAoZiwgTlVMTCk7CisgIGJlY29tZV9tb25pdG9yIChmKTsKIAogICBtID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdFNlbmQiLAogICAgICAgIlVuaWNhc3RTaWduYWwxIik7CkBAIC0xMjExLDM2ICsxMDMzLDcgQEAKICAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7CiAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7CiAKLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0IiwKLSAgICAgICJDYW5ub3RVbmljYXN0Iik7Ci0gIGlmICghZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAobSwgZi0+cmVjaXBpZW50X25hbWUpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0MiIsCi0gICAgICAiQ2Fubm90VW5pY2FzdDIiKTsKLSAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChtLCBmLT5yZWNpcGllbnRfbmFtZSkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICAvKiB0aGVzZSB0d28gd2lsbCBnbyB0aHJvdWdoOiB3ZSB1c2UgdGhlbSBhcyBhbiBpbmRpcmVjdCB3YXkgdG8gYXNzZXJ0IHRoYXQKLSAgICogdGhlIHJlY2lwaWVudCBoYXMgbm90IHJlY2VpdmVkIGFueXRoaW5nIGVhcmxpZXIgKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdCIpOwotICBpZiAoIWRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24gKG0sIGYtPnJlY2lwaWVudF9uYW1lKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0gIGRidXNfY29ubmVjdGlvbl9zZW5kIChmLT5zZW5kZXIsIG0sIE5VTEwpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICBtID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdEJyb2FkY2FzdDIiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdDIiKTsKLSAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChtLCBmLT5yZWNpcGllbnRfbmFtZSkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICB3aGlsZSAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmZi0+bW9uaXRvcmVkKSA8IDEyKQorICB3aGlsZSAoZ19xdWV1ZV9nZXRfbGVuZ3RoICgmZi0+bW9uaXRvcmVkKSA8IDYpCiAgICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKIAogICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7CkBAIC0xMjc0LDU1ICsxMDY3LDYgQEAKICAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKIAogICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0IiwKLSAgICAgICJDYW5ub3RVbmljYXN0IiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9lcnJvcl9yZXBseSAobSwgREJVU19TRVJWSUNFX0RCVVMsIGYtPnNlbmRlcl9uYW1lLAotICAgICAgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVEKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RVbmljYXN0MiIsCi0gICAgICAiQ2Fubm90VW5pY2FzdDIiLCAiIiwgZi0+cmVjaXBpZW50X25hbWUpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X2Vycm9yX3JlcGx5IChtLCBEQlVTX1NFUlZJQ0VfREJVUywgZi0+c2VuZGVyX25hbWUsCi0gICAgICBEQlVTX0VSUk9SX0FDQ0VTU19ERU5JRUQpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X3NpZ25hbCAobSwgZi0+c2VuZGVyX25hbWUsICIvZm9vIiwgImNvbS5leGFtcGxlLkNhbm5vdEJyb2FkY2FzdCIsCi0gICAgICAiQ2Fubm90QnJvYWRjYXN0IiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QyIiwKLSAgICAgICJDYW5ub3RCcm9hZGNhc3QyIiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGdfYXNzZXJ0IChtID09IE5VTEwpOwotCi0gIC8qIHRoZSBpbnRlbmRlZCByZWNpcGllbnQgb25seSByZWNlaXZlZCB0aGUgb25lcyB0aGF0IHdlcmUgb24gdGhlIGludGVyZmFjZQotICAgKiB3aGVyZSB1bmljYXN0cyBhcmUgYWxsb3dlZCAqLwotCi0gIHdoaWxlIChnX3F1ZXVlX2dldF9sZW5ndGggKCZmLT5yZWNlaXZlZCkgPCAyKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5yZWNlaXZlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QiLAotICAgICAgIkNhbm5vdEJyb2FkY2FzdCIsICIiLCBmLT5yZWNpcGllbnRfbmFtZSk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5yZWNlaXZlZCk7Ci0gIGFzc2VydF9zaWduYWwgKG0sIGYtPnNlbmRlcl9uYW1lLCAiL2ZvbyIsICJjb20uZXhhbXBsZS5DYW5ub3RCcm9hZGNhc3QyIiwKLSAgICAgICJDYW5ub3RCcm9hZGNhc3QyIiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPnJlY2VpdmVkKTsKICAgZ19hc3NlcnQgKG0gPT0gTlVMTCk7CiB9CiAKQEAgLTEzMzUsNyArMTA3OSw3IEBACiAgIGlmIChmLT5hZGRyZXNzID09IE5VTEwpCiAgICAgcmV0dXJuOwogCi0gIGJlY29tZV9tb25pdG9yIChmLCBOVUxMKTsKKyAgYmVjb21lX21vbml0b3IgKGYpOwogCiAgIC8qIHJlZ3Jlc3Npb24gdGVzdCBmb3IKICAgICogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5NTIgKi8KQEAgLTEzOTAsNyArMTEzNCw3IEBACiAgIGlmIChmLT5hZGRyZXNzID09IE5VTEwpCiAgICAgcmV0dXJuOwogCi0gIGJlY29tZV9tb25pdG9yIChmLCBOVUxMKTsKKyAgYmVjb21lX21vbml0b3IgKGYpOwogCiAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChmLT5yZWNpcGllbnRfbmFtZSwgIi9mb28iLAogICAgICAgImNvbS5leGFtcGxlLkNhbm5vdFNlbmQiLCAiQ2FsbDEiKTsKQEAgLTE0NDUsNyArMTE4OSw3IEBACiAgIGlmIChmLT5hZGRyZXNzID09IE5VTEwpCiAgICAgcmV0dXJuOwogCi0gIGJlY29tZV9tb25pdG9yIChmLCBOVUxMKTsKKyAgYmVjb21lX21vbml0b3IgKGYpOwogCiAgIHJlcyA9IGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoZi0+c2VuZGVyLCAiY29tLmV4YW1wbGUuU2VuZGVyIiwKICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSwgJmYtPmUpOwpAQCAtMTUyMiw3ICsxMjY2LDcgQEAKICAgICAgICJlYXZlc2Ryb3A9J3RydWUnLGludGVyZmFjZT0nY29tLmV4YW1wbGUuVGVkaW91cyciLCAmZi0+ZSk7CiAgIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7CiAKLSAgYmVjb21lX21vbml0b3IgKGYsIE5VTEwpOworICBiZWNvbWVfbW9uaXRvciAoZik7CiAKICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5JbnRlcmVzdGluZyIsCiAgICAgICAiVW5pY2FzdFNpZ25hbDEiKTsKQEAgLTE1NjUsMTI5ICsxMzA5LDYgQEAKICAgZ19hc3NlcnQgKG0gPT0gTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkCi10ZXN0X3dlbGxfa25vd25fZGVzdGluYXRpb24gKEZpeHR1cmUgKmYsCi0gICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbTsKLQotICBpZiAoZi0+YWRkcmVzcyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICB0YWtlX3dlbGxfa25vd25fbmFtZSAoZiwgZi0+cmVjaXBpZW50LCAiY29tLmV4YW1wbGUuUmVjaXBpZW50Iik7Ci0gIC8qIHdlIGRvbid0IGV4cGVjdF90YWtlX3dlbGxfa25vd25fbmFtZSBoZXJlIGJlY2F1c2UgdGhlCi0gICAqIG1vbml0b3IgaXNuJ3QgdXAgeWV0ICovCi0KLSAgYmVjb21lX21vbml0b3IgKGYsIE5VTEwpOwotCi0gIC8qIFRoZSBzZW5kZXIgc2VuZHMgYSBtZXNzYWdlIHRvIGl0c2VsZi4gSXQgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuICovCi0gIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwgIlVub2JzZXJ2ZWQiKTsKLSAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChtLCBmLT5zZW5kZXJfbmFtZSkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICAvKiBUaGUgc2VuZGVyIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgcmVjaXBpZW50IGJ5IHdlbGwta25vd24gbmFtZS4KLSAgICogSXQgd2lsbCBiZSBvYnNlcnZlZC4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiT2JzZXJ2ZWQxIik7Ci0gIGlmICghZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAobSwgImNvbS5leGFtcGxlLlJlY2lwaWVudCIpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgLyogVGhlIHNlbmRlciBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIHJlY2lwaWVudCBieSB1bmlxdWUgbmFtZS4KLSAgICogSXQgd2lsbCBzdGlsbCBiZSBvYnNlcnZlZC4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiT2JzZXJ2ZWQyIik7Ci0gIGlmICghZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAobSwgZi0+cmVjaXBpZW50X25hbWUpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPm1vbml0b3JlZCkgPCAyKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5tb25pdG9yZWQpOwotICBhc3NlcnRfc2lnbmFsIChtLCBmLT5zZW5kZXJfbmFtZSwgIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwKLSAgICAgICJPYnNlcnZlZDEiLCAiIiwgImNvbS5leGFtcGxlLlJlY2lwaWVudCIpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X3NpZ25hbCAobSwgZi0+c2VuZGVyX25hbWUsICIvZm9vIiwgImNvbS5leGFtcGxlLmJhciIsCi0gICAgICAiT2JzZXJ2ZWQyIiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGdfYXNzZXJ0IChtID09IE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF91bmlxdWVfZGVzdGluYXRpb24gKEZpeHR1cmUgKmYsCi0gICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQotewotICBEQnVzTWVzc2FnZSAqbTsKLSAgQ29uZmlnIGNvbmZpZyA9IHsKLSAgICBOVUxMLAotICAgIE5VTEwsIC8qIG1hdGNoIHJ1bGVzICovCi0gICAgRkFMU0UKLSAgfTsKLSAgY29uc3QgZ2NoYXIgKm1hdGNoX3J1bGVzWzJdID0geyBOVUxMLCBOVUxMIH07Ci0gIGdjaGFyICpydWxlOwotCi0gIGlmIChmLT5hZGRyZXNzID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIHRha2Vfd2VsbF9rbm93bl9uYW1lIChmLCBmLT5yZWNpcGllbnQsICJjb20uZXhhbXBsZS5SZWNpcGllbnQiKTsKLSAgLyogd2UgZG9uJ3QgZXhwZWN0X3Rha2Vfd2VsbF9rbm93bl9uYW1lIGhlcmUgYmVjYXVzZSB0aGUKLSAgICogbW9uaXRvciBpc24ndCB1cCB5ZXQgKi8KLQotICBydWxlID0gZ19zdHJkdXBfcHJpbnRmICgiZGVzdGluYXRpb249JyVzJyIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgLyogZnJlZSBpdCBsYXRlciAqLwotICBnX3Rlc3RfcXVldWVfZnJlZSAocnVsZSk7Ci0gIG1hdGNoX3J1bGVzWzBdID0gcnVsZTsKLSAgY29uZmlnLm1hdGNoX3J1bGVzID0gbWF0Y2hfcnVsZXM7Ci0KLSAgYmVjb21lX21vbml0b3IgKGYsICZjb25maWcpOwotCi0gIC8qIFRoZSBzZW5kZXIgc2VuZHMgYSBtZXNzYWdlIHRvIGl0c2VsZi4gSXQgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuICovCi0gIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCAoIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwgIlVub2JzZXJ2ZWQiKTsKLSAgaWYgKCFkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uIChtLCBmLT5zZW5kZXJfbmFtZSkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoZi0+c2VuZGVyLCBtLCBOVUxMKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICAvKiBUaGUgc2VuZGVyIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgcmVjaXBpZW50IGJ5IHdlbGwta25vd24gbmFtZS4KLSAgICogSXQgd2lsbCBiZSBvYnNlcnZlZC4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiT2JzZXJ2ZWQxIik7Ci0gIGlmICghZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAobSwgImNvbS5leGFtcGxlLlJlY2lwaWVudCIpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgLyogVGhlIHNlbmRlciBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIHJlY2lwaWVudCBieSB1bmlxdWUgbmFtZS4KLSAgICogSXQgd2lsbCBzdGlsbCBiZSBvYnNlcnZlZC4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsICgiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiT2JzZXJ2ZWQyIik7Ci0gIGlmICghZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbiAobSwgZi0+cmVjaXBpZW50X25hbWUpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGYtPnNlbmRlciwgbSwgTlVMTCk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0KLSAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJmYtPm1vbml0b3JlZCkgPCAyKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZmLT5tb25pdG9yZWQpOwotICBhc3NlcnRfc2lnbmFsIChtLCBmLT5zZW5kZXJfbmFtZSwgIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwKLSAgICAgICJPYnNlcnZlZDEiLCAiIiwgImNvbS5leGFtcGxlLlJlY2lwaWVudCIpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIG0gPSBnX3F1ZXVlX3BvcF9oZWFkICgmZi0+bW9uaXRvcmVkKTsKLSAgYXNzZXJ0X3NpZ25hbCAobSwgZi0+c2VuZGVyX25hbWUsICIvZm9vIiwgImNvbS5leGFtcGxlLmJhciIsCi0gICAgICAiT2JzZXJ2ZWQyIiwgIiIsIGYtPnJlY2lwaWVudF9uYW1lKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLQotICBtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmYtPm1vbml0b3JlZCk7Ci0gIGdfYXNzZXJ0IChtID09IE5VTEwpOwotfQotCiAjaWZkZWYgREJVU19VTklYCiAvKiBjdXJyZW50bHkgb25seSB1c2VkIGZvciB0aGUgc3lzdGVtZCBhY3RpdmF0aW9uIHRlc3QgKi8KIHN0YXRpYyB2b2lkCkBAIC0xNzE4LDYgKzEzMzksMjAgQEAKIAogLyogY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgdGhlIHN5c3RlbWQgYWN0aXZhdGlvbiB0ZXN0ICovCiBzdGF0aWMgdm9pZAordGFrZV93ZWxsX2tub3duX25hbWUgKEZpeHR1cmUgKmYsCisgICAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCisgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgaW50IHJldDsKKworICByZXQgPSBkYnVzX2J1c19yZXF1ZXN0X25hbWUgKGNvbm5lY3Rpb24sIG5hbWUsCisgICAgICBEQlVTX05BTUVfRkxBR19ET19OT1RfUVVFVUUsICZmLT5lKTsKKyAgdGVzdF9hc3NlcnRfbm9fZXJyb3IgKCZmLT5lKTsKKyAgZ19hc3NlcnRfY21waW50IChyZXQsID09LCBEQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9QUklNQVJZX09XTkVSKTsKK30KKworLyogY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgdGhlIHN5c3RlbWQgYWN0aXZhdGlvbiB0ZXN0ICovCitzdGF0aWMgdm9pZAogZXhwZWN0X3Rha2Vfd2VsbF9rbm93bl9uYW1lIChGaXh0dXJlICpmLAogICAgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAogICAgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xNzU3LDcgKzEzOTIsNyBAQAogICBpZiAoZi0+YWRkcmVzcyA9PSBOVUxMKQogICAgIHJldHVybjsKIAotICBiZWNvbWVfbW9uaXRvciAoZiwgTlVMTCk7CisgIGJlY29tZV9tb25pdG9yIChmKTsKIAogICAvKiBUaGUgc2VuZGVyIHNlbmRzIGEgbWVzc2FnZSB0byBhbiBhY3RpdmF0YWJsZSBzZXJ2aWNlLiAqLwogICBtID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKCIvZm9vIiwgImNvbS5leGFtcGxlLmJhciIsICJVbmljYXN0U2lnbmFsMSIpOwpAQCAtMTk3MiwxMCArMTYwNyw3IEBACiAKICAgaWYgKGYtPnJlY2lwaWVudCAhPSBOVUxMKQogICAgIHsKLSAgICAgIGRidXNfY29ubmVjdGlvbl9yZW1vdmVfZmlsdGVyIChmLT5yZWNpcGllbnQsIHJlY2lwaWVudF9jaGVja19maWx0ZXIsIGYpOwotICAgICAgaWYgKGYtPnJlY2lwaWVudF9lbnF1ZXVlX2ZpbHRlcl9hZGRlZCkKLSAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JlbW92ZV9maWx0ZXIgKGYtPnJlY2lwaWVudCwgcmVjaXBpZW50X2VucXVldWVfZmlsdGVyLAotICAgICAgICAgICAgZik7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+cmVjaXBpZW50LCByZWNpcGllbnRfZmlsdGVyLCBmKTsKICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+cmVjaXBpZW50KTsKICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZiAoZi0+cmVjaXBpZW50KTsKICAgICAgIGYtPnJlY2lwaWVudCA9IE5VTEw7CkBAIC0xOTk3LDIxICsxNjI5LDE0IEBACiAgICAgICBmLT5hY3RpdmF0ZWQgPSBOVUxMOwogICAgIH0KIAotICBpZiAoZi0+ZGFlbW9uX3BpZCAhPSAwKQotICAgIHsKLSAgICAgIHRlc3Rfa2lsbF9waWQgKGYtPmRhZW1vbl9waWQpOwotICAgICAgZ19zcGF3bl9jbG9zZV9waWQgKGYtPmRhZW1vbl9waWQpOwotICAgICAgZi0+ZGFlbW9uX3BpZCA9IDA7Ci0gICAgfQorICB0ZXN0X2tpbGxfcGlkIChmLT5kYWVtb25fcGlkKTsKKyAgZ19zcGF3bl9jbG9zZV9waWQgKGYtPmRhZW1vbl9waWQpOwogCiAgIHRlc3RfbWFpbl9jb250ZXh0X3VucmVmIChmLT5jdHgpOwogCiAgIGdfcXVldWVfZm9yZWFjaCAoJmYtPm1vbml0b3JlZCwgKEdGdW5jKSBkYnVzX21lc3NhZ2VfdW5yZWYsIE5VTEwpOwogICBnX3F1ZXVlX2NsZWFyICgmZi0+bW9uaXRvcmVkKTsKIAotICBnX3F1ZXVlX2ZvcmVhY2ggKCZmLT5yZWNlaXZlZCwgKEdGdW5jKSBkYnVzX21lc3NhZ2VfdW5yZWYsIE5VTEwpOwotICBnX3F1ZXVlX2NsZWFyICgmZi0+cmVjZWl2ZWQpOwotCiAgIGdfZnJlZSAoZi0+YWRkcmVzcyk7CiB9CiAKQEAgLTIwNDEsMTIgKzE2NjYsNiBAQAogICAgICAgc2V0dXAsIHRlc3RfZGJ1c19kYWVtb24sIHRlYXJkb3duKTsKICAgZ190ZXN0X2FkZCAoIi9tb25pdG9yL3NlbGVjdGl2ZSIsIEZpeHR1cmUsICZzZWxlY3RpdmVfY29uZmlnLAogICAgICAgc2V0dXAsIHRlc3Rfc2VsZWN0aXZlLCB0ZWFyZG93bik7Ci0gIGdfdGVzdF9hZGQgKCIvbW9uaXRvci93ZWxsLWtub3duLWRlc3RpbmF0aW9uIiwKLSAgICAgIEZpeHR1cmUsICZ3ZWxsX2tub3duX2Rlc3RpbmF0aW9uX2NvbmZpZywKLSAgICAgIHNldHVwLCB0ZXN0X3dlbGxfa25vd25fZGVzdGluYXRpb24sIHRlYXJkb3duKTsKLSAgZ190ZXN0X2FkZCAoIi9tb25pdG9yL3VuaXF1ZS1kZXN0aW5hdGlvbiIsCi0gICAgICBGaXh0dXJlLCBOVUxMLAotICAgICAgc2V0dXAsIHRlc3RfdW5pcXVlX2Rlc3RpbmF0aW9uLCB0ZWFyZG93bik7CiAgIGdfdGVzdF9hZGQgKCIvbW9uaXRvci93aWxkY2FyZCIsIEZpeHR1cmUsICZ3aWxkY2FyZF9jb25maWcsCiAgICAgICBzZXR1cCwgdGVzdF91bmljYXN0X3NpZ25hbCwgdGVhcmRvd24pOwogICBnX3Rlc3RfYWRkICgiL21vbml0b3Ivbm8tcnVsZSIsIEZpeHR1cmUsICZub19ydWxlc19jb25maWcsCmRpZmYgLS1naXQgYS90ZXN0L25hbWUtdGVzdC8uZ2l0aWdub3JlIGIvdGVzdC9uYW1lLXRlc3QvLmdpdGlnbm9yZQppbmRleCAyYmYzMTNhLi4wOWY3YWQzIDEwMDY0NAotLS0gYS90ZXN0L25hbWUtdGVzdC8uZ2l0aWdub3JlCisrKyBiL3Rlc3QvbmFtZS10ZXN0Ly5naXRpZ25vcmUKQEAgLTMsNyArMyw3IEBACiBNYWtlZmlsZQogTWFrZWZpbGUuaW4KIGVjaG8tZXJyb3Itb3V0cHV0LnRtcAotdG1wLXNlc3Npb24tYnVzLiouY29uZgorcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLmNvbmYKIHRlc3QtaWRzCiB0ZXN0LW5hbWVzCiB0ZXN0LXBlbmRpbmctY2FsbC1kaXNwYXRjaApkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvTWFrZWZpbGUuYW0gYi90ZXN0L25hbWUtdGVzdC9NYWtlZmlsZS5hbQppbmRleCA0MDA5NjM1Li4zYjdmY2M2IDEwMDY0NAotLS0gYS90ZXN0L25hbWUtdGVzdC9NYWtlZmlsZS5hbQorKysgYi90ZXN0L25hbWUtdGVzdC9NYWtlZmlsZS5hbQpAQCAtNCwyNCArNCwxMiBAQAogCS1EREJVU19DT01QSUxBVElPTiBcCiAJJChOVUxMKQogCi1BTV9DRkxBR1MgPSBcCi0JJChDT0RFX0NPVkVSQUdFX0NGTEFHUykgXAotCSQoTlVMTCkKLQogIyBpZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBpbXByb3ZlIGJhY2t0cmFjZXMKIEFNX0xERkxBR1MgPSBAUl9EWU5BTUlDX0xERkxBR0AKIAogVEVTVF9FWFRFTlNJT05TID0gLnNoCiAKLUxPR19EUklWRVIgPSBlbnYgQU1fVEFQX0FXSz0nJChBV0spJyAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC90YXAtZHJpdmVyLnNoCi1TSF9MT0dfRFJJVkVSID0gJChMT0dfRFJJVkVSKQotCi1MT0dfQ09NUElMRVIgPSBcCi0JQGFic190b3BfYnVpbGRkaXJAL3Rvb2xzL2RidXMtcnVuLXNlc3Npb24kKEVYRUVYVCkgXAotCS0tY29uZmlnLWZpbGU9QGFic19idWlsZGRpckAvdW5pbnN0YWxsZWQtc2Vzc2lvbi5jb25mIFwKLQktLWRidXMtZGFlbW9uPUBhYnNfdG9wX2J1aWxkZGlyQC9idXMvZGJ1cy1kYWVtb24kKEVYRUVYVCkgXAotCS0tIFwKLQkkKE5VTEwpCitTSF9MT0dfRFJJVkVSID0gZW52IEFNX1RBUF9BV0s9JyQoQVdLKScgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvdGFwLWRyaXZlci5zaAogU0hfTE9HX0NPTVBJTEVSID0gJChTSEVMTCkKIAogIyMgbm90ZSB0aGF0IFRFU1RTIGhhcyBzcGVjaWFsIG1lYW5pbmcgKHN0dWZmIHRvIHVzZSBpbiBtYWtlIGNoZWNrKQpAQCAtMzIsMzggKzIwLDE3IEBACiBpZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogaWYgREJVU19VTklYCiBBTV9URVNUU19FTlZJUk9OTUVOVCA9IFwKLSAgICAgICAgZXhwb3J0IERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz1kby1ub3QtdXNlLXJlYWwtc2Vzc2lvbjo7IFwKICAgICAgICAgZXhwb3J0IERCVVNfVE9QX0JVSUxERElSPUBhYnNfdG9wX2J1aWxkZGlyQDsgXAogICAgICAgICBleHBvcnQgREJVU19UT1BfU1JDRElSPUBhYnNfdG9wX3NyY2RpckA7IFwKLSAgICAgICAgZXhwb3J0IFBBVEg9IkBhYnNfdG9wX2J1aWxkZGlyQC9idXM6JCRQQVRIIjsgXAogICAgICAgICBleHBvcnQgUFlUSE9OPUBQWVRIT05AOyBcCiAgICAgICAgIGV4cG9ydCBEQlVTX1RFU1RfREFUQT1AYWJzX3RvcF9idWlsZGRpckAvdGVzdC9kYXRhOyBcCiAgICAgICAgIGV4cG9ydCBEQlVTX1RFU1RfREFFTU9OPUBhYnNfdG9wX2J1aWxkZGlyQC9idXMvZGJ1cy1kYWVtb24kKEVYRUVYVCk7IFwKLSAgICAgICAgZXhwb3J0IERCVVNfVEVTVF9EQlVTX0xBVU5DSD1AYWJzX3RvcF9idWlsZGRpckAvdG9vbHMvZGJ1cy1sYXVuY2gkKEVYRUVYVCk7IFwKICAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj1AYWJzX3RvcF9idWlsZGRpckAvdGVzdC9YREdfUlVOVElNRV9ESVI7IFwKLSAgICAgICAgdW5zZXQgREJVU19TRVNTSU9OX0JVU19BRERSRVNTOyBcCi0gICAgICAgIHVuc2V0IERCVVNfU0VTU0lPTl9CVVNfUElEOyBcCiAgICAgICAgICQoTlVMTCkKIAotdW5pbnN0YWxsZWQtc2Vzc2lvbi5jb25mOiAkKHRvcF9idWlsZGRpcikvYnVzL3Nlc3Npb24uY29uZiBNYWtlZmlsZQotCSQoU0VEKSAtZSAnc3w8c3RhbmRhcmRfc2Vzc2lvbl9zZXJ2aWNlZGlycy4qJCR8PHNlcnZpY2VkaXI+QGFic190b3BfYnVpbGRkaXJAL3Rlc3QvZGF0YS92YWxpZC1zZXJ2aWNlLWZpbGVzPC9zZXJ2aWNlZGlyPnxnJyBcCi0JCS1lICdzfDxpbmNsdWRlLiokJHx8ZycgXAotCQk8ICQ8ID4gJEAKLQotY2hlY2tfREFUQSA9IFwKLQl1bmluc3RhbGxlZC1zZXNzaW9uLmNvbmYgXAotCSQoTlVMTCkKLQogVEVTVFMgKz0gXAogCXJ1bi10ZXN0LnNoIFwKIAlydW4tdGVzdC1zeXN0ZW1zZXJ2ZXIuc2ggXAotCXRlc3QtaWRzIFwKLQl0ZXN0LXBlbmRpbmctY2FsbC1kaXNwYXRjaCBcCi0JdGVzdC1wZW5kaW5nLWNhbGwtdGltZW91dCBcCi0JdGVzdC1wZW5kaW5nLWNhbGwtZGlzY29ubmVjdGVkIFwKLQl0ZXN0LXByaXZzZXJ2ZXItY2xpZW50IFwKLQl0ZXN0LXNodXRkb3duIFwKLQl0ZXN0LXRocmVhZHMtaW5pdCBcCiAJJChOVUxMKQogZW5kaWYKIGVuZGlmCkBAIC03NCwxMSArNDEsMTAgQEAKIAogIyMgd2UgdXNlIG5vaW5zdF9QUk9HUkFNUyBub3QgY2hlY2tfUFJPR1JBTVMgZm9yIFRFU1RTIHNvIHRoYXQgd2UKICMjIGJ1aWxkIGV2ZW4gd2hlbiBub3QgZG9pbmcgIm1ha2UgY2hlY2siCi1ub2luc3RfUFJPR1JBTVM9dGVzdC1wZW5kaW5nLWNhbGwtZGlzcGF0Y2ggdGVzdC1wZW5kaW5nLWNhbGwtdGltZW91dCB0ZXN0LXBlbmRpbmctY2FsbC1kaXNjb25uZWN0ZWQgdGVzdC10aHJlYWRzLWluaXQgdGVzdC1pZHMgdGVzdC1zaHV0ZG93biB0ZXN0LXByaXZzZXJ2ZXIgdGVzdC1wcml2c2VydmVyLWNsaWVudCB0ZXN0LWF1dG9sYXVuY2gKK25vaW5zdF9QUk9HUkFNUz10ZXN0LXBlbmRpbmctY2FsbC1kaXNwYXRjaCB0ZXN0LXBlbmRpbmctY2FsbC10aW1lb3V0IHRlc3QtdGhyZWFkcy1pbml0IHRlc3QtaWRzIHRlc3Qtc2h1dGRvd24gdGVzdC1wcml2c2VydmVyIHRlc3QtcHJpdnNlcnZlci1jbGllbnQgdGVzdC1hdXRvbGF1bmNoCiAKIHRlc3RfcGVuZGluZ19jYWxsX2Rpc3BhdGNoX0xEQUREPSQodG9wX2J1aWxkZGlyKS9kYnVzL2xpYmRidXMtMS5sYQogdGVzdF9wZW5kaW5nX2NhbGxfdGltZW91dF9MREFERD0kKHRvcF9idWlsZGRpcikvZGJ1cy9saWJkYnVzLTEubGEKLXRlc3RfcGVuZGluZ19jYWxsX2Rpc2Nvbm5lY3RlZF9MREFERD0kKHRvcF9idWlsZGRpcikvZGJ1cy9saWJkYnVzLTEubGEKIHRlc3RfdGhyZWFkc19pbml0X0xEQUREPSQodG9wX2J1aWxkZGlyKS9kYnVzL2xpYmRidXMtMS5sYQogdGVzdF9pZHNfTERBREQ9JCh0b3BfYnVpbGRkaXIpL2RidXMvbGliZGJ1cy0xLmxhCiAKZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3J1bi10ZXN0LnNoIGIvdGVzdC9uYW1lLXRlc3QvcnVuLXRlc3Quc2gKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCAwOTJlYzY5Li44YjllN2FkCi0tLSBhL3Rlc3QvbmFtZS10ZXN0L3J1bi10ZXN0LnNoCisrKyBiL3Rlc3QvbmFtZS10ZXN0L3J1bi10ZXN0LnNoCkBAIC02Nyw4ICs2NywxNCBAQAogfQogCiB0ZXN0X251bT0xCi0jIFRBUCB0ZXN0IHBsYW46IHdlIHdpbGwgcnVuIDIgdGVzdHMKLWVjaG8gIjEuLjIiCisjIFRBUCB0ZXN0IHBsYW46IHdlIHdpbGwgcnVuIDggdGVzdHMKK2VjaG8gIjEuLjgiCiAKK2NfdGVzdCB0ZXN0LWlkcworY190ZXN0IHRlc3QtcGVuZGluZy1jYWxsLWRpc3BhdGNoCitjX3Rlc3QgdGVzdC1wZW5kaW5nLWNhbGwtdGltZW91dAorY190ZXN0IHRlc3QtdGhyZWFkcy1pbml0CitjX3Rlc3QgdGVzdC1wcml2c2VydmVyLWNsaWVudAorY190ZXN0IHRlc3Qtc2h1dGRvd24KIHB5X3Rlc3QgdGVzdC1hY3RpdmF0aW9uLWZvcmtpbmcucHkKIGNfdGVzdCB0ZXN0LWF1dG9sYXVuY2gKZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtYWN0aXZhdGlvbi1mb3JraW5nLnB5IGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1hY3RpdmF0aW9uLWZvcmtpbmcucHkKaW5kZXggNDRiYzFhNi4uZjk4NTM3ZSAxMDA2NDQKLS0tIGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1hY3RpdmF0aW9uLWZvcmtpbmcucHkKKysrIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1hY3RpdmF0aW9uLWZvcmtpbmcucHkKQEAgLTcsNyArNyw3IEBACiAgICAgaW1wb3J0IGRidXMKICAgICBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCiBleGNlcHQ6Ci0gICAgcHJpbnQoIkZhaWxlZCBpbXBvcnQsIGFib3J0aW5nIHRlc3QiKQorICAgIHByaW50ICJGYWlsZWQgaW1wb3J0LCBhYm9ydGluZyB0ZXN0IgogICAgIHN5cy5leGl0KDApCiAKIGRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01haW5Mb29wKHNldF9hc19kZWZhdWx0PVRydWUpCkBAIC0yMyw3ICsyMyw3IEBACiAKICMgU3RhcnQgaXQgdXAKIHJlcGx5ID0gaS5FY2hvKCJoZWxsbyB3b3JsZCIpCi1wcmludCgiVGVzdFN1aXRlRm9ya2luZ0VjaG9TZXJ2aWNlIGluaXRpYWwgcmVwbHkgT0siKQorcHJpbnQgIlRlc3RTdWl0ZUZvcmtpbmdFY2hvU2VydmljZSBpbml0aWFsIHJlcGx5IE9LIgogCiBkZWYgaWdub3JlKCphcmdzLCAqKmt3YXJncyk6CiAgICAgcGFzcwpAQCAtMzYsNyArMzYsNyBAQAogICAgIGdsb2JhbCBvCiAgICAgZ2xvYmFsIGkKICAgICBpZiBjb3VudGVyID4gMTA6Ci0gICAgICAgIHByaW50KCJBY3RpdmF0ZWQgMTAgdGltZXMgT0ssIFRlc3RTdWl0ZUZvcmtpbmdFY2hvU2VydmljZSBwYXNzIikKKyAgICAgICAgcHJpbnQgIkFjdGl2YXRlZCAxMCB0aW1lcyBPSywgVGVzdFN1aXRlRm9ya2luZ0VjaG9TZXJ2aWNlIHBhc3MiCiAgICAgICAgIGxvb3AucXVpdCgpCiAgICAgICAgIHJldHVybgogICAgIGNvdW50ZXIgKz0gMQpAQCAtNTIsNyArNTIsNyBAQAogCiBkZWYgY2hlY2tfY291bnRlcigpOgogICAgIGlmIGNvdW50ZXIgPT0gMDoKLSAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBnZXQgTmFtZU93bmVyQ2hhbmdlZCBmb3IgVGVzdFN1aXRlRm9ya2luZ0VjaG9TZXJ2aWNlIikKKyAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBnZXQgTmFtZU93bmVyQ2hhbmdlZCBmb3IgVGVzdFN1aXRlRm9ya2luZ0VjaG9TZXJ2aWNlIgogICAgICAgICBzeXMuZXhpdCgxKQogR09iamVjdC50aW1lb3V0X2FkZCgxNTAwMCwgY2hlY2tfY291bnRlcikKIApkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1hdXRvbGF1bmNoLmMgYi90ZXN0L25hbWUtdGVzdC90ZXN0LWF1dG9sYXVuY2guYwppbmRleCA2MTc2MDU1Li44YjUyMDZhIDEwMDY0NAotLS0gYS90ZXN0L25hbWUtdGVzdC90ZXN0LWF1dG9sYXVuY2guYworKysgYi90ZXN0L25hbWUtdGVzdC90ZXN0LWF1dG9sYXVuY2guYwpAQCAtOCw3ICs4LDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+Ci0jaW5jbHVkZSAiZGJ1cy9kYnVzLWludGVybmFscy5oIgogI2luY2x1ZGUgImRidXMvZGJ1cy1zeXNkZXBzLmgiCiAKIGludApAQCAtMTYsMjAgKzE1LDExIEBACiB7CiAgIERCdXNDb25uZWN0aW9uICpjb25uID0gTlVMTDsKICAgREJ1c0Vycm9yIGVycm9yOwotICBEQnVzR1VJRCB1dWlkOwogCiAgIGRidXNfc2V0ZW52ICgiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIiwgTlVMTCk7CiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogCi0gIGlmICghX2RidXNfcmVhZF9sb2NhbF9tYWNoaW5lX3V1aWQgKCZ1dWlkLCBGQUxTRSwgJmVycm9yKSkKLSAgICB7Ci0gICAgICAvKiBXZSBjYW4ndCBleHBlY3QgYXV0b2xhdW5jaGluZyB0byB3b3JrIGluIHRoaXMgc2l0dWF0aW9uICovCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICIqKiogJXNcbiIsIGVycm9yLm1lc3NhZ2UpOwotICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgIGNvbm4gPSBkYnVzX2J1c19nZXQgKERCVVNfQlVTX1NFU1NJT04sICZlcnJvcik7CiAKICNpZmRlZiBEQlVTX0VOQUJMRV9YMTFfQVVUT0xBVU5DSApkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1pZHMuYyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtaWRzLmMKaW5kZXggNzNiNzFmMS4uOGY2M2QwNCAxMDA2NDQKLS0tIGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1pZHMuYworKysgYi90ZXN0L25hbWUtdGVzdC90ZXN0LWlkcy5jCkBAIC04LDE4ICs4LDEzIEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZGllIChjb25zdCBjaGFyICptZXNzYWdlKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAogZGllIChjb25zdCBjaGFyICptZXNzYWdlKQogewotICBwcmludGYgKCJCYWlsIG91dCEgdGVzdC1pZHM6ICVzXG4iLCBtZXNzYWdlKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiKioqIHRlc3QtaWRzOiAlcyIsIG1lc3NhZ2UpOwogICBleGl0ICgxKTsKIH0KIAotc3RhdGljIGludCB0ZXN0X251bSA9IDA7Ci0KLS8qIFRoaXMgdGVzdCBvdXRwdXRzIFRBUCBzeW50YXg6IGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnLyAqLwogaW50CiBtYWluIChpbnQgICAgYXJnYywKICAgICAgIGNoYXIgKiphcmd2KQpAQCAtMjgsNyArMjMsNyBAQAogICBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKICAgY2hhciAqaWQ7CiAgIGNoYXIgKnNlcnZlcl9pZDsKLQorICAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogICBjb25uZWN0aW9uID0gZGJ1c19idXNfZ2V0IChEQlVTX0JVU19TRVNTSU9OLCAmZXJyb3IpOwogICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKQpAQCAtMzgsMzUgKzMzLDI0IEBACiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gIHByaW50ZiAoIm9rICVkIC0gY29ubmVjdGVkIHRvIHNlc3Npb24gYnVzXG4iLCArK3Rlc3RfbnVtKTsKIAogICBzZXJ2ZXJfaWQgPSBkYnVzX2Nvbm5lY3Rpb25fZ2V0X3NlcnZlcl9pZCAoY29ubmVjdGlvbik7Ci0KICAgaWYgKHNlcnZlcl9pZCA9PSBOVUxMKQogICAgIGRpZSAoIk5vIGJ1cyBzZXJ2ZXIgSUQgcmV0cmlldmVkXG4iKTsKLQotICBwcmludGYgKCJvayAlZCAtIHNlc3Npb24gYnVzIHNlcnZlciBJRCBpcyAlc1xuIiwgKyt0ZXN0X251bSwgc2VydmVyX2lkKTsKLQorICAvKiBwcmludGYoIiclcydcbiIsIHNlcnZlcl9pZCk7ICovCiAgIGlmIChzdHJsZW4gKHNlcnZlcl9pZCkgIT0gMzIpCiAgICAgZGllICgiQnVzIHNlcnZlciBpZCBzaG91bGQgaGF2ZSBsZW5ndGggMzJcbiIpOwotCi0gIHByaW50ZiAoIm9rICVkIC0gc2Vzc2lvbiBidXMgc2VydmVyIElEIGxlbmd0aCBpcyAzMlxuIiwgKyt0ZXN0X251bSk7Ci0KICAgZGJ1c19mcmVlIChzZXJ2ZXJfaWQpOwogCiAgIGlkID0gZGJ1c19idXNfZ2V0X2lkIChjb25uZWN0aW9uLCBOVUxMKTsKICAgaWYgKGlkID09IE5VTEwpCiAgICAgZGllICgiTm8gYnVzIElEIHJldHJpZXZlZFxuIik7Ci0KLSAgcHJpbnRmICgib2sgJWQgLSBzZXNzaW9uIGJ1cyBJRCBpcyAlc1xuIiwgKyt0ZXN0X251bSwgaWQpOwotCisgIC8qIHByaW50ZigiJyVzJ1xuIiwgaWQpOyAqLwogICBpZiAoc3RybGVuIChpZCkgIT0gMzIpCiAgICAgZGllICgiQnVzIElEIHNob3VsZCBoYXZlIGxlbmd0aCAzMlxuIik7Ci0KLSAgcHJpbnRmICgib2sgJWQgLSBzZXNzaW9uIGJ1cyBJRCBsZW5ndGggaXMgMzJcbiIsICsrdGVzdF9udW0pOwotCiAgIGRidXNfZnJlZSAoaWQpOyAgCi0KLSAgcHJpbnRmICgiMS4uJWRcbiIsIHRlc3RfbnVtKTsKKyAgCisgIF9kYnVzX3ZlcmJvc2UgKCIqKiogVGVzdCBJRHMgZXhpdGluZ1xuIik7CisgIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcGVuZGluZy1jYWxsLWRpc2Nvbm5lY3RlZC5jIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtZGlzY29ubmVjdGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjQyNDMuLjAwMDAwMDAKLS0tIGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtZGlzY29ubmVjdGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDA2IFJlZCBIYXQgSW5jLgotICogQ29weXJpZ2h0IMKpIDIwMTcgU2hpbi1pY2hpIE1PUklUQSA8c2hpbjFtb3JpdGFAZ21haWwuY29tPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCi0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcwotICogKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKLSAqIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCi0gKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAotICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLSAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLSAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KLSAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0vKioKLSogVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBwZW5kaW5nIGNhbGxzIHVucmVmIGVycm9yIG1lc3NhZ2VzCi0qIHdoZW4gYmxvY2tlZCBhZnRlciBkaXNjb25uZWN0ZWQuCi0qKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgotI2luY2x1ZGUgPGRidXMvZGJ1cy1zeXNkZXBzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotc3RhdGljIHNpemVfdCBjb3VudCA9IDA7Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2RhdGEgKHZvaWQgKmRhdGEpCi17Ci0gIC0tY291bnQ7Ci0gIHByaW50ZiAoIiMgRnJlZWQ6ICVzXG4iLCAoY29uc3QgY2hhciopZGF0YSk7Ci19Ci0KLS8qIFRoaXMgdGVzdCBvdXRwdXRzIFRBUCBzeW50YXg6IGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnLyAqLwotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBkYnVzX2ludDMyX3Qgc2xvdF9jb25uZWN0aW9uID0gLTE7Ci0gIGRidXNfaW50MzJfdCBzbG90X21lc3NhZ2UgPSAtMTsKLSAgZGJ1c19pbnQzMl90IHNsb3RfcGVuZGluZyA9IC0xOwotICBEQnVzRXJyb3IgZXJyb3I7Ci0gIERCdXNDb25uZWN0aW9uICpjb25uOwotICBEQnVzTWVzc2FnZSAqbWV0aG9kOwotICBEQnVzUGVuZGluZ0NhbGwgKnBlbmRpbmc7Ci0gIERCdXNNZXNzYWdlICpyZXBseTsKLQotICBwcmludGYgKCIjIFRlc3RpbmcgcGVuZGluZyBjYWxsIGVycm9yXG4iKTsKLQotICBkYnVzX2Nvbm5lY3Rpb25fYWxsb2NhdGVfZGF0YV9zbG90ICgmc2xvdF9jb25uZWN0aW9uKTsKLSAgZGJ1c19tZXNzYWdlX2FsbG9jYXRlX2RhdGFfc2xvdCAoJnNsb3RfbWVzc2FnZSk7Ci0gIGRidXNfcGVuZGluZ19jYWxsX2FsbG9jYXRlX2RhdGFfc2xvdCAoJnNsb3RfcGVuZGluZyk7Ci0KLSAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwotICBjb25uID0gZGJ1c19idXNfZ2V0X3ByaXZhdGUgKERCVVNfQlVTX1NFU1NJT04sICZlcnJvcik7Ci0gIGRidXNfY29ubmVjdGlvbl9zZXRfZGF0YSAoY29ubiwgc2xvdF9jb25uZWN0aW9uLCAodm9pZCopImNvbm5lY3Rpb24iLCBmcmVlX2RhdGEpOwotICArK2NvdW50OwotICBkYnVzX2Nvbm5lY3Rpb25fc2V0X2V4aXRfb25fZGlzY29ubmVjdCAoY29ubiwgRkFMU0UpOwotCi0gIG1ldGhvZCA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKCJvcmcuZnJlZWRlc2t0b3AuVGVzdFN1aXRlRWNob1NlcnZpY2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL29yZy9mcmVlZGVza3RvcC9UZXN0U3VpdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmZyZWVkZXNrdG9wLlRlc3RTdWl0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0Iik7Ci0gIGRidXNfbWVzc2FnZV9zZXRfZGF0YSAobWV0aG9kLCBzbG90X21lc3NhZ2UsICh2b2lkKikibWV0aG9kIiwgZnJlZV9kYXRhKTsKLSAgKytjb3VudDsKLQotICBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChjb25uLCBtZXRob2QsICZwZW5kaW5nLCAtMSk7Ci0gIGRidXNfbWVzc2FnZV91bnJlZiAobWV0aG9kKTsKLSAgZGJ1c19wZW5kaW5nX2NhbGxfc2V0X2RhdGEgKHBlbmRpbmcsIHNsb3RfcGVuZGluZywgKHZvaWQqKSJwZW5kaW5nIiwgZnJlZV9kYXRhKTsKLSAgKytjb3VudDsKLQotICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgKGNvbm4pOwotCi0gIGRidXNfcGVuZGluZ19jYWxsX2Jsb2NrIChwZW5kaW5nKTsKLSAgcmVwbHkgPSBkYnVzX3BlbmRpbmdfY2FsbF9zdGVhbF9yZXBseSAocGVuZGluZyk7Ci0gIGRidXNfcGVuZGluZ19jYWxsX3VucmVmIChwZW5kaW5nKTsKLSAgaWYgKHJlcGx5ID09IE5VTEwpCi0gICAgewotICAgICAgcHJpbnRmICgiQmFpbCBvdXQhIFJlcGx5IGlzIE5VTEwgKioqXG4iKTsKLSAgICAgIGV4aXQgKDEpOwotICAgIH0KLSAgZGJ1c19tZXNzYWdlX3NldF9kYXRhIChyZXBseSwgc2xvdF9tZXNzYWdlLCAodm9pZCopInJlcGx5IiwgZnJlZV9kYXRhKTsKLSAgKytjb3VudDsKLSAgaWYgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSAocmVwbHkpICE9IERCVVNfTUVTU0FHRV9UWVBFX0VSUk9SKQotICAgIHsKLSAgICAgIHByaW50ZiAoIkJhaWwgb3V0ISBSZXBseSBpcyBub3QgZXJyb3IgKioqXG4iKTsKLSAgICAgIGV4aXQgKDEpOwotICAgIH0KLSAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7Ci0KLSAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChjb25uKTsKLQotICBkYnVzX2Nvbm5lY3Rpb25fZnJlZV9kYXRhX3Nsb3QgKCZzbG90X2Nvbm5lY3Rpb24pOwotICBkYnVzX21lc3NhZ2VfZnJlZV9kYXRhX3Nsb3QgKCZzbG90X21lc3NhZ2UpOwotICBkYnVzX3BlbmRpbmdfY2FsbF9mcmVlX2RhdGFfc2xvdCAoJnNsb3RfcGVuZGluZyk7Ci0KLSAgaWYgKGNvdW50ICE9IDApCi0gICAgewotICAgICAgcHJpbnRmICgibm90IG9rICMgTm90IGFsbCByZWZzIHdlcmUgdW5yZWZlZCAqKipcbiIpOwotICAgICAgZXhpdCAoMSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgcHJpbnRmICgib2tcbiMgVGVzdGluZyBjb21wbGV0ZWRcbjEuLjFcbiIpOwotICAgICAgZXhpdCAoMCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtZGlzcGF0Y2guYyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcGVuZGluZy1jYWxsLWRpc3BhdGNoLmMKaW5kZXggYWY4MDg2OC4uYzhiNWE0NiAxMDA2NDQKLS0tIGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtZGlzcGF0Y2guYworKysgYi90ZXN0L25hbWUtdGVzdC90ZXN0LXBlbmRpbmctY2FsbC1kaXNwYXRjaC5jCkBAIC0xLDI2ICsxLDMgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwNiBSZWQgSGF0IEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKLSAqICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCi0gKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAotICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCi0gKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwogLyoqCiAqIFRlc3QgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBzdHVjayBwb2xsaW5nIGEgZGJ1cyBjb25uZWN0aW9uCiAqIHdoaWNoIGhhcyBubyBkYXRhIG9uIHRoZSBzb2NrZXQuICBUaGlzIHdhcyBhbiBpc3N1ZSB3aGVyZQpAQCAtNDMsNyArMjAsNyBAQAogICBEQnVzUGVuZGluZ0NhbGwgKmRidXNfcGVuZGluZzsKICAgREJ1c01lc3NhZ2UgKm1ldGhvZDsKICAgREJ1c01lc3NhZ2UgKnJlcGx5OwotICBjb25zdCBjaGFyICplY2hvID0gImVjaG8iOworICBjaGFyICplY2hvID0gImVjaG8iOwogCiAgIC8qIHNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UgKi8KICAgbWV0aG9kID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoIm9yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlIiwKQEAgLTUxLDEyICsyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuVGVzdFN1aXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVjaG8iKTsKIAotICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWV0aG9kLCBEQlVTX1RZUEVfU1RSSU5HLCAmZWNobywgTlVMTCkpCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQmFpbCBvdXQhIEZhaWxlZCB0byBhcHBlbmQgYXJndW1lbnRzOiBPT01cbiIpOwotICAgICAgZXhpdCAoMSk7Ci0gICAgfQotCisgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWV0aG9kLCBEQlVTX1RZUEVfU1RSSU5HLCAmZWNobywgTlVMTCk7CiAgIGRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGNvbm4sIG1ldGhvZCwgJmVjaG9fcGVuZGluZywgLTEpOwogICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1ldGhvZCk7CiAgIApAQCAtODQsMTMgKzU2LDEzIEBACiAKICAgaWYgKHJlcGx5ID09IE5VTEwpCiAgICAgewotICAgICAgcHJpbnRmICgiQmFpbCBvdXQhIFJlcGx5IGlzIE5VTEwgKioqXG4iKTsKKyAgICAgIHByaW50ZiAoIkZhaWxlZDogUmVwbHkgaXMgTlVMTCAqKipcbiIpOwogICAgICAgZXhpdCAoMSk7CiAgICAgfQogCiAgIGlmIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKHJlcGx5KSA9PSBEQlVTX01FU1NBR0VfVFlQRV9FUlJPUikKICAgICB7Ci0gICAgICBwcmludGYgKCJCYWlsIG91dCEgUmVwbHkgaXMgZXJyb3I6ICVzICoqKlxuIiwgZGJ1c19tZXNzYWdlX2dldF9lcnJvcl9uYW1lIChyZXBseSkpOworICAgICAgcHJpbnRmICgiRmFpbGVkOiBSZXBseSBpcyBlcnJvcjogJXMgKioqXG4iLCBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKHJlcGx5KSk7CiAgICAgICBleGl0ICgxKTsKICAgICB9IAogCkBAIC0xMDAsNyArNzIsNiBAQAogICAKIH0KIAotLyogVGhpcyB0ZXN0IG91dHB1dHMgVEFQIHN5bnRheDogaHR0cDovL3Rlc3Rhbnl0aGluZy5vcmcvICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0xMTYsNyArODcsNyBAQAogICAgICBidXQgaWYgaXQgZG9lcyBhbmQgd2UgYXJlIHN0dWNrIGluIGEgcG9sbCBjYWxsIHRoZW4gd2Uga25vdyB0aGUgCiAgICAgIHN0dWNrIGluIHBvbGwgYnVnIGhhcyBjb21lIGJhY2sgdG8gaGF1bnQgdXMgKi8KIAotICBwcmludGYgKCIjIFRlc3Rpbmcgc3R1Y2sgaW4gcG9sbFxuIik7CisgIHByaW50ZiAoIioqKiBUZXN0aW5nIHN0dWNrIGluIHBvbGxcbiIpOwogCiAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKIApAQCAtMTMzLDEwICsxMDQsMTAgQEAKIAogICAgICAgLyogd2UganVzdCBjYXJlIGFib3V0IHNlY29uZHMgKi8KICAgICAgIGRlbHRhID0gZW5kX3R2X3NlYyAtIHN0YXJ0X3R2X3NlYzsKLSAgICAgIHByaW50ZiAoIm9rICVkIC0gJWxpc1xuIiwgaSArIDEsIGRlbHRhKTsKKyAgICAgIHByaW50ZiAoIkl0ZXIgJWk6ICVsaXNcbiIsIGksIGRlbHRhKTsKICAgICAgIGlmIChkZWx0YSA+PSA1KQogICAgICAgICB7Ci0JICBwcmludGYgKCJCYWlsIG91dCEgTG9va3MgbGlrZSB3ZSBtaWdodCBoYXZlIGJlZW4gYmUgc3R1Y2sgaW4gcG9sbCAqKipcbiIpOworCSAgcHJpbnRmICgiRmFpbGVkOiBsb29rcyBsaWtlIHdlIG1pZ2h0IGhhdmUgYmVlbiBiZSBzdHVjayBpbiBwb2xsICoqKlxuIik7CiAJICBleGl0ICgxKTsKIAl9CiAgICAgfQpAQCAtMTQ4LDYgKzExOSw2IEBACiAgIGRidXNfY29ubmVjdGlvbl9zZW5kIChjb25uLCBtZXRob2QsIE5VTEwpOwogICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1ldGhvZCk7CiAKLSAgcHJpbnRmICgiIyBUZXN0aW5nIGNvbXBsZXRlZFxuMS4uJWRcbiIsIGkpOworICBwcmludGYgKCJTdWNjZXNzICoqKlxuIik7CiAgIGV4aXQgKDApOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtdGltZW91dC5jIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1wZW5kaW5nLWNhbGwtdGltZW91dC5jCmluZGV4IGEyMDRkYjAuLmQwNTFmYWIgMTAwNjQ0Ci0tLSBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcGVuZGluZy1jYWxsLXRpbWVvdXQuYworKysgYi90ZXN0L25hbWUtdGVzdC90ZXN0LXBlbmRpbmctY2FsbC10aW1lb3V0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgREJ1c1BlbmRpbmdDYWxsICpwZW5kaW5nOwogICBEQnVzTWVzc2FnZSAqbWV0aG9kOwogICBEQnVzTWVzc2FnZSAqcmVwbHk7Ci0gIGNvbnN0IGNoYXIgKmVjaG8gPSAiZWNobyI7CisgIGNoYXIgKmVjaG8gPSAiZWNobyI7CiAKICAgLyogc2VuZCB0aGUgbWVzc2FnZSAqLwogICBtZXRob2QgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsICgib3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UiLApAQCAtMjUsMTMgKzI1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5UZXN0U3VpdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVsYXlFY2hvIik7CiAKLSAgaWYgKG1ldGhvZCA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChtZXRob2QsIERCVVNfVFlQRV9TVFJJTkcsICZlY2hvLCBOVUxMKSB8fAotICAgICAgIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGNvbm4sIG1ldGhvZCwgJnBlbmRpbmcsIHRpbWVvdXRfbWlsbGlzZWNvbmRzKSkKLSAgICB7Ci0gICAgICBwcmludGYgKCJCYWlsIG91dCEgT09NIHdoZW4gYnVpbGRpbmcgYW5kIHNlbmRpbmcgbWVzc2FnZSAqKipcbiIpOwotICAgICAgZXhpdCAoMSk7Ci0gICAgfQorICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG1ldGhvZCwgREJVU19UWVBFX1NUUklORywgJmVjaG8sIE5VTEwpOworICBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChjb25uLCBtZXRob2QsICZwZW5kaW5nLCB0aW1lb3V0X21pbGxpc2Vjb25kcyk7CiAgIGRidXNfbWVzc2FnZV91bnJlZiAobWV0aG9kKTsKICAgCiAgIC8qIGJsb2NrIG9uIHRoZSBtZXNzYWdlICovCkBAIC00NCwxMyArMzksMTMgQEAKIAogICBpZiAocmVwbHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICBwcmludGYgKCJCYWlsIG91dCEgUmVwbHkgaXMgTlVMTCAqKipcbiIpOworICAgICAgcHJpbnRmICgiRmFpbGVkOiBSZXBseSBpcyBOVUxMICoqKlxuIik7CiAgICAgICBleGl0ICgxKTsKICAgICB9CiAKICAgaWYgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSAocmVwbHkpID09IERCVVNfTUVTU0FHRV9UWVBFX0VSUk9SKQogICAgIHsKLSAgICAgIHByaW50ZiAoIkJhaWwgb3V0ISBSZXBseSBpcyBlcnJvcjogJXMgKioqXG4iLCBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKHJlcGx5KSk7CisgICAgICBwcmludGYgKCJGYWlsZWQ6IFJlcGx5IGlzIGVycm9yOiAlcyAqKipcbiIsIGRidXNfbWVzc2FnZV9nZXRfZXJyb3JfbmFtZSAocmVwbHkpKTsKICAgICAgIGV4aXQgKDEpOwogICAgIH0gCiAKQEAgLTY2LDcgKzYxLDYgQEAKICAgX21ldGhvZF9jYWxsIChjb25uLCBJTlRfTUFYKTsKIH0KIAotLyogVGhpcyB0ZXN0IG91dHB1dHMgVEFQIHN5bnRheDogaHR0cDovL3Rlc3Rhbnl0aGluZy5vcmcvICovCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC03Nyw3ICs3MSw3IEBACiAgIERCdXNDb25uZWN0aW9uICpjb25uOwogICBEQnVzRXJyb3IgZXJyb3I7CiAKLSAgcHJpbnRmICgiIyBUZXN0aW5nIHBlbmRpbmcgY2FsbCB0aW1lb3V0c1xuIik7CisgIHByaW50ZiAoIioqKiBUZXN0aW5nIHBlbmRpbmcgY2FsbCB0aW1lb3V0c1xuIik7CiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogCkBAIC05NCw3ICs4OCw3IEBACiAKICAgICAgIC8qIHdlIGp1c3QgY2FyZSBhYm91dCBzZWNvbmRzICovCiAgICAgICBkZWx0YSA9IGVuZF90dl9zZWMgLSBzdGFydF90dl9zZWM7Ci0gICAgICBwcmludGYgKCJvayAlZCAtICVsaXNcbiIsIGkgKyAxLCBkZWx0YSk7CisgICAgICBwcmludGYgKCJJdGVyICVpOiAlbGlzXG4iLCBpLCBkZWx0YSk7CiAgICAgfQogIAogICBtZXRob2QgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsICgib3JnLmZyZWVkZXNrdG9wLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlIiwKQEAgLTEwNCw2ICs5OCw2IEBACiAgIGRidXNfY29ubmVjdGlvbl9zZW5kIChjb25uLCBtZXRob2QsIE5VTEwpOwogICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1ldGhvZCk7CiAKLSAgcHJpbnRmICgiIyBUZXN0aW5nIGNvbXBsZXRlZFxuMS4uJWRcbiIsIGkpOworICBwcmludGYgKCJTdWNjZXNzICoqKlxuIik7CiAgIGV4aXQgKDApOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9uYW1lLXRlc3QvdGVzdC1wcml2c2VydmVyLWNsaWVudC5jIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1wcml2c2VydmVyLWNsaWVudC5jCmluZGV4IDdhMjkzZjQuLmU3ZjQ4OTYgMTAwNjQ0Ci0tLSBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcHJpdnNlcnZlci1jbGllbnQuYworKysgYi90ZXN0L25hbWUtdGVzdC90ZXN0LXByaXZzZXJ2ZXItY2xpZW50LmMKQEAgLTEsOSArMSw2IEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAiLi4vdGVzdC11dGlscy5oIgogCi1zdGF0aWMgdm9pZCBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgIC4uLikgX0RCVVNfR05VQ19OT1JFVFVSTiBfREJVU19HTlVDX1BSSU5URiAoMSwgMik7Ci0KIHN0YXRpYyB2b2lkCiBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIHsKQEAgLTEwMywxMyArMTAwLDkgQEAKICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoc2Vzc2lvbiwgbXNnLCAtMSwgJmVycm9yKSkpCiAgICAgZGllICgiY291bGRuJ3Qgc2VuZCBtZXNzYWdlOiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CiAgIGRidXNfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBpZiAoZGJ1c19zZXRfZXJyb3JfZnJvbV9tZXNzYWdlICgmZXJyb3IsIHJlcGx5KSkKLSAgICBkaWUgKCIlczogJXMiLCBlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlKTsKLQogICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAocmVwbHksICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJmFkZHIsIERCVVNfVFlQRV9JTlZBTElEKSkKICAgICBkaWUgKCJjb3VsZG4ndCBwYXJzZSBtZXNzYWdlIHJlcGx5bVxuIik7Ci0gIHByaW50ZiAoIiMgZ290IHByaXZhdGUgdGVtcCBhZGRyZXNzICVzXG4iLCBhZGRyKTsKKyAgcHJpbnRmICgiZ290IHByaXZhdGUgdGVtcCBhZGRyZXNzICVzXG4iLCBhZGRyKTsKICAgYWRkciA9IHN0cmR1cCAoYWRkcik7CiAgIGlmICghdXNlX2d1aWQpCiAgICAgewpAQCAtMTUyLDMyICsxNDUsMjQgQEAKICAgX2RidXNfbG9vcF91bnJlZiAobG9vcCk7CiB9CiAKLS8qIFRoaXMgdGVzdCBvdXRwdXRzIFRBUCBzeW50YXg6IGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnLyAqLwogaW50CiBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotICBpbnQgdGVzdF9udW0gPSAwOworICBvcGVuX3NodXRkb3duX3ByaXZhdGVfY29ubmVjdGlvbiAoVFJVRSk7CisKKyAgZGJ1c19zaHV0ZG93biAoKTsKIAogICBvcGVuX3NodXRkb3duX3ByaXZhdGVfY29ubmVjdGlvbiAoVFJVRSk7CiAKICAgZGJ1c19zaHV0ZG93biAoKTsKLSAgcHJpbnRmICgib2sgJWRcbiIsICsrdGVzdF9udW0pOwotCi0gIG9wZW5fc2h1dGRvd25fcHJpdmF0ZV9jb25uZWN0aW9uIChUUlVFKTsKLQotICBkYnVzX3NodXRkb3duICgpOwotICBwcmludGYgKCJvayAlZFxuIiwgKyt0ZXN0X251bSk7CiAKICAgb3Blbl9zaHV0ZG93bl9wcml2YXRlX2Nvbm5lY3Rpb24gKEZBTFNFKTsKIAogICBkYnVzX3NodXRkb3duICgpOwotICBwcmludGYgKCJvayAlZFxuIiwgKyt0ZXN0X251bSk7CiAKICAgb3Blbl9zaHV0ZG93bl9wcml2YXRlX2Nvbm5lY3Rpb24gKEZBTFNFKTsKIAogICBkYnVzX3NodXRkb3duICgpOwotICBwcmludGYgKCJvayAlZFxuIiwgKyt0ZXN0X251bSk7CiAKLSAgcHJpbnRmICgiMS4uJWRcbiIsIHRlc3RfbnVtKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90ZXN0L25hbWUtdGVzdC90ZXN0LXByaXZzZXJ2ZXIuYyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcHJpdnNlcnZlci5jCmluZGV4IGM2ZGU3MzQuLjM5YTk4YjcgMTAwNjQ0Ci0tLSBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcHJpdnNlcnZlci5jCisrKyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtcHJpdnNlcnZlci5jCkBAIC0xLDkgKzEsNiBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgIi4uL3Rlc3QtdXRpbHMuaCIKIAotc3RhdGljIHZvaWQgZGllIChjb25zdCBjaGFyICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAuLi4pIF9EQlVTX0dOVUNfTk9SRVRVUk4gX0RCVVNfR05VQ19QUklOVEYgKDEsIDIpOwotCiBzdGF0aWMgdm9pZAogZGllIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCiB7CkBAIC00NSwyMCArNDIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldFByaXZhdGVBZGRyZXNzIikpCiAgICAgewogICAgICAgIERCdXNNZXNzYWdlICpyZXBseTsKLQogICAgICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuIChtZXNzYWdlKTsKLSAgICAgICBpZiAocmVwbHkgPT0gTlVMTCkKLSAgICAgICAgIGRpZSAoIk9PTSIpOwotICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzIChyZXBseSwgREJVU19UWVBFX1NUUklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJih0ZXN0ZGF0YS0+cHJpdmF0ZV9hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKQotICAgICAgICAgZGllICgiT09NIik7Ci0KLSAgICAgICBpZiAoIWRidXNfY29ubmVjdGlvbl9zZW5kIChjb25uZWN0aW9uLCByZXBseSwgTlVMTCkpCi0gICAgICAgICBkaWUgKCJFcnJvciBzZW5kaW5nIG1lc3NhZ2UiKTsKLQorICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJih0ZXN0ZGF0YS0+cHJpdmF0ZV9hZGRyKSwgREJVU19UWVBFX0lOVkFMSUQpOworICAgICAgIGRidXNfY29ubmVjdGlvbl9zZW5kIChjb25uZWN0aW9uLCByZXBseSwgTlVMTCk7CiAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7Ci0KICAgICAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOwogICAgIH0KICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsIChtZXNzYWdlLApAQCAtMTA3LDkgKzk1LDkgQEAKICAgc2VydmVyID0gZGJ1c19zZXJ2ZXJfbGlzdGVuICgidW5peDp0bXBkaXI9L3RtcCIsICZlcnJvcik7CiAjZW5kaWYKICAgaWYgKCFzZXJ2ZXIpCi0gICAgZGllICgiJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICBkaWUgKGVycm9yLm1lc3NhZ2UpOwogICB0ZXN0ZGF0YS0+cHJpdmF0ZV9hZGRyID0gZGJ1c19zZXJ2ZXJfZ2V0X2FkZHJlc3MgKHNlcnZlcik7Ci0gIGZwcmludGYgKHN0ZGVyciwgInRlc3Qgc2VydmVyIGxpc3RlbmluZyBvbiAlc1xuIiwgdGVzdGRhdGEtPnByaXZhdGVfYWRkcik7CisgIHByaW50ZiAoInRlc3Qgc2VydmVyIGxpc3RlbmluZyBvbiAlc1xuIiwgdGVzdGRhdGEtPnByaXZhdGVfYWRkcik7CiAKICAgZGJ1c19zZXJ2ZXJfc2V0X25ld19jb25uZWN0aW9uX2Z1bmN0aW9uIChzZXJ2ZXIsIG5ld19jb25uZWN0aW9uX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RkYXRhLCBOVUxMKTsKZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3Qtc2h1dGRvd24uYyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3Qtc2h1dGRvd24uYwppbmRleCBlNzBiZmQzLi41MjZjMWNiIDEwMDY0NAotLS0gYS90ZXN0L25hbWUtdGVzdC90ZXN0LXNodXRkb3duLmMKKysrIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC1zaHV0ZG93bi5jCkBAIC00LDEyICs0LDEwIEBACiAKIHN0YXRpYyBEQnVzTG9vcCAqbG9vcDsKIAotc3RhdGljIHZvaWQgZGllIChjb25zdCBjaGFyICptZXNzYWdlKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAogZGllIChjb25zdCBjaGFyICptZXNzYWdlKQogewotICBwcmludGYgKCJCYWlsIG91dCEgdGVzdC1zaHV0ZG93bjogJXMiLCBtZXNzYWdlKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiKioqIHRlc3Qtc2h1dGRvd246ICVzIiwgbWVzc2FnZSk7CiAgIGV4aXQgKDEpOwogfQogCkBAIC00OCwyOCArNDYsMjMgQEAKICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChjb25uZWN0aW9uKTsgCiB9CiAKLS8qIFRoaXMgdGVzdCBvdXRwdXRzIFRBUCBzeW50YXg6IGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnLyAqLwogaW50CiBtYWluIChpbnQgICAgYXJnYywKICAgICAgIGNoYXIgKiphcmd2KQogewotICBpbnQgdGVzdF9udW0gPSAwOworICBvcGVuX2Rlc3Ryb3lfc2hhcmVkX3Nlc3Npb25fYnVzX2Nvbm5lY3Rpb24gKCk7CisKKyAgZGJ1c19zaHV0ZG93biAoKTsKIAogICBvcGVuX2Rlc3Ryb3lfc2hhcmVkX3Nlc3Npb25fYnVzX2Nvbm5lY3Rpb24gKCk7CiAKICAgZGJ1c19zaHV0ZG93biAoKTsKLSAgcHJpbnRmICgib2sgJWRcbiIsICsrdGVzdF9udW0pOwogCiAgIG9wZW5fZGVzdHJveV9zaGFyZWRfc2Vzc2lvbl9idXNfY29ubmVjdGlvbiAoKTsKIAogICBkYnVzX3NodXRkb3duICgpOwotICBwcmludGYgKCJvayAlZFxuIiwgKyt0ZXN0X251bSk7CiAKLSAgb3Blbl9kZXN0cm95X3NoYXJlZF9zZXNzaW9uX2J1c19jb25uZWN0aW9uICgpOwotCi0gIGRidXNfc2h1dGRvd24gKCk7Ci0gIHByaW50ZiAoIm9rICVkXG4iLCArK3Rlc3RfbnVtKTsKLQotICBwcmludGYgKCIxLi4lZFxuIiwgdGVzdF9udW0pOworICBfZGJ1c192ZXJib3NlICgiKioqIFRlc3Qgc2h1dGRvd24gZXhpdGluZ1xuIik7CisgIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtdGhyZWFkcy1pbml0LmMgYi90ZXN0L25hbWUtdGVzdC90ZXN0LXRocmVhZHMtaW5pdC5jCmluZGV4IGExOWI5NjIuLmE1MTdlMmEgMTAwNjQ0Ci0tLSBhL3Rlc3QvbmFtZS10ZXN0L3Rlc3QtdGhyZWFkcy1pbml0LmMKKysrIGIvdGVzdC9uYW1lLXRlc3QvdGVzdC10aHJlYWRzLWluaXQuYwpAQCAtMTgsNyArMTgsNyBAQAogICBEQnVzUGVuZGluZ0NhbGwgKmRidXNfcGVuZGluZzsKICAgREJ1c01lc3NhZ2UgKm1ldGhvZDsKICAgREJ1c01lc3NhZ2UgKnJlcGx5OwotICBjb25zdCBjaGFyICplY2hvID0gImVjaG8iOworICBjaGFyICplY2hvID0gImVjaG8iOwogCiAgIC8qIHNlbmQgdGhlIGZpcnN0IG1lc3NhZ2UgKi8KICAgbWV0aG9kID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoIm9yZy5mcmVlZGVza3RvcC5EQnVzLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlIiwKQEAgLTI2LDEyICsyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuVGVzdFN1aXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVjaG8iKTsKIAotICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWV0aG9kLCBEQlVTX1RZUEVfU1RSSU5HLCAmZWNobywgTlVMTCkpCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQmFpbCBvdXQhIEZhaWxlZCB0byBhcHBlbmQgYXJndW1lbnRzOiBPT01cbiIpOwotICAgICAgZXhpdCAoMSk7Ci0gICAgfQotCisgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWV0aG9kLCBEQlVTX1RZUEVfU1RSSU5HLCAmZWNobywgTlVMTCk7CiAgIGRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGNvbm4sIG1ldGhvZCwgJmVjaG9fcGVuZGluZywgLTEpOwogICBkYnVzX21lc3NhZ2VfdW5yZWYgKG1ldGhvZCk7CiAgIApAQCAtNTksMTMgKzU0LDEzIEBACiAKICAgaWYgKHJlcGx5ID09IE5VTEwpCiAgICAgewotICAgICAgcHJpbnRmICgiQmFpbCBvdXQhIFJlcGx5IGlzIE5VTEwgKioqXG4iKTsKKyAgICAgIHByaW50ZiAoIkZhaWxlZDogUmVwbHkgaXMgTlVMTCAqKipcbiIpOwogICAgICAgZXhpdCAoMSk7CiAgICAgfQogCiAgIGlmIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKHJlcGx5KSA9PSBEQlVTX01FU1NBR0VfVFlQRV9FUlJPUikKICAgICB7Ci0gICAgICBwcmludGYgKCJCYWlsIG91dCEgUmVwbHkgaXMgZXJyb3I6ICVzICoqKlxuIiwgZGJ1c19tZXNzYWdlX2dldF9lcnJvcl9uYW1lIChyZXBseSkpOworICAgICAgcHJpbnRmICgiRmFpbGVkOiBSZXBseSBpcyBlcnJvcjogJXMgKioqXG4iLCBkYnVzX21lc3NhZ2VfZ2V0X2Vycm9yX25hbWUgKHJlcGx5KSk7CiAgICAgICBleGl0ICgxKTsKICAgICB9IAogCkBAIC0xMTAsNyArMTA1LDcgQEAKICAgICB9CiB9CiAKLS8qIFRoaXMgdGVzdCBvdXRwdXRzIFRBUCBzeW50YXg6IGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnLyAqLworCiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0xMjEsMjMgKzExNiwxNCBAQAogICBEQnVzQ29uZFZhciAqZGlzcGF0Y2hfY29uZDEsICppb19wYXRoX2NvbmQxOwogICBEQnVzTXV0ZXggKm11dGV4MiwgKmRpc3BhdGNoX211dGV4MiwgKmlvX3BhdGhfbXV0ZXgyOwogICBEQnVzQ29uZFZhciAqZGlzcGF0Y2hfY29uZDIsICppb19wYXRoX2NvbmQyOwotICBpbnQgdGVzdF9udW0gPSAwOwogCi0gIHByaW50ZiAoIiMgVGVzdGluZyBsYXRlIHRocmVhZCBpbml0XG4iKTsKKyAgcHJpbnRmICgiKioqIFRlc3RpbmcgbGF0ZSB0aHJlYWQgaW5pdFxuIik7CiAKICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOwogCiAgIGNvbm4gPSBkYnVzX2J1c19nZXQgKERCVVNfQlVTX1NFU1NJT04sICZlcnJvcik7CiAKLSAgaWYgKGNvbm4gPT0gTlVMTCkKLSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJCYWlsIG91dCEgRmFpbGVkIHRvIG9wZW4gY29ubmVjdGlvbiB0byBzZXNzaW9uIGJ1czogJXNcbiIsCi0gICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKLSAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLQotICBfZGJ1c19jb25uZWN0aW9uX3Rlc3RfZ2V0X2xvY2tzIChjb25uLCAmbXV0ZXgxLAorICBfZGJ1c19jb25uZWN0aW9uX3Rlc3RfZ2V0X2xvY2tzIChjb25uLCAmbXV0ZXgxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3BhdGNoX211dGV4MSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpb19wYXRoX211dGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3BhdGNoX2NvbmQxLApAQCAtMTU0LDEzICsxNDAsOCBAQAogICBjaGVja19tdXRleF9sb2NrIChpb19wYXRoX211dGV4MSwgaW9fcGF0aF9tdXRleDIsIFRSVUUpOwogICBjaGVja19jb25kdmFyX2xvY2sgKGRpc3BhdGNoX2NvbmQxLCBkaXNwYXRjaF9jb25kMiwgVFJVRSk7CiAgIGNoZWNrX2NvbmR2YXJfbG9jayAoaW9fcGF0aF9jb25kMSwgaW9fcGF0aF9jb25kMiwgVFJVRSk7Ci0gIHByaW50ZiAoIm9rICVkXG4iLCArK3Rlc3RfbnVtKTsKIAotICBpZiAoIWRidXNfdGhyZWFkc19pbml0X2RlZmF1bHQgKCkpCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQmFpbCBvdXQhIEZhaWxlZCB0byBpbml0aWFsaXNlIHRocmVhZHM6IE9PTVxuIik7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9CisgIGRidXNfdGhyZWFkc19pbml0X2RlZmF1bHQgKCk7CiAKICAgX2RidXNfY29ubmVjdGlvbl90ZXN0X2dldF9sb2NrcyAoY29ubiwgJm11dGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3BhdGNoX211dGV4MSwKQEAgLTE4MCw3ICsxNjEsNiBAQAogICBjaGVja19tdXRleF9sb2NrIChpb19wYXRoX211dGV4MSwgaW9fcGF0aF9tdXRleDIsIFRSVUUpOwogICBjaGVja19jb25kdmFyX2xvY2sgKGRpc3BhdGNoX2NvbmQxLCBkaXNwYXRjaF9jb25kMiwgVFJVRSk7CiAgIGNoZWNrX2NvbmR2YXJfbG9jayAoaW9fcGF0aF9jb25kMSwgaW9fcGF0aF9jb25kMiwgVFJVRSk7Ci0gIHByaW50ZiAoIm9rICVkXG4iLCArK3Rlc3RfbnVtKTsKIAogICBtZXRob2QgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsICgib3JnLmZyZWVkZXNrdG9wLlRlc3RTdWl0ZUVjaG9TZXJ2aWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9vcmcvZnJlZWRlc2t0b3AvVGVzdFN1aXRlIiwKQEAgLTE4OSw2ICsxNjksNiBAQAogICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubiwgbWV0aG9kLCBOVUxMKTsKICAgZGJ1c19tZXNzYWdlX3VucmVmIChtZXRob2QpOwogCi0gIHByaW50ZiAoIiMgVGVzdGluZyBjb21wbGV0ZWRcbjEuLiVkXG4iLCB0ZXN0X251bSk7CisgIHByaW50ZiAoIlN1Y2Nlc3MgKioqXG4iKTsKICAgZXhpdCAoMCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0L25hbWUtdGVzdC90ZXN0LXdhaXQtZm9yLWVjaG8ucHkgYi90ZXN0L25hbWUtdGVzdC90ZXN0LXdhaXQtZm9yLWVjaG8ucHkKaW5kZXggZDFiOWUwYy4uNDllY2JiNCAxMDA3NTUKLS0tIGEvdGVzdC9uYW1lLXRlc3QvdGVzdC13YWl0LWZvci1lY2hvLnB5CisrKyBiL3Rlc3QvbmFtZS10ZXN0L3Rlc3Qtd2FpdC1mb3ItZWNoby5weQpAQCAtNyw3ICs3LDcgQEAKICAgICBpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCiAgICAgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHT2JqZWN0CiBleGNlcHQ6Ci0gICAgcHJpbnQoIkZhaWxlZCBpbXBvcnQsIGFib3J0aW5nIHRlc3QiKQorICAgIHByaW50ICJGYWlsZWQgaW1wb3J0LCBhYm9ydGluZyB0ZXN0IgogICAgIHN5cy5leGl0KDApCiAKIGRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01haW5Mb29wKHNldF9hc19kZWZhdWx0PVRydWUpCkBAIC0xNiw3ICsxNiw3IEBACiBleGl0Y29kZSA9IDAKIAogZGVmIGhhbmRsZV9ub3JlY2VpcHQoKToKLSAgICBwcmludCgiRmFpbGVkIHRvIGdldCBzaWduYWwiKQorICAgIHByaW50ICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCIKICAgICBnbG9iYWwgZXhpdGNvZGUKICAgICBleGl0Y29kZSA9IDEKICAgICBsb29wLnF1aXQoKQpAQCAtMjYsNyArMjYsNyBAQAogYnVzID0gZGJ1cy5TZXNzaW9uQnVzKCkKIAogZGVmIHNpZ2hhbmRsZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICBwcmludCgiZ290IHNpZ25hbCIpCisgICAgcHJpbnQgImdvdCBzaWduYWwiCiAgICAgbG9vcC5xdWl0KCkgICAKIAogYnVzLmFkZF9zaWduYWxfcmVjZWl2ZXIoc2lnaGFuZGxlciwgZGJ1c19pbnRlcmZhY2U9J29yZy5mcmVlZGVza3RvcC5UZXN0U3VpdGUnLCBzaWduYWxfbmFtZT0nRm9vJykKZGlmZiAtLWdpdCBhL3Rlc3QvbmFtZS10ZXN0L3RtcC1zZXNzaW9uLWxpa2Utc3lzdGVtLmNvbmYgYi90ZXN0L25hbWUtdGVzdC90bXAtc2Vzc2lvbi1saWtlLXN5c3RlbS5jb25mCmluZGV4IGIzZDljYWUuLjI5YWIxMTUgMTAwNjQ0Ci0tLSBhL3Rlc3QvbmFtZS10ZXN0L3RtcC1zZXNzaW9uLWxpa2Utc3lzdGVtLmNvbmYKKysrIGIvdGVzdC9uYW1lLXRlc3QvdG1wLXNlc3Npb24tbGlrZS1zeXN0ZW0uY29uZgpAQCAtMTIsNiArMTIsOCBAQAogICAgICAgIHRoZSBiZWhhdmlvciBvZiBjaGlsZCBwcm9jZXNzZXMuIC0tPgogICA8a2VlcF91bWFzay8+CiAKKyAgPHN5c2xvZy8+CisKICAgPGxpc3Rlbj51bml4OnRtcGRpcj0vdG1wPC9saXN0ZW4+CiAKICAgPHN0YW5kYXJkX3Nlc3Npb25fc2VydmljZWRpcnMgLz4KZGlmZiAtLWdpdCBhL3Rlc3QvcmVsYXkuYyBiL3Rlc3QvcmVsYXkuYwppbmRleCAyYjNlZmI5Li5lMjc1YzE2IDEwMDY0NAotLS0gYS90ZXN0L3JlbGF5LmMKKysrIGIvdGVzdC9yZWxheS5jCkBAIC00Niw3ICs0Niw2IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgVGVzdE1haW5Db250ZXh0ICpjdHg7CiAgICAgREJ1c0Vycm9yIGU7Ci0gICAgZ2Jvb2xlYW4gc2tpcDsKIAogICAgIERCdXNTZXJ2ZXIgKnNlcnZlcjsKIApAQCAtMTIxLDIzICsxMjAsMTMgQEAKIAogc3RhdGljIHZvaWQKIHNldHVwIChGaXh0dXJlICpmLAotICAgICAgIGdjb25zdHBvaW50ZXIgYWRkcmVzcykKKyAgICBnY29uc3Rwb2ludGVyIGRhdGEgR19HTlVDX1VOVVNFRCkKIHsKLSAgdGVzdF90aW1lb3V0X3Jlc2V0ICgxKTsKLQogICBmLT5jdHggPSB0ZXN0X21haW5fY29udGV4dF9nZXQgKCk7CiAgIGRidXNfZXJyb3JfaW5pdCAoJmYtPmUpOwogICBnX3F1ZXVlX2luaXQgKCZmLT5tZXNzYWdlcyk7CiAKLSAgaWYgKChnX3N0cl9oYXNfcHJlZml4IChhZGRyZXNzLCAidGNwOiIpIHx8Ci0gICAgICAgZ19zdHJfaGFzX3ByZWZpeCAoYWRkcmVzcywgIm5vbmNlLXRjcDoiKSkgJiYKLSAgICAgICF0ZXN0X2NoZWNrX3RjcF93b3JrcyAoKSkKLSAgICB7Ci0gICAgICBmLT5za2lwID0gVFJVRTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgZi0+c2VydmVyID0gZGJ1c19zZXJ2ZXJfbGlzdGVuIChhZGRyZXNzLCAmZi0+ZSk7CisgIGYtPnNlcnZlciA9IGRidXNfc2VydmVyX2xpc3RlbiAoInRjcDpob3N0PTEyNy4wLjAuMSIsICZmLT5lKTsKICAgYXNzZXJ0X25vX2Vycm9yICgmZi0+ZSk7CiAgIGdfYXNzZXJ0IChmLT5zZXJ2ZXIgIT0gTlVMTCk7CiAKQEAgLTE1Myw5ICsxNDIsNiBAQAogICBkYnVzX2Jvb2xfdCBoYXZlX21lbTsKICAgY2hhciAqYWRkcmVzczsKIAotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KICAgZ19hc3NlcnQgKGYtPmxlZnRfc2VydmVyX2Nvbm4gPT0gTlVMTCk7CiAgIGdfYXNzZXJ0IChmLT5yaWdodF9zZXJ2ZXJfY29ubiA9PSBOVUxMKTsKIApAQCAtMjE3LDkgKzIwMyw2IEBACiB7CiAgIERCdXNNZXNzYWdlICppbmNvbWluZzsKIAotICBpZiAoZi0+c2tpcCkKLSAgICByZXR1cm47Ci0KICAgdGVzdF9jb25uZWN0IChmLCBkYXRhKTsKIAogICBzZW5kX29uZSAoZiwgIkZpcnN0Iik7CkBAIC0yNTIsOSArMjM1LDYgQEAKICAgREJ1c01lc3NhZ2UgKmluY29taW5nOwogICBndWludCBpOwogCi0gIGlmIChmLT5za2lwKQotICAgIHJldHVybjsKLQogICB0ZXN0X2Nvbm5lY3QgKGYsIGRhdGEpOwogCiAgIC8qIFRoaXMgd2FzIGFuIGF0dGVtcHQgdG8gcmVwcm9kdWNlIGZkLm8gIzM0MzkzLiBJdCBkaWRuJ3Qgd29yay4gKi8KQEAgLTMzOSwyMSArMzE5LDEyIEBACiB7CiAgIHRlc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKIAotICBnX3Rlc3RfYWRkICgiL2Nvbm5lY3QvdGNwIiwgRml4dHVyZSwgInRjcDpob3N0PTEyNy4wLjAuMSIsIHNldHVwLAorICBnX3Rlc3RfYWRkICgiL2Nvbm5lY3QiLCBGaXh0dXJlLCBOVUxMLCBzZXR1cCwKICAgICAgIHRlc3RfY29ubmVjdCwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL3JlbGF5L3RjcCIsIEZpeHR1cmUsICJ0Y3A6aG9zdD0xMjcuMC4wLjEiLCBzZXR1cCwKKyAgZ190ZXN0X2FkZCAoIi9yZWxheSIsIEZpeHR1cmUsIE5VTEwsIHNldHVwLAogICAgICAgdGVzdF9yZWxheSwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2xpbWl0L3RjcCIsIEZpeHR1cmUsICJ0Y3A6aG9zdD0xMjcuMC4wLjEiLCBzZXR1cCwKKyAgZ190ZXN0X2FkZCAoIi9saW1pdCIsIEZpeHR1cmUsIE5VTEwsIHNldHVwLAogICAgICAgdGVzdF9saW1pdCwgdGVhcmRvd24pOwogCi0jaWZkZWYgREJVU19VTklYCi0gIGdfdGVzdF9hZGQgKCIvY29ubmVjdC91bml4IiwgRml4dHVyZSwgInVuaXg6dG1wZGlyPS90bXAiLCBzZXR1cCwKLSAgICAgIHRlc3RfY29ubmVjdCwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL3JlbGF5L3VuaXgiLCBGaXh0dXJlLCAidW5peDp0bXBkaXI9L3RtcCIsIHNldHVwLAotICAgICAgdGVzdF9yZWxheSwgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL2xpbWl0L3VuaXgiLCBGaXh0dXJlLCAidW5peDp0bXBkaXI9L3RtcCIsIHNldHVwLAotICAgICAgdGVzdF9saW1pdCwgdGVhcmRvd24pOwotI2VuZGlmCi0KICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0L3NkLWFjdGl2YXRpb24uYyBiL3Rlc3Qvc2QtYWN0aXZhdGlvbi5jCmluZGV4IDhlMGIyYWYuLmYwNDUwMTIgMTAwNjQ0Ci0tLSBhL3Rlc3Qvc2QtYWN0aXZhdGlvbi5jCisrKyBiL3Rlc3Qvc2QtYWN0aXZhdGlvbi5jCkBAIC0xLDcgKzEsNCBAQAotLyogVW5pdCB0ZXN0cyBmb3Igc3lzdGVtZCBhY3RpdmF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgQXBwQXJtb3IuCi0gKgotICogV2UgY29tcGlsZSB0aGlzIHNvdXJjZSBmaWxlIHR3aWNlOiBvbmNlIHdpdGggQXBwQXJtb3Igc3VwcG9ydCAoaWYgYXZhaWxhYmxlKQotICogYW5kIG9uY2Ugd2l0aG91dC4KKy8qIFVuaXQgdGVzdHMgZm9yIHN5c3RlbWQgYWN0aXZhdGlvbi4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAxMC0yMDExIE5va2lhIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgwqkgMjAxNSBDb2xsYWJvcmEgTHRkLgpAQCAtMjksMTYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpZiBkZWZpbmVkKEhBVkVfQVBQQVJNT1JfMl8xMCkgJiYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikKLSNpbmNsdWRlIDxzeXMvYXBwYXJtb3IuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAidGVzdC11dGlscy1nbGliLmgiCiAKQEAgLTUyLDM1ICs0MCwxNCBAQAogCiAgICAgREJ1c0Nvbm5lY3Rpb24gKmNhbGxlcjsKICAgICBjb25zdCBjaGFyICpjYWxsZXJfbmFtZTsKLSAgICBEQnVzTWVzc2FnZSAqY2FsbGVyX21lc3NhZ2U7Ci0gICAgZGJ1c19ib29sX3QgY2FsbGVyX2ZpbHRlcl9hZGRlZDsKLQogICAgIERCdXNDb25uZWN0aW9uICpzeXN0ZW1kOwogICAgIGNvbnN0IGNoYXIgKnN5c3RlbWRfbmFtZTsKICAgICBEQnVzTWVzc2FnZSAqc3lzdGVtZF9tZXNzYWdlOwotICAgIGRidXNfYm9vbF90IHN5c3RlbWRfZmlsdGVyX2FkZGVkOwotCiAgICAgREJ1c0Nvbm5lY3Rpb24gKmFjdGl2YXRlZDsKICAgICBjb25zdCBjaGFyICphY3RpdmF0ZWRfbmFtZTsKICAgICBEQnVzTWVzc2FnZSAqYWN0aXZhdGVkX21lc3NhZ2U7Ci0gICAgZGJ1c19ib29sX3QgYWN0aXZhdGVkX2ZpbHRlcl9hZGRlZDsKLQotICAgIGdjaGFyICp0cmFuc2llbnRfc2VydmljZV9maWxlOwotICAgIGdjaGFyICp0bXBfcnVudGltZV9kaXI7CiB9IEZpeHR1cmU7CiAKLXR5cGVkZWYgZW51bQotewotICBGTEFHX0VBUkxZX1RSQU5TSUVOVF9TRVJWSUNFID0gKDEgPDwgMCksCi0gIEZMQUdfTk9ORSA9IDAKLX0gRmxhZ3M7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdjaGFyICpidXNfbmFtZTsKLSAgRmxhZ3MgZmxhZ3M7Ci19IENvbmZpZzsKLQogLyogdGhpcyBpcyBhIG1hY3JvIHNvIGl0IGdldHMgdGhlIHJpZ2h0IGxpbmUgbnVtYmVyICovCiAjZGVmaW5lIGFzc2VydF9zaWduYWwobSwgXAogICAgIHNlbmRlciwgcGF0aCwgaWZhY2UsIG1lbWJlciwgc2lnbmF0dXJlLCBcCkBAIC0xMjcsMjEgKzk0LDYgQEAKICAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfZ2V0X3JlcGx5X3NlcmlhbCAobSksICE9LCAwKTsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBhc3NlcnRfZXJyb3JfcmVwbHkobSwgc2VuZGVyLCBkZXN0aW5hdGlvbiwgZXJyb3JfbmFtZSkgXAotZG8geyBcCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19tZXNzYWdlX3R5cGVfdG9fc3RyaW5nIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKG0pKSwgXAotICAgICAgPT0sIGRidXNfbWVzc2FnZV90eXBlX3RvX3N0cmluZyAoREJVU19NRVNTQUdFX1RZUEVfRVJST1IpKTsgXAotICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyIChtKSwgPT0sIHNlbmRlcik7IFwKLSAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X2Rlc3RpbmF0aW9uIChtKSwgPT0sIGRlc3RpbmF0aW9uKTsgXAotICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfbWVzc2FnZV9nZXRfZXJyb3JfbmFtZSAobSksID09LCBlcnJvcl9uYW1lKTsgXAotICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfbWVzc2FnZV9nZXRfcGF0aCAobSksID09LCBOVUxMKTsgXAotICBnX2Fzc2VydF9jbXBzdHIgKGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlIChtKSwgPT0sIE5VTEwpOyBcCi0gIGdfYXNzZXJ0X2NtcHN0ciAoZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIgKG0pLCA9PSwgTlVMTCk7IFwKLSAgZ19hc3NlcnRfY21wc3RyIChkYnVzX21lc3NhZ2VfZ2V0X3NpZ25hdHVyZSAobSksID09LCAicyIpOyBcCi0gIGdfYXNzZXJ0X2NtcGludCAoZGJ1c19tZXNzYWdlX2dldF9zZXJpYWwgKG0pLCAhPSwgMCk7IFwKLSAgZ19hc3NlcnRfY21waW50IChkYnVzX21lc3NhZ2VfZ2V0X3JlcGx5X3NlcmlhbCAobSksICE9LCAwKTsgXAotfSB3aGlsZSAoMCkKLQogc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0CiBzeXN0ZW1kX2ZpbHRlciAoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sCiAgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsCkBAIC0xOTUsMTUyICsxNDcsMjcgQEAKICAgZ19hc3NlcnQgKGYtPmFjdGl2YXRlZF9tZXNzYWdlID09IE5VTEwpOwogICBmLT5hY3RpdmF0ZWRfbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9yZWYgKG1lc3NhZ2UpOwogCi0gIC8qIFRlc3QgY29kZSBpcyBleHBlY3RlZCB0byByZXBseSB0byBtZXRob2QgY2FsbHMgaXRzZWxmICovCi0gIGlmIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKG1lc3NhZ2UpID09IERCVVNfTUVTU0FHRV9UWVBFX01FVEhPRF9DQUxMKQotICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7Ci0KICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOwogfQogCi1zdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQKLWNhbGxlcl9maWx0ZXIgKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLAotICAgIERCdXNNZXNzYWdlICptZXNzYWdlLAotICAgIHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgRml4dHVyZSAqZiA9IHVzZXJfZGF0YTsKLQotICBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbCAobWVzc2FnZSwgREJVU19JTlRFUkZBQ0VfREJVUywKLSAgICAgICAgIk5hbWVBY3F1aXJlZCIpIHx8Ci0gICAgICBkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9EQlVTLAotICAgICAgICAiTmFtZUxvc3QiKSkKLSAgICB7Ci0gICAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Ci0gICAgfQotCi0gIGdfYXNzZXJ0IChmLT5jYWxsZXJfbWVzc2FnZSA9PSBOVUxMKTsKLSAgZi0+Y2FsbGVyX21lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfcmVmIChtZXNzYWdlKTsKLQotICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1maXh0dXJlX2NyZWF0ZV90cmFuc2llbnRfc2VydmljZSAoRml4dHVyZSAqZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbmFtZSkKLXsKLSAgZ2NoYXIgKnNlcnZpY2U7Ci0gIGdjaGFyICpjb250ZW50OwotICBnYm9vbGVhbiBvazsKLQotICBzZXJ2aWNlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMuc2VydmljZSIsIG5hbWUpOwotICBmLT50cmFuc2llbnRfc2VydmljZV9maWxlID0gZ19idWlsZF9maWxlbmFtZSAoZi0+dG1wX3J1bnRpbWVfZGlyLCAiZGJ1cy0xIiwKLSAgICAgICJzZXJ2aWNlcyIsIHNlcnZpY2UsIE5VTEwpOwotICBnX2ZyZWUgKHNlcnZpY2UpOwotCi0gIGNvbnRlbnQgPSBnX3N0cmR1cF9wcmludGYgKAotICAgICAgIltELUJVUyBTZXJ2aWNlXVxuIgotICAgICAgIk5hbWU9JXNcbiIKLSAgICAgICJFeGVjPS9iaW4vZmFsc2UgJXNcbiIKLSAgICAgICJTeXN0ZW1kU2VydmljZT1kYnVzLSVzLnNlcnZpY2VcbiIsIG5hbWUsIG5hbWUsIG5hbWUpOwotICBvayA9IGdfZmlsZV9zZXRfY29udGVudHMgKGYtPnRyYW5zaWVudF9zZXJ2aWNlX2ZpbGUsIGNvbnRlbnQsIC0xLCAmZi0+Z2UpOwotICBnX2Fzc2VydF9ub19lcnJvciAoZi0+Z2UpOwotICBnX2Fzc2VydCAob2spOwotICBnX2ZyZWUgKGNvbnRlbnQpOwotfQotCiBzdGF0aWMgdm9pZAogc2V0dXAgKEZpeHR1cmUgKmYsCi0gICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0KQorICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCBHX0dOVUNfVU5VU0VEKQogewotICBjb25zdCBDb25maWcgKmNvbmZpZyA9IGNvbnRleHQ7Ci0jaWYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikgJiYgZGVmaW5lZChIQVZFX0FQUEFSTU9SXzJfMTApCi0gIGFhX2ZlYXR1cmVzICpmZWF0dXJlczsKLSNlbmRpZgorICBmLT5jdHggPSB0ZXN0X21haW5fY29udGV4dF9nZXQgKCk7CiAKICAgZi0+Z2UgPSBOVUxMOwogICBkYnVzX2Vycm9yX2luaXQgKCZmLT5lKTsKIAotICBmLT50bXBfcnVudGltZV9kaXIgPSBnX2Rpcl9tYWtlX3RtcCAoImRidXMtZGFlbW9uLXRlc3QuWFhYWFhYIiwgJmYtPmdlKTsKLSAgZ19hc3NlcnRfbm9fZXJyb3IgKGYtPmdlKTsKLQotICBpZiAoY29uZmlnICE9IE5VTEwgJiYgKGNvbmZpZy0+ZmxhZ3MgJiBGTEFHX0VBUkxZX1RSQU5TSUVOVF9TRVJWSUNFKSAhPSAwKQotICAgIHsKLSAgICAgIGdjaGFyICpkYnVzMSA9IGdfYnVpbGRfZmlsZW5hbWUgKGYtPnRtcF9ydW50aW1lX2RpciwgImRidXMtMSIsIE5VTEwpOwotICAgICAgZ2NoYXIgKnNlcnZpY2VzID0gZ19idWlsZF9maWxlbmFtZSAoZGJ1czEsICJzZXJ2aWNlcyIsIE5VTEwpOwotCi0gICAgICAvKiBXZSBqdXN0IGNyZWF0ZWQgaXQgc28gdGhlIGRpcmVjdG9yaWVzIHNob3VsZG4ndCBleGlzdCB5ZXQgKi8KLSAgICAgIHRlc3RfbWtkaXIgKGRidXMxLCAwNzAwKTsKLSAgICAgIHRlc3RfbWtkaXIgKHNlcnZpY2VzLCAwNzAwKTsKLSAgICAgIGZpeHR1cmVfY3JlYXRlX3RyYW5zaWVudF9zZXJ2aWNlIChmLCBjb25maWctPmJ1c19uYW1lKTsKLSAgICAgIGdfZnJlZSAoZGJ1czEpOwotICAgICAgZ19mcmVlIChzZXJ2aWNlcyk7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikgJiYgIWRlZmluZWQoSEFWRV9BUFBBUk1PUl8yXzEwKQotCi0gIGdfdGVzdF9za2lwICgiQXBwQXJtb3Igc3VwcG9ydCBub3QgY29tcGlsZWQgb3IgQXBwQXJtb3IgMi4xMCB1bmF2YWlsYWJsZSIpOwotICByZXR1cm47Ci0KLSNlbHNlCi0KLSNpZiBkZWZpbmVkKERCVVNfVEVTVF9BUFBBUk1PUl9BQ1RJVkFUSU9OKQotICBpZiAoIWFhX2lzX2VuYWJsZWQgKCkpCi0gICAgewotICAgICAgZ190ZXN0X21lc3NhZ2UgKCJhYV9pc19lbmFibGVkKCkgLT4gJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgZ190ZXN0X3NraXAgKCJBcHBBcm1vciBub3QgZW5hYmxlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBpZiAoYWFfZmVhdHVyZXNfbmV3X2Zyb21fa2VybmVsICgmZmVhdHVyZXMpICE9IDApCi0gICAgewotICAgICAgZ190ZXN0X3NraXAgKCJVbmFibGUgdG8gY2hlY2sgQXBwQXJtb3IgZmVhdHVyZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgaWYgKCFhYV9mZWF0dXJlc19zdXBwb3J0cyAoZmVhdHVyZXMsICJkYnVzL21hc2svc2VuZCIpIHx8Ci0gICAgICAhYWFfZmVhdHVyZXNfc3VwcG9ydHMgKGZlYXR1cmVzLCAiZGJ1cy9tYXNrL3JlY2VpdmUiKSkKLSAgICB7Ci0gICAgICBnX3Rlc3Rfc2tpcCAoIkQtQnVzIHNlbmQvcmVjZWl2ZSBtZWRpYXRpb24gdW5hdmFpbGFibGUiKTsKLSAgICAgIGFhX2ZlYXR1cmVzX3VucmVmIChmZWF0dXJlcyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIGFhX2ZlYXR1cmVzX3VucmVmIChmZWF0dXJlcyk7Ci0jZW5kaWYKLQotICBmLT5jdHggPSB0ZXN0X21haW5fY29udGV4dF9nZXQgKCk7Ci0KICAgZi0+YWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uICgKICAgICAgICJ2YWxpZC1jb25maWctZmlsZXMvc3lzdGVtZC1hY3RpdmF0aW9uLmNvbmYiLAotICAgICAgVEVTVF9VU0VSX01FLCBmLT50bXBfcnVudGltZV9kaXIsICZmLT5kYWVtb25fcGlkKTsKKyAgICAgIFRFU1RfVVNFUl9NRSwgJmYtPmRhZW1vbl9waWQpOwogCiAgIGlmIChmLT5hZGRyZXNzID09IE5VTEwpCiAgICAgcmV0dXJuOwogCi0jaWYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikKLSAgLyoKLSAgICogTWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgTFNNIHNlY3VyaXR5IGxhYmVsIChhbmQgb3RoZXIgcHJvY2VzcwotICAgKiBwcm9wZXJ0aWVzKSB0aGF0IGFyZSB1c2VkIGZvciBhY2Nlc3MtY29udHJvbCBhcmUgd2hhdGV2ZXIgd2FzIGN1cnJlbnQKLSAgICogYXQgdGhlIHRpbWUgdGhlIGNvbm5lY3Rpb24gd2FzIG9wZW5lZC4KLSAgICoKLSAgICogNDIgaXMgYXJiaXRyYXJ5LiBJbiBhIHJlYWwgdXNlIG9mIEFwcEFybW9yIGl0IHdvdWxkIGJlIGEgc2VjdXJlbHktcmFuZG9tCi0gICAqIHZhbHVlLCB0byBwcmV2ZW50IGxlc3MtcHJpdmlsZWdlZCBjb2RlICh0aGF0IGRvZXMgbm90IGtub3cgdGhlIG1hZ2ljCi0gICAqIHZhbHVlKSBmcm9tIGNoYW5naW5nIGJhY2suCi0gICAqLwotICBpZiAoYWFfY2hhbmdlX2hhdCAoImNhbGxlciIsIDQyKSAhPSAwKQotICAgIGdfZXJyb3IgKCJVbmFibGUgdG8gY2hhbmdlIHByb2ZpbGUgdG8gLi4uLy9eY2FsbGVyOiAlcyIsCi0gICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSNlbmRpZgotCiAgIGYtPmNhbGxlciA9IHRlc3RfY29ubmVjdF90b19idXMgKGYtPmN0eCwgZi0+YWRkcmVzcyk7CiAgIGYtPmNhbGxlcl9uYW1lID0gZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5jYWxsZXIpOwotCi0jaWYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikKLSAgaWYgKGFhX2NoYW5nZV9oYXQgKE5VTEwsIDQyKSAhPSAwKQotICAgIGdfZXJyb3IgKCJVbmFibGUgdG8gY2hhbmdlIGJhY2sgdG8gaW5pdGlhbCBwcm9maWxlOiAlcyIsCi0gICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSNlbmRpZgotCi0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM3Niw3ICsyMDMsNiBAQAogICBmLT5zeXN0ZW1kID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoZi0+Y3R4LCBmLT5hZGRyZXNzKTsKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlciAoZi0+c3lzdGVtZCwgc3lzdGVtZF9maWx0ZXIsIGYsIE5VTEwpKQogICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZi0+c3lzdGVtZF9maWx0ZXJfYWRkZWQgPSBUUlVFOwogICBmLT5zeXN0ZW1kX25hbWUgPSBkYnVzX2J1c19nZXRfdW5pcXVlX25hbWUgKGYtPnN5c3RlbWQpOwogICB0YWtlX3dlbGxfa25vd25fbmFtZSAoZiwgZi0+c3lzdGVtZCwgIm9yZy5mcmVlZGVza3RvcC5zeXN0ZW1kMSIpOwogCkBAIC0zOTYsNyArMjIyLDYgQEAKICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlciAoZi0+YWN0aXZhdGVkLCBhY3RpdmF0ZWRfZmlsdGVyLAogICAgICAgICBmLCBOVUxMKSkKICAgICBnX2Vycm9yICgiT09NIik7Ci0gIGYtPmFjdGl2YXRlZF9maWx0ZXJfYWRkZWQgPSBUUlVFOwogICBmLT5hY3RpdmF0ZWRfbmFtZSA9IGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+YWN0aXZhdGVkKTsKICAgdGFrZV93ZWxsX2tub3duX25hbWUgKGYsIGYtPmFjdGl2YXRlZCwgImNvbS5leGFtcGxlLlN5c3RlbWRBY3RpdmF0YWJsZTEiKTsKIApAQCAtNjg0LDMyNCArNTA5LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXRlc3RfZGVueV9zZW5kIChGaXh0dXJlICpmLAotICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm07Ci0gIGNvbnN0IENvbmZpZyAqY29uZmlnID0gY29udGV4dDsKLQotICBnX2Fzc2VydCAoY29uZmlnICE9IE5VTEwpOwotICBnX2Fzc2VydCAoY29uZmlnLT5idXNfbmFtZSAhPSBOVUxMKTsKLQotICBpZiAoZi0+YWRkcmVzcyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5jYWxsZXIsIGNhbGxlcl9maWx0ZXIsIGYsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBmLT5jYWxsZXJfZmlsdGVyX2FkZGVkID0gVFJVRTsKLQotICAvKiBUaGUgc2VuZGVyIHNlbmRzIGEgbWVzc2FnZSB0byBhbiBhY3RpdmF0YWJsZSBzZXJ2aWNlLiAqLwotICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoY29uZmlnLT5idXNfbmFtZSwgIi9mb28iLAotICAgICAgImNvbS5leGFtcGxlLmJhciIsICJDYWxsIik7Ci0gIGlmIChtID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfY29ubmVjdGlvbl9zZW5kIChmLT5jYWxsZXIsIG0sIE5VTEwpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIC8qCi0gICAqIEV2ZW4gYmVmb3JlIHRoZSBmYWtlIHN5c3RlbWQgY29ubmVjdHMgdG8gdGhlIGJ1cywgd2UgZ2V0IGFuIGVycm9yCi0gICAqIGJhY2s6IGFjdGl2YXRpb24gaXMgbm90IGFsbG93ZWQuCi0gICAqCi0gICAqIEluIHRoZSBub3JtYWwgY2FzZSwgdGhpcyBpcyBiZWNhdXNlIHRoZSBYTUwgcG9saWN5IGRvZXMgbm90IGFsbG93Ci0gICAqIGFueW9uZSB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBidXMgbmFtZSBjb20uZXhhbXBsZS5TZW5kRGVuaWVkLgotICAgKgotICAgKiBJbiB0aGUgQXBwQXJtb3IgY2FzZSwgdGhpcyBpcyBiZWNhdXNlIHRoZSBBcHBBcm1vciBwb2xpY3kgZG9lcyBub3QgYWxsb3cKLSAgICogdGhpcyBwcm9jZXNzIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIGJ1cyBuYW1lCi0gICAqIGNvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTmFtZSwgb3IgdG8gdGhlIGxhYmVsCi0gICAqIEBEQlVTX1RFU1RfRVhFQ0AvY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5QXBwQXJtb3JMYWJlbCB0aGF0IHdlIGFzc3VtZSB0aGUKLSAgICogc2VydmljZSBjb20uZXhhbXBsZS5TZW5kRGVuaWVkQnlBcHBBcm1vckxhYmVsIHdpbGwgcmVjZWl2ZSBhZnRlciBzeXN0ZW1kCi0gICAqIHJ1bnMgaXQuCi0gICAqLwotCi0gIHdoaWxlIChmLT5jYWxsZXJfbWVzc2FnZSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgbSA9IGYtPmNhbGxlcl9tZXNzYWdlOwotICBmLT5jYWxsZXJfbWVzc2FnZSA9IE5VTEw7Ci0gIGFzc2VydF9lcnJvcl9yZXBseSAobSwgREJVU19TRVJWSUNFX0RCVVMsIGYtPmNhbGxlcl9uYW1lLAotICAgICAgREJVU19FUlJPUl9BQ0NFU1NfREVOSUVEKTsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZGVueV9yZWNlaXZlIChGaXh0dXJlICpmLAotICAgIGdjb25zdHBvaW50ZXIgY29udGV4dCkKLXsKLSAgREJ1c01lc3NhZ2UgKm07Ci0gIGNvbnN0IENvbmZpZyAqY29uZmlnID0gY29udGV4dDsKLQotICBnX2Fzc2VydCAoY29uZmlnICE9IE5VTEwpOwotICBnX2Fzc2VydCAoY29uZmlnLT5idXNfbmFtZSAhPSBOVUxMKTsKLQotICBpZiAoZi0+YWRkcmVzcyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5jYWxsZXIsIGNhbGxlcl9maWx0ZXIsIGYsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBmLT5jYWxsZXJfZmlsdGVyX2FkZGVkID0gVFJVRTsKLQotICAvKiBUaGUgc2VuZGVyIHNlbmRzIGEgbWVzc2FnZSB0byBhbiBhY3RpdmF0YWJsZSBzZXJ2aWNlLgotICAgKiBXZSBzZXQgdGhlIGludGVyZmFjZSBuYW1lIGVxdWFsIHRvIHRoZSBidXMgbmFtZSB0byBtYWtlIGl0Ci0gICAqIGVhc2llciB0byB3cml0ZSB0aGUgbmVjZXNzYXJ5IHBvbGljeSBydWxlcy4gKi8KLSAgbSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKGNvbmZpZy0+YnVzX25hbWUsICIvZm9vIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+YnVzX25hbWUsICJDYWxsIik7Ci0gIGlmIChtID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfY29ubmVjdGlvbl9zZW5kIChmLT5jYWxsZXIsIG0sIE5VTEwpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIC8qIFRoZSBmYWtlIHN5c3RlbWQgY29ubmVjdHMgdG8gdGhlIGJ1cy4gKi8KLSAgZi0+c3lzdGVtZCA9IHRlc3RfY29ubmVjdF90b19idXMgKGYtPmN0eCwgZi0+YWRkcmVzcyk7Ci0gIGlmICghZGJ1c19jb25uZWN0aW9uX2FkZF9maWx0ZXIgKGYtPnN5c3RlbWQsIHN5c3RlbWRfZmlsdGVyLCBmLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0gIGYtPnN5c3RlbWRfZmlsdGVyX2FkZGVkID0gVFJVRTsKLSAgZi0+c3lzdGVtZF9uYW1lID0gZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5zeXN0ZW1kKTsKLSAgdGFrZV93ZWxsX2tub3duX25hbWUgKGYsIGYtPnN5c3RlbWQsICJvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEiKTsKLQotICAvKiBJdCBnZXRzIGl0cyBhY3RpdmF0aW9uIHJlcXVlc3QuICovCi0gIHdoaWxlIChmLT5zeXN0ZW1kX21lc3NhZ2UgPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIG0gPSBmLT5zeXN0ZW1kX21lc3NhZ2U7Ci0gIGYtPnN5c3RlbWRfbWVzc2FnZSA9IE5VTEw7Ci0gIGFzc2VydF9zaWduYWwgKG0sIERCVVNfU0VSVklDRV9EQlVTLCBEQlVTX1BBVEhfREJVUywKLSAgICAgICJvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEuQWN0aXZhdG9yIiwgIkFjdGl2YXRpb25SZXF1ZXN0IiwgInMiLAotICAgICAgIm9yZy5mcmVlZGVza3RvcC5zeXN0ZW1kMSIpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIC8qIHN5c3RlbWQgc3RhcnRzIHRoZSBhY3RpdmF0YWJsZSBzZXJ2aWNlLiAqLwotCi0jaWYgZGVmaW5lZChEQlVTX1RFU1RfQVBQQVJNT1JfQUNUSVZBVElPTikgJiYgZGVmaW5lZChIQVZFX0FQUEFSTU9SXzJfMTApCi0gIC8qIFRoZSB1c2Ugb2YgNDIgaGVyZSBpcyBhcmJpdHJhcnksIHNlZSBzZXR1cCgpLiAqLwotICBpZiAoYWFfY2hhbmdlX2hhdCAoY29uZmlnLT5idXNfbmFtZSwgNDIpICE9IDApCi0gICAgZ19lcnJvciAoIlVuYWJsZSB0byBjaGFuZ2UgcHJvZmlsZSB0byAuLi4vL14lczogJXMiLAotICAgICAgICAgICAgIGNvbmZpZy0+YnVzX25hbWUsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0jZW5kaWYKLQotICBmLT5hY3RpdmF0ZWQgPSB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChmLT5jdHgsIGYtPmFkZHJlc3MpOwotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5hY3RpdmF0ZWQsIGFjdGl2YXRlZF9maWx0ZXIsCi0gICAgICAgIGYsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLSAgZi0+YWN0aXZhdGVkX2ZpbHRlcl9hZGRlZCA9IFRSVUU7Ci0gIGYtPmFjdGl2YXRlZF9uYW1lID0gZGJ1c19idXNfZ2V0X3VuaXF1ZV9uYW1lIChmLT5hY3RpdmF0ZWQpOwotICB0YWtlX3dlbGxfa25vd25fbmFtZSAoZiwgZi0+YWN0aXZhdGVkLCBjb25maWctPmJ1c19uYW1lKTsKLQotI2lmIGRlZmluZWQoREJVU19URVNUX0FQUEFSTU9SX0FDVElWQVRJT04pICYmIGRlZmluZWQoSEFWRV9BUFBBUk1PUl8yXzEwKQotICBpZiAoYWFfY2hhbmdlX2hhdCAoTlVMTCwgNDIpICE9IDApCi0gICAgZ19lcnJvciAoIlVuYWJsZSB0byBjaGFuZ2UgYmFjayB0byBpbml0aWFsIHByb2ZpbGU6ICVzIiwKLSAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotI2VuZGlmCi0KLSAgLyoKLSAgICogV2UgcmUtZG8gdGhlIG1lc3NhZ2UgbWF0Y2hpbmcsIGFuZCBub3cgdGhlIG1lc3NhZ2UgaXMKLSAgICogZm9yYmlkZGVuIGJ5IHRoZSByZWNlaXZlIHBvbGljeS4KLSAgICoKLSAgICogSW4gdGhlIG5vcm1hbCBjYXNlLCB0aGlzIGlzIGJlY2F1c2UgdGhlIFhNTCBwb2xpY3kgZG9lcyBub3QgYWxsb3cKLSAgICogcmVjZWl2aW5nIGFueSBtZXNzYWdlIHdpdGggaW50ZXJmYWNlIGNvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWQuCi0gICAqIFdlIGNhbid0IHVzZSB0aGUgcmVjaXBpZW50J3MgYnVzIG5hbWUgaGVyZSBiZWNhdXNlIHRoZSBYTUwgcG9saWN5Ci0gICAqIGhhcyBubyBzeW50YXggZm9yIHByZXZlbnRpbmcgdGhlIG93bmVyIG9mIGEgbmFtZSBmcm9tIHJlY2VpdmluZwotICAgKiBtZXNzYWdlcyAtIHRoYXQgd291bGQgYmUgcG9pbnRsZXNzLCBiZWNhdXNlIHRoZSBzZW5kZXIgY291bGQganVzdAotICAgKiBvcGVuIGFub3RoZXIgY29ubmVjdGlvbiBhbmQgbm90IG93biB0aGUgc2FtZSBuYW1lIG9uIHRoYXQgY29ubmVjdGlvbi4KLSAgICoKLSAgICogSW4gdGhlIEFwcEFybW9yIGNhc2UsIHRoaXMgaXMgYmVjYXVzZSB0aGUgQXBwQXJtb3IgcG9saWN5IGRvZXMgbm90IGFsbG93Ci0gICAqIHJlY2VpdmluZyBtZXNzYWdlcyB3aXRoIGludGVyZmFjZSBjb20uZXhhbXBsZS5SZWNlaXZlRGVuaWVkQnlBcHBBcm1vcgotICAgKiBmcm9tIGEgcGVlciB3aXRoIHRoZSBzYW1lIGxhYmVsIHdlIGhhdmUuIEFnYWluLCB3ZSBjYW4ndCB1c2UgdGhlCi0gICAqIHJlY2lwaWVudCdzIGJ1cyBuYW1lIGJlY2F1c2UgdGhlcmUgaXMgbm8gc3ludGF4IGZvciB0aGlzLgotICAgKi8KLSAgd2hpbGUgKGYtPmNhbGxlcl9tZXNzYWdlID09IE5VTEwpCi0gICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKLQotICBtID0gZi0+Y2FsbGVyX21lc3NhZ2U7Ci0gIGYtPmNhbGxlcl9tZXNzYWdlID0gTlVMTDsKLSAgYXNzZXJ0X2Vycm9yX3JlcGx5IChtLCBEQlVTX1NFUlZJQ0VfREJVUywgZi0+Y2FsbGVyX25hbWUsCi0gICAgICBEQlVTX0VSUk9SX0FDQ0VTU19ERU5JRUQpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIC8qIFRoZSBhY3RpdmF0ZWQgc2VydmljZSBuZXZlciBldmVuIHNhdyBpdC4gKi8KLSAgZ19hc3NlcnQgKGYtPmFjdGl2YXRlZF9tZXNzYWdlID09IE5VTEwpOwotfQotCi0vKgotICogVGVzdCB0aGF0IHdlIGNhbiBzZXQgdXAgdHJhbnNpZW50IHNlcnZpY2VzLgotICoKLSAqIElmIChmbGFncyAmIEZMQUdfRUFSTFlfVFJBTlNJRU5UX1NFUlZJQ0UpLCB3ZSBhc3NlcnQgdGhhdCBhIHNlcnZpY2UgdGhhdAotICogd2FzIGRlcGxveWVkIGJlZm9yZSBzdGFydGluZyBzeXN0ZW1kIChpbiBzZXR1cCgpKSBpcyBhdmFpbGFibGUuCi0gKgotICogT3RoZXJ3aXNlLCB3ZSBhc3NlcnQgdGhhdCBhIHNlcnZpY2UgdGhhdCBpcyBkZXBsb3llZCB3aGlsZSBkYnVzLWRhZW1vbgotICogaXMgYWxyZWFkeSBydW5uaW5nIGJlY29tZXMgYXZhaWxhYmxlIGFmdGVyIHJlbG9hZGluZyB0aGUgZGJ1cy1kYWVtb24KLSAqIGNvbmZpZ3VyYXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkCi10ZXN0X3RyYW5zaWVudF9zZXJ2aWNlcyAoRml4dHVyZSAqZiwKLSAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIGNvbnN0IENvbmZpZyAqY29uZmlnID0gY29udGV4dDsKLSAgREJ1c01lc3NhZ2UgKm0gPSBOVUxMOwotICBEQnVzTWVzc2FnZSAqc2VuZF9yZXBseSA9IE5VTEw7Ci0gIERCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7Ci0gIERCdXNQZW5kaW5nQ2FsbCAqcGM7Ci0KLSAgZ19hc3NlcnQgKGNvbmZpZyAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGNvbmZpZy0+YnVzX25hbWUgIT0gTlVMTCk7Ci0KLSAgaWYgKGYtPmFkZHJlc3MgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgLyogQ29ubmVjdCB0aGUgZmFrZSBzeXN0ZW1kIHRvIHRoZSBidXMuICovCi0gIGYtPnN5c3RlbWQgPSB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChmLT5jdHgsIGYtPmFkZHJlc3MpOwotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5zeXN0ZW1kLCBzeXN0ZW1kX2ZpbHRlciwgZiwgTlVMTCkpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotICBmLT5zeXN0ZW1kX2ZpbHRlcl9hZGRlZCA9IFRSVUU7Ci0gIGYtPnN5c3RlbWRfbmFtZSA9IGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+c3lzdGVtZCk7Ci0gIHRha2Vfd2VsbF9rbm93bl9uYW1lIChmLCBmLT5zeXN0ZW1kLCAib3JnLmZyZWVkZXNrdG9wLnN5c3RlbWQxIik7Ci0KLSAgaWYgKChjb25maWctPmZsYWdzICYgRkxBR19FQVJMWV9UUkFOU0lFTlRfU0VSVklDRSkgPT0gMCkKLSAgICB7Ci0gICAgICAvKiBUcnkgdG8gYWN0aXZhdGUgYSBzZXJ2aWNlIHRoYXQgaXNuJ3QgdGhlcmUuICovCi0gICAgICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoY29uZmlnLT5idXNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2ZvbyIsICJjb20uZXhhbXBsZS5iYXIiLCAiQWN0aXZhdGUiKTsKLQotICAgICAgaWYgKG0gPT0gTlVMTCB8fAotICAgICAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5jYWxsZXIsIG0sICZwYywKLSAgICAgICAgICAgIERCVVNfVElNRU9VVF9VU0VfREVGQVVMVCkgfHwgcGMgPT0gTlVMTCkKLSAgICAgICAgZ19lcnJvciAoIk9PTSIpOwotCi0gICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICAgICAgbSA9IE5VTEw7Ci0KLSAgICAgIC8qIEl0IGZhaWxzLiAqLwotCi0gICAgICBpZiAoZGJ1c19wZW5kaW5nX2NhbGxfZ2V0X2NvbXBsZXRlZCAocGMpKQotICAgICAgICB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSAocGMsICZtKTsKLSAgICAgIGVsc2UgaWYgKCFkYnVzX3BlbmRpbmdfY2FsbF9zZXRfbm90aWZ5IChwYywgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHksCi0gICAgICAgICAgICAmbSwgTlVMTCkpCi0gICAgICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAgICAgd2hpbGUgKG0gPT0gTlVMTCkKLSAgICAgICAgdGVzdF9tYWluX2NvbnRleHRfaXRlcmF0ZSAoZi0+Y3R4LCBUUlVFKTsKLQotICAgICAgYXNzZXJ0X2Vycm9yX3JlcGx5IChtLCBEQlVTX1NFUlZJQ0VfREJVUywgZi0+Y2FsbGVyX25hbWUsCi0gICAgICAgICAgREJVU19FUlJPUl9TRVJWSUNFX1VOS05PV04pOwotCi0gICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICAgICAgbSA9IE5VTEw7Ci0KLSAgICAgIC8qIE5vdyBnZW5lcmF0ZSBhIHRyYW5zaWVudCBELUJ1cyBzZXJ2aWNlIGZpbGUgZm9yIGl0LiBUaGUgZGlyZWN0b3J5Ci0gICAgICAgKiBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgZHVyaW5nIGRidXMtZGFlbW9uIHN0YXJ0dXAsIHNvIHdlIGRvbid0IGhhdmUgdG8KLSAgICAgICAqIHJlY3JlYXRlIGl0LiAqLwotICAgICAgZml4dHVyZV9jcmVhdGVfdHJhbnNpZW50X3NlcnZpY2UgKGYsIGNvbmZpZy0+YnVzX25hbWUpOwotCi0gICAgICAvKiBUbyBndWFyYW50ZWUgdGhhdCB0aGUgdHJhbnNpZW50IHNlcnZpY2UgaGFzIGJlZW4gcGlja2VkIHVwLCB3ZSBoYXZlCi0gICAgICAgKiB0byByZWxvYWQuICovCi0gICAgICBtID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoREJVU19TRVJWSUNFX0RCVVMsIERCVVNfUEFUSF9EQlVTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfSU5URVJGQUNFX0RCVVMsICJSZWxvYWRDb25maWciKTsKLQotICAgICAgaWYgKG0gPT0gTlVMTCB8fAotICAgICAgICAgICFkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5IChmLT5jYWxsZXIsIG0sICZwYywKLSAgICAgICAgICAgIERCVVNfVElNRU9VVF9VU0VfREVGQVVMVCkgfHwgcGMgPT0gTlVMTCkKLSAgICAgICAgZ19lcnJvciAoIk9PTSIpOwotCi0gICAgICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICAgICAgbSA9IE5VTEw7Ci0KLSAgICAgIGlmIChkYnVzX3BlbmRpbmdfY2FsbF9nZXRfY29tcGxldGVkIChwYykpCi0gICAgICAgIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5IChwYywgJm0pOwotICAgICAgZWxzZSBpZiAoIWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkgKHBjLCB0ZXN0X3BlbmRpbmdfY2FsbF9zdG9yZV9yZXBseSwKLSAgICAgICAgICAgICZtLCBOVUxMKSkKLSAgICAgICAgZ19lcnJvciAoIk9PTSIpOwotCi0gICAgICB3aGlsZSAobSA9PSBOVUxMKQotICAgICAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gICAgICBhc3NlcnRfbWV0aG9kX3JlcGx5IChtLCBEQlVTX1NFUlZJQ0VfREJVUywgZi0+Y2FsbGVyX25hbWUsICIiKTsKLSAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0gICAgICBtID0gTlVMTDsKLSAgICB9Ci0KLSAgLyogVGhlIHNlcnZpY2UgaXMgcHJlc2VudCBub3cuICovCi0gIG0gPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChjb25maWctPmJ1c19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiY29tLmV4YW1wbGUuYmFyIiwgIkFjdGl2YXRlIik7Ci0KLSAgaWYgKG0gPT0gTlVMTCB8fAotICAgICAgIWRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHkgKGYtPmNhbGxlciwgbSwgJnBjLAotICAgICAgICBEQlVTX1RJTUVPVVRfVVNFX0RFRkFVTFQpIHx8IHBjID09IE5VTEwpCi0gICAgZ19lcnJvciAoIk9PTSIpOwotCi0gIGRidXNfbWVzc2FnZV91bnJlZiAobSk7Ci0gIG0gPSBOVUxMOwotCi0gIGlmIChkYnVzX3BlbmRpbmdfY2FsbF9nZXRfY29tcGxldGVkIChwYykpCi0gICAgdGVzdF9wZW5kaW5nX2NhbGxfc3RvcmVfcmVwbHkgKHBjLCAmcmVwbHkpOwotICBlbHNlIGlmICghZGJ1c19wZW5kaW5nX2NhbGxfc2V0X25vdGlmeSAocGMsIHRlc3RfcGVuZGluZ19jYWxsX3N0b3JlX3JlcGx5LAotICAgICAgICAmcmVwbHksIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICAvKiBUaGUgbW9jayBzeXN0ZW1kIGlzIHRvbGQgdG8gc3RhcnQgdGhlIHNlcnZpY2UuICovCi0gIHdoaWxlIChmLT5zeXN0ZW1kX21lc3NhZ2UgPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIG0gPSBmLT5zeXN0ZW1kX21lc3NhZ2U7Ci0gIGYtPnN5c3RlbWRfbWVzc2FnZSA9IE5VTEw7Ci0gIGFzc2VydF9zaWduYWwgKG0sIERCVVNfU0VSVklDRV9EQlVTLCBEQlVTX1BBVEhfREJVUywKLSAgICAgICJvcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEuQWN0aXZhdG9yIiwgIkFjdGl2YXRpb25SZXF1ZXN0IiwgInMiLAotICAgICAgIm9yZy5mcmVlZGVza3RvcC5zeXN0ZW1kMSIpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKG0pOwotICBtID0gTlVMTDsKLQotICAvKiBUaGUgYWN0aXZhdGFibGUgc2VydmljZSBjb25uZWN0cyBhbmQgZ2V0cyBpdHMgbmFtZS4gKi8KLSAgZi0+YWN0aXZhdGVkID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoZi0+Y3R4LCBmLT5hZGRyZXNzKTsKLSAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlciAoZi0+YWN0aXZhdGVkLCBhY3RpdmF0ZWRfZmlsdGVyLAotICAgICAgICBmLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0gIGYtPmFjdGl2YXRlZF9maWx0ZXJfYWRkZWQgPSBUUlVFOwotICBmLT5hY3RpdmF0ZWRfbmFtZSA9IGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+YWN0aXZhdGVkKTsKLSAgdGFrZV93ZWxsX2tub3duX25hbWUgKGYsIGYtPmFjdGl2YXRlZCwgY29uZmlnLT5idXNfbmFtZSk7Ci0KLSAgLyogVGhlIG1lc3NhZ2UgaXMgZGVsaXZlcmVkIHRvIHRoZSBhY3RpdmF0YWJsZSBzZXJ2aWNlLiAqLwotICB3aGlsZSAoZi0+YWN0aXZhdGVkX21lc3NhZ2UgPT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF9pdGVyYXRlIChmLT5jdHgsIFRSVUUpOwotCi0gIG0gPSBmLT5hY3RpdmF0ZWRfbWVzc2FnZTsKLSAgZi0+YWN0aXZhdGVkX21lc3NhZ2UgPSBOVUxMOwotICBhc3NlcnRfbWV0aG9kX2NhbGwgKG0sIGYtPmNhbGxlcl9uYW1lLCBjb25maWctPmJ1c19uYW1lLCAiL2ZvbyIsCi0gICAgICAiY29tLmV4YW1wbGUuYmFyIiwgIkFjdGl2YXRlIiwgIiIpOwotCi0gIC8qIFRoZSBhY3RpdmF0YWJsZSBzZXJ2aWNlIHNlbmRzIGJhY2sgYSByZXBseS4gKi8KLSAgc2VuZF9yZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybiAobSk7Ci0KLSAgaWYgKHNlbmRfcmVwbHkgPT0gTlVMTCB8fAotICAgICAgIWRidXNfY29ubmVjdGlvbl9zZW5kIChmLT5hY3RpdmF0ZWQsIHNlbmRfcmVwbHksIE5VTEwpKQotICAgIGdfZXJyb3IgKCJPT00iKTsKLQotICBkYnVzX21lc3NhZ2VfdW5yZWYgKHNlbmRfcmVwbHkpOwotICBzZW5kX3JlcGx5ID0gTlVMTDsKLSAgZGJ1c19tZXNzYWdlX3VucmVmIChtKTsKLSAgbSA9IE5VTEw7Ci0KLSAgLyogVGhlIGNhbGxlciByZWNlaXZlcyB0aGUgcmVwbHkuICovCi0gIHdoaWxlIChyZXBseSA9PSBOVUxMKQotICAgIHRlc3RfbWFpbl9jb250ZXh0X2l0ZXJhdGUgKGYtPmN0eCwgVFJVRSk7Ci0KLSAgYXNzZXJ0X21ldGhvZF9yZXBseSAocmVwbHksIGYtPmFjdGl2YXRlZF9uYW1lLCBmLT5jYWxsZXJfbmFtZSwgIiIpOwotICBkYnVzX21lc3NhZ2VfdW5yZWYgKHJlcGx5KTsKLSAgcmVwbHkgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAogdGVhcmRvd24gKEZpeHR1cmUgKmYsCiAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0IEdfR05VQ19VTlVTRUQpCiB7CkBAIC0xMDEwLDkgKzUxNyw2IEBACiAKICAgaWYgKGYtPmNhbGxlciAhPSBOVUxMKQogICAgIHsKLSAgICAgIGlmIChmLT5jYWxsZXJfZmlsdGVyX2FkZGVkKQotICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+Y2FsbGVyLCBjYWxsZXJfZmlsdGVyLCBmKTsKLQogICAgICAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlIChmLT5jYWxsZXIpOwogICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChmLT5jYWxsZXIpOwogICAgICAgZi0+Y2FsbGVyID0gTlVMTDsKQEAgLTEwMjAsOSArNTI0LDcgQEAKIAogICBpZiAoZi0+c3lzdGVtZCAhPSBOVUxMKQogICAgIHsKLSAgICAgIGlmIChmLT5zeXN0ZW1kX2ZpbHRlcl9hZGRlZCkKLSAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JlbW92ZV9maWx0ZXIgKGYtPnN5c3RlbWQsIHN5c3RlbWRfZmlsdGVyLCBmKTsKLQorICAgICAgZGJ1c19jb25uZWN0aW9uX3JlbW92ZV9maWx0ZXIgKGYtPnN5c3RlbWQsIHN5c3RlbWRfZmlsdGVyLCBmKTsKICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+c3lzdGVtZCk7CiAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYgKGYtPnN5c3RlbWQpOwogICAgICAgZi0+c3lzdGVtZCA9IE5VTEw7CkBAIC0xMDMwLDgyICs1MzIsMjIgQEAKIAogICBpZiAoZi0+YWN0aXZhdGVkICE9IE5VTEwpCiAgICAgewotICAgICAgaWYgKGYtPmFjdGl2YXRlZF9maWx0ZXJfYWRkZWQpCi0gICAgICAgIGRidXNfY29ubmVjdGlvbl9yZW1vdmVfZmlsdGVyIChmLT5hY3RpdmF0ZWQsIGFjdGl2YXRlZF9maWx0ZXIsIGYpOwotCisgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+YWN0aXZhdGVkLCBhY3RpdmF0ZWRfZmlsdGVyLCBmKTsKICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+YWN0aXZhdGVkKTsKICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZiAoZi0+YWN0aXZhdGVkKTsKICAgICAgIGYtPmFjdGl2YXRlZCA9IE5VTEw7CiAgICAgfQogCi0gIGlmIChmLT5kYWVtb25fcGlkICE9IDApCi0gICAgewotICAgICAgdGVzdF9raWxsX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgICBnX3NwYXduX2Nsb3NlX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgfQotCi0gIGlmIChmLT5jdHggIT0gTlVMTCkKLSAgICB0ZXN0X21haW5fY29udGV4dF91bnJlZiAoZi0+Y3R4KTsKLQorICB0ZXN0X2tpbGxfcGlkIChmLT5kYWVtb25fcGlkKTsKKyAgZ19zcGF3bl9jbG9zZV9waWQgKGYtPmRhZW1vbl9waWQpOworICB0ZXN0X21haW5fY29udGV4dF91bnJlZiAoZi0+Y3R4KTsKICAgZ19mcmVlIChmLT5hZGRyZXNzKTsKLQotICBpZiAoZi0+dHJhbnNpZW50X3NlcnZpY2VfZmlsZSAhPSBOVUxMKQotICAgIHsKLSAgICAgIHRlc3RfcmVtb3ZlX2lmX2V4aXN0cyAoZi0+dHJhbnNpZW50X3NlcnZpY2VfZmlsZSk7Ci0gICAgICBnX2ZyZWUgKGYtPnRyYW5zaWVudF9zZXJ2aWNlX2ZpbGUpOwotICAgIH0KLQotICBpZiAoZi0+dG1wX3J1bnRpbWVfZGlyICE9IE5VTEwpCi0gICAgewotICAgICAgZ2NoYXIgKmRidXMxID0gZ19idWlsZF9maWxlbmFtZSAoZi0+dG1wX3J1bnRpbWVfZGlyLCAiZGJ1cy0xIiwgTlVMTCk7Ci0gICAgICBnY2hhciAqc2VydmljZXMgPSBnX2J1aWxkX2ZpbGVuYW1lIChkYnVzMSwgInNlcnZpY2VzIiwgTlVMTCk7Ci0KLSAgICAgIHRlc3Rfcm1kaXJfaWZfZXhpc3RzIChzZXJ2aWNlcyk7Ci0gICAgICB0ZXN0X3JtZGlyX2lmX2V4aXN0cyAoZGJ1czEpOwotICAgICAgdGVzdF9ybWRpcl9pZl9leGlzdHMgKGYtPnRtcF9ydW50aW1lX2Rpcik7Ci0KLSAgICAgIGdfZnJlZSAoZi0+dG1wX3J1bnRpbWVfZGlyKTsKLSAgICAgIGdfZnJlZSAoZGJ1czEpOwotICAgICAgZ19mcmVlIChzZXJ2aWNlcyk7Ci0gICAgfQogfQogCi1zdGF0aWMgY29uc3QgQ29uZmlnIGRlbnlfc2VuZF90ZXN0c1tdID0KLXsKLSNpZiBkZWZpbmVkKERCVVNfVEVTVF9BUFBBUk1PUl9BQ1RJVkFUSU9OKQotICAgIHsgImNvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTGFiZWwiIH0sCi0gICAgeyAiY29tLmV4YW1wbGUuU2VuZERlbmllZEJ5Tm9uZXhpc3RlbnRBcHBBcm1vckxhYmVsIiB9LAotICAgIHsgImNvbS5leGFtcGxlLlNlbmREZW5pZWRCeUFwcEFybW9yTmFtZSIgfSwKLSNlbmRpZgotICAgIHsgImNvbS5leGFtcGxlLlNlbmREZW5pZWQiIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBDb25maWcgZGVueV9yZWNlaXZlX3Rlc3RzW10gPQotewotI2lmIGRlZmluZWQoREJVU19URVNUX0FQUEFSTU9SX0FDVElWQVRJT04pCi0gICAgeyAiY29tLmV4YW1wbGUuUmVjZWl2ZURlbmllZEJ5QXBwQXJtb3JMYWJlbCIgfSwKLSNlbmRpZgotICAgIHsgImNvbS5leGFtcGxlLlJlY2VpdmVEZW5pZWQiIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBDb25maWcgdHJhbnNpZW50X3NlcnZpY2VfbGF0ZXIgPQotewotICAiY29tLmV4YW1wbGUuVHJhbnNpZW50QWN0aXZhdGFibGUxIiwKLSAgRkxBR19OT05FCi19OwotCi1zdGF0aWMgY29uc3QgQ29uZmlnIHRyYW5zaWVudF9zZXJ2aWNlX2luX2FkdmFuY2UgPQotewotICAiY29tLmV4YW1wbGUuVHJhbnNpZW50QWN0aXZhdGFibGUxIiwKLSAgRkxBR19FQVJMWV9UUkFOU0lFTlRfU0VSVklDRQotfTsKLQogaW50CiBtYWluIChpbnQgYXJnYywKICAgICBjaGFyICoqYXJndikKIHsKLSAgZ3NpemUgaTsKLQogICB0ZXN0X2luaXQgKCZhcmdjLCAmYXJndik7CiAKICAgZ190ZXN0X2FkZCAoIi9zZC1hY3RpdmF0aW9uL2FjdGl2YXRpb24iLCBGaXh0dXJlLCBOVUxMLApAQCAtMTExMywzMCArNTU1LDUgQEAKICAgZ190ZXN0X2FkZCAoIi9zZC1hY3RpdmF0aW9uL3VhZSIsIEZpeHR1cmUsIE5VTEwsCiAgICAgICBzZXR1cCwgdGVzdF91YWUsIHRlYXJkb3duKTsKIAotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChkZW55X3NlbmRfdGVzdHMpOyBpKyspCi0gICAgewotICAgICAgZ2NoYXIgKm5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIvc2QtYWN0aXZhdGlvbi9kZW55LXNlbmQvJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnlfc2VuZF90ZXN0c1tpXS5idXNfbmFtZSk7Ci0KLSAgICAgIGdfdGVzdF9hZGQgKG5hbWUsIEZpeHR1cmUsICZkZW55X3NlbmRfdGVzdHNbaV0sCi0gICAgICAgICAgICAgICAgICBzZXR1cCwgdGVzdF9kZW55X3NlbmQsIHRlYXJkb3duKTsKLSAgICAgIGdfZnJlZSAobmFtZSk7Ci0gICAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGRlbnlfcmVjZWl2ZV90ZXN0cyk7IGkrKykKLSAgICB7Ci0gICAgICBnY2hhciAqbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIi9zZC1hY3RpdmF0aW9uL2RlbnktcmVjZWl2ZS8lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVueV9yZWNlaXZlX3Rlc3RzW2ldLmJ1c19uYW1lKTsKLQotICAgICAgZ190ZXN0X2FkZCAobmFtZSwgRml4dHVyZSwgJmRlbnlfcmVjZWl2ZV90ZXN0c1tpXSwKLSAgICAgICAgICAgICAgICAgIHNldHVwLCB0ZXN0X2RlbnlfcmVjZWl2ZSwgdGVhcmRvd24pOwotICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICB9Ci0KLSAgZ190ZXN0X2FkZCAoIi9zZC1hY3RpdmF0aW9uL3RyYW5zaWVudC1zZXJ2aWNlcy9sYXRlciIsIEZpeHR1cmUsCi0gICAgICAmdHJhbnNpZW50X3NlcnZpY2VfbGF0ZXIsIHNldHVwLCB0ZXN0X3RyYW5zaWVudF9zZXJ2aWNlcywgdGVhcmRvd24pOwotICBnX3Rlc3RfYWRkICgiL3NkLWFjdGl2YXRpb24vdHJhbnNpZW50LXNlcnZpY2VzL2luLWFkdmFuY2UiLCBGaXh0dXJlLAotICAgICAgJnRyYW5zaWVudF9zZXJ2aWNlX2luX2FkdmFuY2UsIHNldHVwLCB0ZXN0X3RyYW5zaWVudF9zZXJ2aWNlcywgdGVhcmRvd24pOwotCiAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9zaGVsbC10ZXN0LmMgYi90ZXN0L3NoZWxsLXRlc3QuYwppbmRleCA3OTQ3NTdmLi42MTI4MGQ2IDEwMDY0NAotLS0gYS90ZXN0L3NoZWxsLXRlc3QuYworKysgYi90ZXN0L3NoZWxsLXRlc3QuYwpAQCAtMjUsNDIgKzI1LDI1IEBACiAgIERCdXNMaXN0ICpsaXN0ID0gTlVMTCwgKm5vZGU7CiAgIERCdXNFcnJvciBlcnJvcjsKIAotICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdCwgKGNoYXIgKilhcmcxKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KKyAgX2RidXNfbGlzdF9hcHBlbmQgKCZsaXN0LCAoY2hhciAqKWFyZzEpOwogICBkbwogICAgIHsKICAgICAgIHRtcCA9IHZhX2FyZyAodmFyX2FyZ3MsIGNoYXIgKik7CiAgICAgICBpZiAoIXRtcCkKICAgICAgICAgYnJlYWs7Ci0gICAgICBpZiAoIV9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdCwgdG1wKSkKLSAgICAgICAgewotICAgICAgICAgIF9kYnVzX2xpc3RfY2xlYXIgKCZsaXN0KTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KKyAgICAgIF9kYnVzX2xpc3RfYXBwZW5kICgmbGlzdCwgdG1wKTsKICAgICB9IHdoaWxlICh0bXApOwogCiAgIG9yaWdpbmFsX2FyZ2MgPSBfZGJ1c19saXN0X2dldF9sZW5ndGggKCZsaXN0KTsKICAgb3JpZ2luYWxfYXJndiA9IGRidXNfbmV3IChjaGFyICosIG9yaWdpbmFsX2FyZ2MpOwotICBpZiAoIV9kYnVzX3N0cmluZ19pbml0ICgmc3RyKSkKLSAgICB7Ci0gICAgICBfZGJ1c19saXN0X2NsZWFyICgmbGlzdCk7Ci0gICAgICBkYnVzX2ZyZWUgKG9yaWdpbmFsX2FyZ3YpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQorICBfZGJ1c19zdHJpbmdfaW5pdCAoJnN0cik7CiAgIGZvciAoaSA9IDAsIG5vZGUgPSBfZGJ1c19saXN0X2dldF9maXJzdF9saW5rICgmbGlzdCk7IGkgPCBvcmlnaW5hbF9hcmdjICYmIG5vZGU7CiAgICAgICAgaSsrLCBub2RlID0gX2RidXNfbGlzdF9nZXRfbmV4dF9saW5rICgmbGlzdCwgbm9kZSkpCiAgICAgewogICAgICAgb3JpZ2luYWxfYXJndltpXSA9IG5vZGUtPmRhdGE7Ci0gICAgICBpZiAoKGkgPiAwICYmICFfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKCZzdHIsICcgJykpIHx8Ci0gICAgICAgICAgIV9kYnVzX3N0cmluZ19hcHBlbmQgKCZzdHIsIG9yaWdpbmFsX2FyZ3ZbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAgX2RidXNfbGlzdF9jbGVhciAoJmxpc3QpOwotICAgICAgICAgIGRidXNfZnJlZSAob3JpZ2luYWxfYXJndik7Ci0gICAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZzdHIpOwotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQorICAgICAgaWYgKGkgPiAwKQorICAgICAgICBfZGJ1c19zdHJpbmdfYXBwZW5kX2J5dGUgKCZzdHIsICcgJyk7CisgICAgICBfZGJ1c19zdHJpbmdfYXBwZW5kICgmc3RyLCBvcmlnaW5hbF9hcmd2W2ldKTsKICAgICB9CiAgIAogICBfZGJ1c19saXN0X2NsZWFyICgmbGlzdCk7CkBAIC03NCw3ICs1Nyw2IEBACiAgICAgICAgICAgc2hvdWxkX3dvcmsgPyAiIiA6ICIgKGFzIGV4cGVjdGVkKSIsCiAgICAgICAgICAgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiAiIik7CiAgICAgICBkYnVzX2ZyZWUgKG9yaWdpbmFsX2FyZ3YpOwotICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZzdHIpOwogICAgICAgcmV0dXJuICFzaG91bGRfd29yazsKICAgICB9CiAgIGVsc2UKQEAgLTE3Miw3ICsxNTQsNyBAQAogICB0ZXN0X2NvbW1hbmRfbGluZSAoIi9vcHQvZ25vbWUvYmluL3NlcnZpY2Utc3RhcnQiLCBOVUxMKTsKICAgdGVzdF9jb21tYW5kX2xpbmUgKCJncmVwIiwgIi1sIiwgIi1yIiwgIi1pIiwgIid3aGF0ZXZlciciLCAiZmlsZXMqLmMiLCBOVUxMKTsKICAgdGVzdF9jb21tYW5kX2xpbmUgKCIvaG9tZS9ib3N0b24vam9obnAvZGV2ZWwtbG9jYWwvZGJ1cy90ZXN0L3Rlc3Qtc2VnZmF1bHQiLCBOVUxMKTsKLSAgdGVzdF9jb21tYW5kX2xpbmUgKCJscyIsICItbCIsICItYSIsICItLWNvbG9ycyIsIE5VTEwpOworICB0ZXN0X2NvbW1hbmRfbGluZSAoImxzIiwgIi1sIiwgIi1hIiwgIi0tY29sb3JzIiwgX2RidXNfZ2V0X3RtcGRpcigpLCBOVUxMKTsKICAgdGVzdF9jb21tYW5kX2xpbmUgKCJyc3luYy10by1zZXJ2ZXIiLCBOVUxMKTsKICAgdGVzdF9jb21tYW5kX2xpbmUgKCJ0ZXN0LXNlZ2ZhdWx0IiwgIi0tbm8tc2VnZmF1bHQiLCBOVUxMKTsKICAgdGVzdF9jb21tYW5kX2xpbmUgKCJldm9sdXRpb24iLCAibWFpbHRvOnBlcGVAY3Vjby5jb20iLCBOVUxMKTsKZGlmZiAtLWdpdCBhL3Rlc3Qvc3Bhd24tdGVzdC5jIGIvdGVzdC9zcGF3bi10ZXN0LmMKaW5kZXggYTEyYzg2OS4uMTJkMzdjOCAxMDA2NDQKLS0tIGEvdGVzdC9zcGF3bi10ZXN0LmMKKysrIGIvdGVzdC9zcGF3bi10ZXN0LmMKQEAgLTMwLDkgKzMwLDcgQEAKICAgICBhcmd2X2NvcHkgW2ldID0gYXJndltpICsgMV07CiAgIGFyZ3ZfY29weVthcmdjIC0gMV0gPSBOVUxMOwogICAKLSAgaWYgKCFfZGJ1c19zcGF3bl9hc3luY193aXRoX2JhYnlzaXR0ZXIgKE5VTEwsIGFyZ3ZfY29weVswXSwgYXJndl9jb3B5LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19TUEFXTl9OT05FLCBzZXR1cF9mdW5jLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKSkKKyAgaWYgKCFfZGJ1c19zcGF3bl9hc3luY193aXRoX2JhYnlzaXR0ZXIgKE5VTEwsIGFyZ3ZfY29weVswXSwgYXJndl9jb3B5LCBOVUxMLCBzZXR1cF9mdW5jLCBOVUxMLCAmZXJyb3IpKQogICAgIHsKICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvdWxkIG5vdCBsYXVuY2ggYXBwbGljYXRpb246IFwiJXNcIlxuIiwKIAkgICAgICAgZXJyb3IubWVzc2FnZSk7CmRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtYXBwYXJtb3ItYWN0aXZhdGlvbi5zaCBiL3Rlc3QvdGVzdC1hcHBhcm1vci1hY3RpdmF0aW9uLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmMxMjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3QvdGVzdC1hcHBhcm1vci1hY3RpdmF0aW9uLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgQ29weXJpZ2h0IMKpIDIwMTYgQ29sbGFib3JhIEx0ZC4KLSMKLSMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLSMgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKLSMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKLSMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKLSMgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSMgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLSMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0jCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0jIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIwotIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSMgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0jIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0jIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0jIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0jIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSMgU09GVFdBUkUuCi0KLXNldCAtZQotCi1pZiBbICJ4JChpZCAtdSkiICE9ICJ4MCIgXTsgdGhlbgotICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gdGhpcyB0ZXN0IGNhbiBvbmx5IGJlIHJ1biBhcyByb290IgotICAgIGV4aXQgMAotZmkKLQotaWYgWyAteiAiJERCVVNfVEVTVF9FWEVDIiBdOyB0aGVuCi0gICAgREJVU19URVNUX0VYRUM9IiQoZGlybmFtZSAiJDAiKSIKLSAgICBpZiAhIFsgLXggIiREQlVTX1RFU1RfRVhFQy90ZXN0LWFwcGFybW9yLWFjdGl2YXRpb24iIF07IHRoZW4KLSAgICAgICAgZWNobyAiMS4uMCAjIFNLSVAgLSBleGVjdXRhYmxlIG5vdCBmb3VuZCBhbmQgREJVU19URVNUX0VYRUMgbm90IHNldCIKLSAgICAgICAgZXhpdCAwCi0gICAgZmkKLWZpCi0KLWlmIFsgLXogIiREQlVTX1RFU1RfREFUQSIgXTsgdGhlbgotICAgIERCVVNfVEVTVF9EQVRBPSIkREJVU19URVNUX0VYRUMvZGF0YSIKLSAgICBpZiAhIFsgLWUgIiREQlVTX1RFU1RfREFUQS9kYnVzLWluc3RhbGxlZC10ZXN0cy5hYXByb2ZpbGUiIF07IHRoZW4KLSAgICAgICAgZWNobyAiMS4uMCAjIFNLSVAgLSByZXF1aXJlZCBkYXRhIG5vdCBmb3VuZCBhbmQgREJVU19URVNUX0RBVEEgbm90IHNldCIKLSAgICAgICAgZXhpdCAwCi0gICAgZmkKLWZpCi0KLWVjaG8gIiMgQXR0ZW1wdGluZyB0byBsb2FkIEFwcEFybW9yIHByb2ZpbGVzIgotaWYgISBhcHBhcm1vcl9wYXJzZXIgLS1za2lwLWNhY2hlIC0tcmVwbGFjZSBcCi0gICAgICAgICIkREJVU19URVNUX0RBVEEvZGJ1cy1pbnN0YWxsZWQtdGVzdHMuYWFwcm9maWxlIjsgdGhlbgotICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gdW5hYmxlIHRvIGxvYWQgQXBwQXJtb3IgcHJvZmlsZXMiCi0gICAgZXhpdCAwCi1maQotCi1leGVjICIkREJVU19URVNUX0VYRUMvdGVzdC1hcHBhcm1vci1hY3RpdmF0aW9uIiAtLXRhcCAiJEAiCi0KLSMgdmltOnNldCBzdHM9NCBzdz00IGV0OgpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWRidXMtZGFlbW9uLWZvcmsuc2ggYi90ZXN0L3Rlc3QtZGJ1cy1kYWVtb24tZm9yay5zaAppbmRleCAxYTcxNzVkLi5kNjE2NDQ1IDEwMDc1NQotLS0gYS90ZXN0L3Rlc3QtZGJ1cy1kYWVtb24tZm9yay5zaAorKysgYi90ZXN0L3Rlc3QtZGJ1cy1kYWVtb24tZm9yay5zaApAQCAtMjUsNiArMjUsNyBAQAogc2V0IC1lCiAKIGV4cG9ydCBEQlVTX0RFQlVHX09VVFBVVD0xCitleHBvcnQgREJVU19VU0VfVEVTVF9CSU5BUlk9MQogZWNobyAiIyBkYnVzLWRhZW1vbiBiaW5hcnk6ICR7REJVU19URVNUX0RBRU1PTjo9ZGJ1cy1kYWVtb259IgogZWNobyAiIyBkYnVzLXNlbmQgYmluYXJ5OiAke0RCVVNfVEVTVF9EQlVTX1NFTkQ6PWRidXMtc2VuZH0iCiAKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1kYnVzLWxhdW5jaC1ldmFsLnNoIGIvdGVzdC90ZXN0LWRidXMtbGF1bmNoLWV2YWwuc2gKaW5kZXggY2Q5NjA2NS4uMjg5YzU0OCAxMDA3NTUKLS0tIGEvdGVzdC90ZXN0LWRidXMtbGF1bmNoLWV2YWwuc2gKKysrIGIvdGVzdC90ZXN0LWRidXMtbGF1bmNoLWV2YWwuc2gKQEAgLTI1LDEwICsyNSwxMCBAQAogc2V0IC1lCiAKIGV4cG9ydCBEQlVTX0RFQlVHX09VVFBVVD0xCitleHBvcnQgREJVU19VU0VfVEVTVF9CSU5BUlk9MQogZWNobyAiIyBkYnVzLWRhZW1vbiBiaW5hcnk6ICR7REJVU19URVNUX0RBRU1PTjo9ZGJ1cy1kYWVtb259IgogZWNobyAiIyBkYnVzLWxhdW5jaCBiaW5hcnk6ICR7REJVU19URVNUX0RCVVNfTEFVTkNIOj1kYnVzLWxhdW5jaH0iCiBlY2hvICIjIGRidXMtc2VuZCBiaW5hcnk6ICR7REJVU19URVNUX0RCVVNfU0VORDo9ZGJ1cy1zZW5kfSIKLWVjaG8gIiMgZGJ1cy11dWlkZ2VuIGJpbmFyeTogJHtEQlVTX1RFU1RfREJVU19VVUlER0VOOj1kYnVzLXV1aWRnZW59IgogCiBpZiB0ZXN0IC1uICIkREJVU19URVNUX0RBVEEiOyB0aGVuCiAgICAgZWNobyAiIyB0ZXN0IGRhdGE6ICREQlVTX1RFU1RfREFUQSIKQEAgLTQyLDE3ICs0Miw3IEBACiAgICAgY29uZmlnPSItLXNoLXN5bnRheCIKIGZpCiAKLWlmICEgIiR7REJVU19URVNUX0RCVVNfVVVJREdFTn0iIC0tZ2V0ID4vZGV2L251bGw7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkREJVU19URVNUX1VOSU5TVEFMTEVEIjsgdGhlbgotICAgICAgICBlY2hvICIxLi4wICMgU0tJUCAtIFVuYWJsZSB0byB0ZXN0IGRidXMtbGF1bmNoIHdpdGhvdXQgYSBtYWNoaW5lIElEIgotICAgICAgICBleGl0IDAKLSAgICBlbHNlCi0gICAgICAgIGVjaG8gIkJhaWwgb3V0ISBkYnVzIG5vdCBjb3JyZWN0bHkgaW5zdGFsbGVkOiBubyBtYWNoaW5lIElEIgotICAgICAgICBleGl0IDEKLSAgICBmaQotZmkKLQotZWNobyAiMS4uMSIKK2VjaG8gIjEuLjMiCiAKIHVuc2V0IERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUwogdW5zZXQgREJVU19TRVNTSU9OX0JVU19QSUQKQEAgLTcyLDMgKzYyLDQyIEBACiBraWxsICIkREJVU19TRVNTSU9OX0JVU19QSUQiCiAKIGVjaG8gIm9rIDEgLSBub3JtYWwgZGJ1cy1sYXVuY2giCisKK3Vuc2V0IERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUwordW5zZXQgREJVU19TRVNTSU9OX0JVU19QSUQKKworZXZhbCAiJCgke0RCVVNfVEVTVF9EQlVTX0xBVU5DSH0gLS1zaC1zeW50YXggIiRjb25maWciIDwmLSkiCisKK3Rlc3QgLW4gIiREQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiCitlbnYgfCBncmVwICdeREJVU19TRVNTSU9OX0JVU19BRERSRVNTPScKKwordGVzdCAtbiAiJERCVVNfU0VTU0lPTl9CVVNfUElEIgordGVzdCAieCQoZW52IHwgZ3JlcCAnXkRCVVNfU0VTU0lPTl9CVVNfUElEPScpIiA9ICJ4Igora2lsbCAtMCAiJERCVVNfU0VTU0lPTl9CVVNfUElEIgorCiske0RCVVNfVEVTVF9EQlVTX1NFTkR9IC0tc2Vzc2lvbiAtLWRlc3Q9b3JnLmZyZWVkZXNrdG9wLkRCdXMgXAorICAgIC0tdHlwZT1tZXRob2RfY2FsbCAtLXByaW50LXJlcGx5IC8gb3JnLmZyZWVkZXNrdG9wLkRCdXMuTGlzdE5hbWVzID4mMgorCitraWxsICIkREJVU19TRVNTSU9OX0JVU19QSUQiCisKK2VjaG8gIm9rIDIgLSBkYnVzLWxhdW5jaCB3aXRoIHN0ZGluIGNsb3NlZCIKKwordW5zZXQgREJVU19TRVNTSU9OX0JVU19BRERSRVNTCit1bnNldCBEQlVTX1NFU1NJT05fQlVTX1BJRAorCisjIHdlIGNhbid0IGNsb3NlIHN0ZG91dCBiZWNhdXNlIHRoYXQgYnJlYWtzIC0tc2gtc3ludGF4CitldmFsICIkKCR7REJVU19URVNUX0RCVVNfTEFVTkNIfSAtLXNoLXN5bnRheCAiJGNvbmZpZyIgPCYtIDI+Ji0pIgorCit0ZXN0IC1uICIkREJVU19TRVNTSU9OX0JVU19BRERSRVNTIgorZW52IHwgZ3JlcCAnXkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz0nCisKK3Rlc3QgLW4gIiREQlVTX1NFU1NJT05fQlVTX1BJRCIKK3Rlc3QgIngkKGVudiB8IGdyZXAgJ15EQlVTX1NFU1NJT05fQlVTX1BJRD0nKSIgPSAieCIKK2tpbGwgLTAgIiREQlVTX1NFU1NJT05fQlVTX1BJRCIKKworJHtEQlVTX1RFU1RfREJVU19TRU5EfSAtLXNlc3Npb24gLS1kZXN0PW9yZy5mcmVlZGVza3RvcC5EQnVzIFwKKyAgICAtLXR5cGU9bWV0aG9kX2NhbGwgLS1wcmludC1yZXBseSAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLkxpc3ROYW1lcyA+JjIKKwora2lsbCAiJERCVVNfU0VTU0lPTl9CVVNfUElEIgorCitlY2hvICJvayAzIC0gZGJ1cy1sYXVuY2ggd2l0aCBzdGRpbiBhbmQgc3RkZXJyIGNsb3NlZCIKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1kYnVzLWxhdW5jaC14MTEuc2ggYi90ZXN0L3Rlc3QtZGJ1cy1sYXVuY2gteDExLnNoCmluZGV4IDQ4YzI3MTguLjgyNzhlODUgMTAwNzU1Ci0tLSBhL3Rlc3QvdGVzdC1kYnVzLWxhdW5jaC14MTEuc2gKKysrIGIvdGVzdC90ZXN0LWRidXMtbGF1bmNoLXgxMS5zaApAQCAtMjYsMTEgKzI2LDExIEBACiBzZXQgLXgKIAogZXhwb3J0IERCVVNfREVCVUdfT1VUUFVUPTEKK2V4cG9ydCBEQlVTX1VTRV9URVNUX0JJTkFSWT0xCiBlY2hvICIjIGRidXMtZGFlbW9uIGJpbmFyeTogJHtEQlVTX1RFU1RfREFFTU9OOj1kYnVzLWRhZW1vbn0iCiBlY2hvICIjIGRidXMtbGF1bmNoIGJpbmFyeTogJHtEQlVTX1RFU1RfREJVU19MQVVOQ0g6PWRidXMtbGF1bmNofSIKIGVjaG8gIiMgZGJ1cy1tb25pdG9yIGJpbmFyeTogJHtEQlVTX1RFU1RfREJVU19MQVVOQ0g6PWRidXMtbW9uaXRvcn0iCiBlY2hvICIjIGRidXMtc2VuZCBiaW5hcnk6ICR7REJVU19URVNUX0RCVVNfU0VORDo9ZGJ1cy1zZW5kfSIKLWVjaG8gIiMgZGJ1cy11dWlkZ2VuIGJpbmFyeTogJHtEQlVTX1RFU1RfREJVU19VVUlER0VOOj1kYnVzLXV1aWRnZW59IgogCiBpZiB0ZXN0IC1uICIkREJVU19URVNUX0RBVEEiOyB0aGVuCiAgICAgZWNobyAiIyB0ZXN0IGRhdGE6ICREQlVTX1RFU1RfREFUQSIKQEAgLTQ4LDE2ICs0OCw2IEBACiAgICAgbGF1bmNoX2NvbmZpZz0iLS1zaC1zeW50YXgiCiBmaQogCi1pZiAhICIke0RCVVNfVEVTVF9EQlVTX1VVSURHRU59IiAtLWdldCA+L2Rldi9udWxsOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJERCVVNfVEVTVF9VTklOU1RBTExFRCI7IHRoZW4KLSAgICAgICAgZWNobyAiMS4uMCAjIFNLSVAgLSBVbmFibGUgdG8gdGVzdCBkYnVzLWxhdW5jaCB3aXRob3V0IGEgbWFjaGluZSBJRCIKLSAgICAgICAgZXhpdCAwCi0gICAgZWxzZQotICAgICAgICBlY2hvICJCYWlsIG91dCEgZGJ1cyBub3QgY29ycmVjdGx5IGluc3RhbGxlZDogbm8gbWFjaGluZSBJRCIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLWZpCi0KIGlmICEgd29ya2Rpcj0iJChta3RlbXAgLWQpIjsgdGhlbgogICAgIGVjaG8gIjEuLjAgIyBTS0lQIC0gbWt0ZW1wIC1kIGRvZXNuJ3Qgd29yayIKICAgICBleGl0IDAKQEAgLTEzNywxMyArMTI3LDEyIEBACiB9CiAKIHRlc3RfZXhpdF93aXRoX3gxMSAoKSB7Ci0gICAgYXJnPSIkMSIKICAgICB1bnNldCBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MKICAgICB1bnNldCBEQlVTX1NFU1NJT05fQlVTX1BJRAogICAgIHVuc2V0IERCVVNfU0VTU0lPTl9CVVNfV0lORE9XSUQKIAogICAgIHN0YXJ0X3h2ZmIKLSAgICBldmFsICIkKCREQlVTX1RFU1RfREJVU19MQVVOQ0ggLS1zaC1zeW50YXggIiRhcmciICIkbGF1bmNoX2NvbmZpZyIgPC9kZXYvbnVsbCkiCisgICAgZXZhbCAiJCgkREJVU19URVNUX0RCVVNfTEFVTkNIIC0tc2gtc3ludGF4IC0tZXhpdC13aXRoLXNlc3Npb24gIiRsYXVuY2hfY29uZmlnIiA8L2Rldi9udWxsKSIKIAogICAgIHRlc3QgLW4gIiREQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiCiAgICAgZW52IHwgZ3JlcCAnXkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUz0nCkBAIC0xNjEsNyArMTUwLDcgQEAKICAgICB0ZXN0X2Rpc2Nvbm5lY3Rpb24KIAogICAgIHRlc3RfbnVtPSQoKCR0ZXN0X251bSArIDEpKQotICAgIGVjaG8gIm9rICR7dGVzdF9udW19IC0gZGJ1cy1sYXVuY2ggJGFyZyIKKyAgICBlY2hvICJvayAke3Rlc3RfbnVtfSAtIGRidXMtbGF1bmNoIC0tZXhpdC13aXRoLXNlc3Npb24iCiB9CiAKIHRlc3RfYXV0b2xhdW5jaCAoKSB7CkBAIC0yMDksNyArMTk4LDcgQEAKICAgICBleHBvcnQgWERHX1JVTlRJTUVfRElSPSIkd29ya2RpciIKICAgICBmYWtlX3V1aWQ9ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIgogCi0gICAgaWYgZWNobyAiJHdvcmtkaXIiIHwgZ3JlcCAnW14tMC05QS1aYS16Xy8uXSc7IHRoZW4KKyAgICBpZiBlY2hvICIkd29ya2RpciIgfCBncmVwICdbXjAtOUEtWmEtel8tLy5dJzsgdGhlbgogICAgICAgICB0ZXN0X251bT0kKCgkdGVzdF9udW0gKyAxKSkKICAgICAgICAgZWNobyAib2sgJHt0ZXN0X251bX0gIyBTS0lQIC0gJHdvcmtkaXIgd291bGQgbmVlZCBlc2NhcGluZyIKICAgICAgICAgcmV0dXJuCkBAIC0yNTgsOSArMjQ3LDggQEAKICAgICBlY2hvICJvayAke3Rlc3RfbnVtfSAtIGRidXMtbGF1bmNoIC0tYXV0b2xhdW5jaCB3aXRoIFhER19SVU5USU1FX0RJUiIKIH0KIAotZWNobyAiMS4uNCIKLXRlc3RfZXhpdF93aXRoX3gxMSAtLWV4aXQtd2l0aC1zZXNzaW9uCi10ZXN0X2V4aXRfd2l0aF94MTEgLS1leGl0LXdpdGgteDExCitlY2hvICIxLi4zIgordGVzdF9leGl0X3dpdGhfeDExCiB0ZXN0X2F1dG9sYXVuY2gKIHRlc3RfeGRnX3J1bnRpbWVfZGlyCiAKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1uYW1lcy5jIGIvdGVzdC90ZXN0LW5hbWVzLmMKaW5kZXggOTVlNDI4Ni4uMjczNjYzNSAxMDA2NDQKLS0tIGEvdGVzdC90ZXN0LW5hbWVzLmMKKysrIGIvdGVzdC90ZXN0LW5hbWVzLmMKQEAgLTMsOCArMyw2IEBACiAKIHN0YXRpYyBEQnVzTG9vcCAqbG9vcDsKIAotc3RhdGljIHZvaWQgZGllIChjb25zdCBjaGFyICptZXNzYWdlKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAogZGllIChjb25zdCBjaGFyICptZXNzYWdlKQogewpkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNlZ2ZhdWx0LmMgYi90ZXN0L3Rlc3Qtc2VnZmF1bHQuYwppbmRleCA4NTE3ZGQ2Li5iNmMwZjhhIDEwMDY0NAotLS0gYS90ZXN0L3Rlc3Qtc2VnZmF1bHQuYworKysgYi90ZXN0L3Rlc3Qtc2VnZmF1bHQuYwpAQCAtMTcsOSArMTcsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSA8ZGJ1cy9kYnVzLW1hY3Jvcy5oPgotCi1pbnQgZXhjZXB0aW9uX2hhbmRsZXIgKExQRVhDRVBUSU9OX1BPSU5URVJTIHApIF9EQlVTX0dOVUNfTk9SRVRVUk47CitpbnQKK2V4Y2VwdGlvbl9oYW5kbGVyKExQRVhDRVBUSU9OX1BPSU5URVJTIHApOwogCiAvKiBFeHBsaWNpdCBXaW5kb3dzIGV4Y2VwdGlvbiBoYW5kbGVycyBuZWVkZWQgdG8gc3VwcmVzcyBPUyBwb3B1cHMgKi8KIGludApAQCAtNDUsNyArNDQsNyBAQAogICBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKExQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIpJmV4Y2VwdGlvbl9oYW5kbGVyKTsKICNlbmRpZgogCi0jaWZkZWYgSEFWRV9TRVRSTElNSVQKKyNpZiBIQVZFX1NFVFJMSU1JVAogICAvKiBObyBjb3JlIGR1bXBzIHBsZWFzZSwgd2Uga25vdyB3ZSBjcmFzaGVkLiAqLwogICBzdHJ1Y3QgcmxpbWl0IHIgPSB7IDAsIH07CiAgIApkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNlcnZpY2UuYyBiL3Rlc3QvdGVzdC1zZXJ2aWNlLmMKaW5kZXggYjUwMGFmMy4uYzBiZDJjNiAxMDA2NDQKLS0tIGEvdGVzdC90ZXN0LXNlcnZpY2UuYworKysgYi90ZXN0L3Rlc3Qtc2VydmljZS5jCkBAIC0xOSw4ICsxOSw2IEBACiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CkBAIC05Miw4ICs5MCw5IEBACiAgICAgICAKICAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAoZWNob19yZXBseSk7CiAgICAgfQotICBlbHNlIGlmIChkYnVzX3NldF9lcnJvcl9mcm9tX21lc3NhZ2UgKCZlcnJvciwgcmVwbHkpKQorICBlbHNlIGlmICh0eXBlID09IERCVVNfTUVTU0FHRV9UWVBFX0VSUk9SKQogICAgIHsKKyAgICAgIGRidXNfc2V0X2Vycm9yX2Zyb21fbWVzc2FnZSAoJmVycm9yLCByZXBseSk7CiAgICAgICBwcmludGYgKCJFcnJvciB0eXBlIGluIHJlcGx5OiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CiAKICAgICAgIGlmIChzdHJjbXAgKGVycm9yLm5hbWUsIERCVVNfRVJST1JfTk9fTUVNT1JZKSAhPSAwKQpAQCAtMTEzLDcgKzExMiw3IEBACiAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CiAgICAgfQogICBlbHNlCi0gICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIlVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCIpOworICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJVbmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWRcbiIpOwogCiAgIGhlbGxvX2Zyb21fc2VsZl9yZXBseV9yZWNlaXZlZCA9IFRSVUU7CiAgIApkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNoZWxsLXNlcnZpY2UuYyBiL3Rlc3QvdGVzdC1zaGVsbC1zZXJ2aWNlLmMKaW5kZXggMmVhY2NjMS4uMzJhODgzMiAxMDA2NDQKLS0tIGEvdGVzdC90ZXN0LXNoZWxsLXNlcnZpY2UuYworKysgYi90ZXN0L3Rlc3Qtc2hlbGwtc2VydmljZS5jCkBAIC0yMiw4ICsyMiw2IEBACiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiBkaWUgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CmRpZmYgLS1naXQgYS90ZXN0L3Rlc3QtdXRpbHMtZ2xpYi5jIGIvdGVzdC90ZXN0LXV0aWxzLWdsaWIuYwppbmRleCAyOGEzNjg0Li5lMDg0OTc3IDEwMDY0NAotLS0gYS90ZXN0L3Rlc3QtdXRpbHMtZ2xpYi5jCisrKyBiL3Rlc3QvdGVzdC11dGlscy1nbGliLmMKQEAgLTI3LDE3ICsyNywxNSBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgInRlc3QtdXRpbHMtZ2xpYi5oIgogCi0jaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmZGVmIERCVVNfV0lOCiAjIGluY2x1ZGUgPGlvLmg+CiAjIGluY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCi0jIGluY2x1ZGUgPG5ldGRiLmg+CisjIGluY2x1ZGUgPGVycm5vLmg+CiAjIGluY2x1ZGUgPHNpZ25hbC5oPgogIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICMgaW5jbHVkZSA8cHdkLmg+CiAjZW5kaWYKQEAgLTk3LDE0ICs5NSwxMiBAQAogICAgIGNvbnN0IGdjaGFyICpjb25maWd1cmF0aW9uLAogICAgIGNvbnN0IGdjaGFyICpsaXN0ZW5fYWRkcmVzcywKICAgICBUZXN0VXNlciB1c2VyLAotICAgIGNvbnN0IGdjaGFyICpydW50aW1lX2RpciwKICAgICBHUGlkICpkYWVtb25fcGlkKQogewogICBHRXJyb3IgKmVycm9yID0gTlVMTDsKICAgR1N0cmluZyAqYWRkcmVzczsKICAgZ2ludCBhZGRyZXNzX2ZkOwogICBHUHRyQXJyYXkgKmFyZ3Y7Ci0gIGdjaGFyICoqZW52cDsKICNpZmRlZiBEQlVTX1VOSVgKICAgY29uc3Qgc3RydWN0IHBhc3N3ZCAqcHdkID0gTlVMTDsKICNlbmRpZgpAQCAtMTUzLDggKzE0OSw2IEBACiAKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSBURVNUX1VTRVJfTUU6Ci0gICAgICAgICAgICAvKiBjYW5ub3QgZ2V0IGhlcmUsIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKICAgICAgICAgfQpAQCAtMTY0LDExICsxNTgsNiBAQAogI2VuZGlmCiAgICAgfQogCi0gIGVudnAgPSBnX2dldF9lbnZpcm9uICgpOwotCi0gIGlmIChydW50aW1lX2RpciAhPSBOVUxMKQotICAgIGVudnAgPSBnX2Vudmlyb25fc2V0ZW52IChlbnZwLCAiWERHX1JVTlRJTUVfRElSIiwgcnVudGltZV9kaXIsIFRSVUUpOwotCiAgIGFyZ3YgPSBnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMgKGdfZnJlZSk7CiAgIGdfcHRyX2FycmF5X2FkZCAoYXJndiwgZ19zdHJkdXAgKGJpbmFyeSkpOwogICBnX3B0cl9hcnJheV9hZGQgKGFyZ3YsIGdfc3RyZHVwIChjb25maWd1cmF0aW9uKSk7CkBAIC0xODYsNyArMTc1LDcgQEAKIAogICBnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMgKE5VTEwsIC8qIHdvcmtpbmcgZGlyZWN0b3J5ICovCiAgICAgICAoZ2NoYXIgKiopIGFyZ3YtPnBkYXRhLAotICAgICAgZW52cCwKKyAgICAgIE5VTEwsIC8qIGVudnAgKi8KICAgICAgIEdfU1BBV05fRE9fTk9UX1JFQVBfQ0hJTEQgfCBHX1NQQVdOX1NFQVJDSF9QQVRILAogI2lmZGVmIERCVVNfVU5JWAogICAgICAgY2hpbGRfc2V0dXAsIChncG9pbnRlcikgcHdkLApAQCAtMjAxLDcgKzE5MCw2IEBACiAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CiAKICAgZ19wdHJfYXJyYXlfZnJlZSAoYXJndiwgVFJVRSk7Ci0gIGdfc3RyZnJlZXYgKGVudnApOwogCiAgIGFkZHJlc3MgPSBnX3N0cmluZ19uZXcgKE5VTEwpOwogCkBAIC0yNDAsNyArMjI4LDYgQEAKIGdjaGFyICoKIHRlc3RfZ2V0X2RidXNfZGFlbW9uIChjb25zdCBnY2hhciAqY29uZmlnX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgVGVzdFVzZXIgICAgIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnJ1bnRpbWVfZGlyLAogICAgICAgICAgICAgICAgICAgICAgIEdQaWQgICAgICAgICpkYWVtb25fcGlkKQogewogICBnY2hhciAqZGJ1c19kYWVtb247CkBAIC0zMDksNyArMjk2LDcgQEAKICAgZWxzZQogICAgIHsKICAgICAgIGFkZHJlc3MgPSBzcGF3bl9kYnVzX2RhZW1vbiAoZGJ1c19kYWVtb24sIGFyZywKLSAgICAgICAgICBsaXN0ZW5fYWRkcmVzcywgdXNlciwgcnVudGltZV9kaXIsIGRhZW1vbl9waWQpOworICAgICAgICAgIGxpc3Rlbl9hZGRyZXNzLCB1c2VyLCBkYWVtb25fcGlkKTsKICAgICB9CiAKICAgZ19mcmVlIChkYnVzX2RhZW1vbik7CkBAIC0zMzQsOSArMzIxLDcgQEAKICAgZ19hc3NlcnQgKG9rKTsKICAgZ19hc3NlcnQgKGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoY29ubikgIT0gTlVMTCk7CiAKLSAgaWYgKGN0eCAhPSBOVUxMKQotICAgIHRlc3RfY29ubmVjdGlvbl9zZXR1cCAoY3R4LCBjb25uKTsKLQorICB0ZXN0X2Nvbm5lY3Rpb25fc2V0dXAgKGN0eCwgY29ubik7CiAgIHJldHVybiBjb25uOwogfQogCkBAIC00MTUsMzkgKzQwMCwxOCBAQAogICAgICAgY2FzZSBURVNUX1VTRVJfTUU6CiAgICAgICAgIHJldHVybiB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChjdHgsIGFkZHJlc3MpOwogCi0gICAgICBjYXNlIFRFU1RfVVNFUl9ST09UOgotICAgICAgY2FzZSBURVNUX1VTRVJfTUVTU0FHRUJVUzoKLSAgICAgIGNhc2UgVEVTVF9VU0VSX09USEVSOgorICAgICAgZGVmYXVsdDoKICAgICAgICAgZ190ZXN0X3NraXAgKCJzZXRyZXN1aWQoKSBub3QgYXZhaWxhYmxlLCBvciB1bnN1cmUgYWJvdXQgIgogICAgICAgICAgICAgImNyZWRlbnRpYWxzLXBhc3Npbmcgc2VtYW50aWNzIG9uIHRoaXMgcGxhdGZvcm0iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChOVUxMKTsKICAgICB9CiAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZAotcGlkX2RpZWQgKEdQaWQgcGlkLAotICAgICAgICAgIGdpbnQgc3RhdHVzLAotICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKnJlc3VsdCA9IHVzZXJfZGF0YTsKLQotICBnX2Fzc2VydCAocmVzdWx0ICE9IE5VTEwpOwotICBnX2Fzc2VydCAoISpyZXN1bHQpOwotICAqcmVzdWx0ID0gVFJVRTsKLX0KLQogdm9pZAogdGVzdF9raWxsX3BpZCAoR1BpZCBwaWQpCiB7Ci0gIGdpbnQgZGllZCA9IEZBTFNFOwotCi0gIGdfY2hpbGRfd2F0Y2hfYWRkIChwaWQsIHBpZF9kaWVkLCAmZGllZCk7Ci0KICNpZmRlZiBEQlVTX1dJTgogICBpZiAocGlkICE9IE5VTEwpCiAgICAgVGVybWluYXRlUHJvY2VzcyAocGlkLCAxKTsKQEAgLTQ1NSw2MCArNDE5LDQxIEBACiAgIGlmIChwaWQgPiAwKQogICAgIGtpbGwgKHBpZCwgU0lHVEVSTSk7CiAjZW5kaWYKLQotICB3aGlsZSAoIWRpZWQpCi0gICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChOVUxMLCBUUlVFKTsKIH0KIAogc3RhdGljIGdib29sZWFuCiB0aW1lX291dCAoZ3BvaW50ZXIgZGF0YSkKIHsKLSAgcHV0cyAoIkJhaWwgb3V0ISBUZXN0IHRpbWVkIG91dCAoR0xpYiBtYWluIGxvb3AgdGltZW91dCBjYWxsYmFjayByZWFjaGVkKSIpOwotICBmZmx1c2ggKHN0ZG91dCk7Ci0gIGFib3J0ICgpOworICBnX2Vycm9yICgidGltZWQgb3V0Iik7CiAgIHJldHVybiBGQUxTRTsKIH0KIAogI2lmZGVmIEdfT1NfVU5JWAotc3RhdGljIHZvaWQgd3JhcF9hYm9ydCAoaW50IHNpZ25hbCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHdyYXBfYWJvcnQgKGludCBzaWduYWwpCiB7Ci0gIC8qIFdlIG1pZ2h0IGJlIGhhbGZ3YXkgdGhyb3VnaCB3cml0aW5nIG91dCBzb21ldGhpbmcgZWxzZSwgc28gZm9yY2UgdGhpcwotICAgKiBvbnRvIGl0cyBvd24gbGluZSAqLwotICBjb25zdCBjaGFyIG1lc3NhZ2UgW10gPSAiXG5CYWlsIG91dCEgVGVzdCB0aW1lZCBvdXQgKFNJR0FMUk0gcmVjZWl2ZWQpXG4iOwotCi0gIGlmICh3cml0ZSAoU1RET1VUX0ZJTEVOTywgbWVzc2FnZSwgc2l6ZW9mIChtZXNzYWdlKSAtIDEpIDwKLSAgICAgIChzc2l6ZV90KSBzaXplb2YgKG1lc3NhZ2UpIC0gMSkKLSAgICB7Ci0gICAgICAvKiBpZ25vcmUgc2hvcnQgd3JpdGUgLSB3aGF0IHdvdWxkIHdlIGRvIGFib3V0IGl0PyAqLwotICAgIH0KLQogICBhYm9ydCAoKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZAotc2V0X3RpbWVvdXQgKGd1aW50IGZhY3RvcikKK3ZvaWQKK3Rlc3RfaW5pdCAoaW50ICphcmdjcCwgY2hhciAqKiphcmd2cCkKIHsKLSAgc3RhdGljIGd1aW50IHRpbWVvdXQgPSAwOworICBnX3Rlc3RfaW5pdCAoYXJnY3AsIGFyZ3ZwLCBOVUxMKTsKKyAgZ190ZXN0X2J1Z19iYXNlICgiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Iik7CiAKICAgLyogUHJldmVudCB0ZXN0cyBmcm9tIGhhbmdpbmcgZm9yZXZlci4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBsb25nIGVub3VnaAogICAgKiB0aGF0IGFueSByZWFzb25hYmxlIHJlZ3Jlc3Npb24gdGVzdCBvbiBhbnkgcmVhc29uYWJsZSBoYXJkd2FyZSB3b3VsZAogICAgKiBoYXZlIGZpbmlzaGVkLiAqLwogI2RlZmluZSBUSU1FT1VUIDYwCiAKLSAgaWYgKHRpbWVvdXQgIT0gMCkKLSAgICBnX3NvdXJjZV9yZW1vdmUgKHRpbWVvdXQpOwotCi0gIHRpbWVvdXQgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMgKFRJTUVPVVQgKiBmYWN0b3IsIHRpbWVfb3V0LCBOVUxMKTsKKyAgZ190aW1lb3V0X2FkZF9zZWNvbmRzIChUSU1FT1VULCB0aW1lX291dCwgTlVMTCk7CiAjaWZkZWYgR19PU19VTklYCiAgIC8qIFRoZSBHTGliIG1haW4gbG9vcCBtaWdodCBub3QgYmUgcnVubmluZyAod2UgZG9uJ3QgdXNlIGl0IGluIGV2ZXJ5CiAgICAqIHRlc3QpLiBEaWUgd2l0aCBTSUdBTFJNIHNob3J0bHkgYWZ0ZXIgaWYgbmVjZXNzYXJ5LiAqLwotICBhbGFybSAoKFRJTUVPVVQgKiBmYWN0b3IpICsgMTApOworICBhbGFybSAoVElNRU9VVCArIDEwKTsKIAotICAvKiBHZXQgYSBsb2cgbWVzc2FnZSBhbmQgYSBjb3JlIGR1bXAgZnJvbSB0aGUgU0lHQUxSTS4gKi8KKyAgLyogR2V0IGEgY29yZSBkdW1wIGZyb20gdGhlIFNJR0FMUk0uICovCiAgICAgewogICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3QgPSB7IH07CiAKQEAgLTUyMCwxODUgKzQ2NSw4IEBACiB9CiAKIHZvaWQKLXRlc3RfaW5pdCAoaW50ICphcmdjcCwgY2hhciAqKiphcmd2cCkKLXsKLSAgZ190ZXN0X2luaXQgKGFyZ2NwLCBhcmd2cCwgTlVMTCk7Ci0gIGdfdGVzdF9idWdfYmFzZSAoImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPSIpOwotICBzZXRfdGltZW91dCAoMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXBvcnRfYW5kX2Rlc3Ryb3kgKGdwb2ludGVyIHApCi17Ci0gIEdUaW1lciAqdGltZXIgPSBwOwotCi0gIGdfdGVzdF9tZXNzYWdlICgiVGltZSBzaW5jZSB0aW1lb3V0IHJlc2V0ICVwOiAlLjNmIHNlY29uZHMiLAotICAgICAgdGltZXIsIGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpKTsKLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci19Ci0KLXZvaWQKLXRlc3RfdGltZW91dF9yZXNldCAoZ3VpbnQgZmFjdG9yKQotewotICBHVGltZXIgKnRpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0KLSAgZ190ZXN0X21lc3NhZ2UgKCJSZXNldHRpbmcgdGVzdCB0aW1lb3V0IChyZWZlcmVuY2U6ICVwOyBmYWN0b3I6ICV1KSIsCi0gICAgICB0aW1lciwgZmFjdG9yKTsKLSAgc2V0X3RpbWVvdXQgKGZhY3Rvcik7Ci0KLSAgZ190ZXN0X3F1ZXVlX2Rlc3Ryb3kgKHJlcG9ydF9hbmRfZGVzdHJveSwgdGltZXIpOwotfQotCi12b2lkCiB0ZXN0X3Byb2dyZXNzIChjaGFyIHN5bWJvbCkKIHsKICAgaWYgKGdfdGVzdF92ZXJib3NlICgpICYmIGlzYXR0eSAoMSkpCiAgICAgZ19wcmludCAoIiVjIiwgc3ltYm9sKTsKIH0KLQotLyoKLSAqIERlbGV0ZSBAcGF0aCwgd2l0aCBhIHJldHJ5IGxvb3AgaWYgdGhlIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGJ5Ci0gKiBhbiBhc3luYyBzaWduYWwuIElmIEBwYXRoIGRvZXMgbm90IGV4aXN0LCBpZ25vcmU7IG90aGVyd2lzZSwgaXQgaXMKLSAqIHJlcXVpcmVkIHRvIGJlIGEgbm9uLWRpcmVjdG9yeS4KLSAqLwotdm9pZAotdGVzdF9yZW1vdmVfaWZfZXhpc3RzIChjb25zdCBnY2hhciAqcGF0aCkKLXsKLSAgd2hpbGUgKGdfcmVtb3ZlIChwYXRoKSAhPSAwKQotICAgIHsKLSAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOwotCi0gICAgICBpZiAoc2F2ZWRfZXJybm8gPT0gRU5PRU5UKQotICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBHX09TX1VOSVgKLSAgICAgIGlmIChzYXZlZF9lcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLQotICAgICAgZ19lcnJvciAoIlVuYWJsZSB0byByZW1vdmUgZmlsZSBcIiVzXCI6ICVzIiwgcGF0aCwKLSAgICAgICAgICAgICAgIGdfc3RyZXJyb3IgKHNhdmVkX2Vycm5vKSk7Ci0gICAgfQotfQotCi0vKgotICogRGVsZXRlIGVtcHR5IGRpcmVjdG9yeSBAcGF0aCwgd2l0aCBhIHJldHJ5IGxvb3AgaWYgdGhlIHN5c3RlbSBjYWxsIGlzCi0gKiBpbnRlcnJ1cHRlZCBieSBhbiBhc3luYyBzaWduYWwuIEBwYXRoIGlzIHJlcXVpcmVkIHRvIGV4aXN0LgotICovCi12b2lkCi10ZXN0X3JtZGlyX211c3RfZXhpc3QgKGNvbnN0IGdjaGFyICpwYXRoKQotewotICB3aGlsZSAoZ19yZW1vdmUgKHBhdGgpICE9IDApCi0gICAgewotICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0KLSNpZmRlZiBHX09TX1VOSVgKLSAgICAgIGlmIChzYXZlZF9lcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLQotICAgICAgZ19lcnJvciAoIlVuYWJsZSB0byByZW1vdmUgZGlyZWN0b3J5IFwiJXNcIjogJXMiLCBwYXRoLAotICAgICAgICAgICAgICAgZ19zdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBEZWxldGUgZW1wdHkgZGlyZWN0b3J5IEBwYXRoLCB3aXRoIGEgcmV0cnkgbG9vcCBpZiB0aGUgc3lzdGVtIGNhbGwgaXMKLSAqIGludGVycnVwdGVkIGJ5IGFuIGFzeW5jIHNpZ25hbC4gSWYgQHBhdGggZG9lcyBub3QgZXhpc3QsIGlnbm9yZS4KLSAqLwotdm9pZAotdGVzdF9ybWRpcl9pZl9leGlzdHMgKGNvbnN0IGdjaGFyICpwYXRoKQotewotICB3aGlsZSAoZ19yZW1vdmUgKHBhdGgpICE9IDApCi0gICAgewotICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0KLSAgICAgIGlmIChzYXZlZF9lcnJubyA9PSBFTk9FTlQpCi0gICAgICAgIHJldHVybjsKLQotI2lmZGVmIEdfT1NfVU5JWAotICAgICAgaWYgKHNhdmVkX2Vycm5vID09IEVJTlRSKQotICAgICAgICBjb250aW51ZTsKLSNlbmRpZgotCi0gICAgICBnX2Vycm9yICgiVW5hYmxlIHRvIHJlbW92ZSBkaXJlY3RvcnkgXCIlc1wiOiAlcyIsIHBhdGgsCi0gICAgICAgICAgICAgICBnX3N0cmVycm9yIChzYXZlZF9lcnJubykpOwotICAgIH0KLX0KLQotLyoKLSAqIENyZWF0ZSBkaXJlY3RvcnkgQHBhdGgsIHdpdGggYSByZXRyeSBsb29wIGlmIHRoZSBzeXN0ZW0gY2FsbCBpcwotICogaW50ZXJydXB0ZWQgYnkgYW4gYXN5bmMgc2lnbmFsLgotICovCi12b2lkCi10ZXN0X21rZGlyIChjb25zdCBnY2hhciAqcGF0aCwKLSAgICAgICAgICAgIGdpbnQgbW9kZSkKLXsKLSAgd2hpbGUgKGdfbWtkaXIgKHBhdGgsIG1vZGUpICE9IDApCi0gICAgewotICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0KLSNpZmRlZiBHX09TX1VOSVgKLSAgICAgIGlmIChzYXZlZF9lcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLQotICAgICAgZ19lcnJvciAoIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJXMiLCBwYXRoLAotICAgICAgICAgICAgICAgZ19zdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsKLSAgICB9Ci19Ci0KLWdib29sZWFuCi10ZXN0X2NoZWNrX3RjcF93b3JrcyAodm9pZCkKLXsKLSNpZmRlZiBEQlVTX1VOSVgKLSAgLyogSW4gcGF0aG9sb2dpY2FsIGNvbnRhaW5lciBlbnZpcm9ubWVudHMsIHdlIG1pZ2h0IG5vdCBoYXZlIGEKLSAgICogd29ya2luZyAxMjcuMC4wLjEgKi8KLSAgaW50IHJlczsKLSAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7Ci0gIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKLSAgaW50IHNhdmVkX2Vycm5vOwotCi0gIF9EQlVTX1pFUk8gKGhpbnRzKTsKLSNpZmRlZiBBSV9BRERSQ09ORklHCi0gIGhpbnRzLmFpX2ZsYWdzIHw9IEFJX0FERFJDT05GSUc7Ci0jZW5kaWYKLSAgaGludHMuYWlfZmxhZ3MgPSBBSV9BRERSQ09ORklHOwotICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOwotICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwotICBoaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOwotCi0gIHJlcyA9IGdldGFkZHJpbmZvICgiMTI3LjAuMC4xIiwgIjAiLCAmaGludHMsICZhZGRycyk7Ci0gIHNhdmVkX2Vycm5vID0gZXJybm87Ci0KLSAgaWYgKHJlcyAhPSAwKQotICAgIHsKLSAgICAgIGNvbnN0IGdjaGFyICpzeXN0ZW1fbWVzc2FnZTsKLSAgICAgIGdjaGFyICpza2lwX21lc3NhZ2U7Ci0KLSNpZmRlZiBFQUlfU1lTVEVNCi0gICAgICBpZiAocmVzID09IEVBSV9TWVNURU0pCi0gICAgICAgIHN5c3RlbV9tZXNzYWdlID0gZ19zdHJlcnJvciAoc2F2ZWRfZXJybm8pOwotICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIHN5c3RlbV9tZXNzYWdlID0gZ2FpX3N0cmVycm9yIChyZXMpOwotCi0gICAgICBza2lwX21lc3NhZ2UgPSBnX3N0cmR1cF9wcmludGYgKCJOYW1lIHJlc29sdXRpb24gZG9lcyBub3Qgd29yayBoZXJlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRhZGRyaW5mbyhcIjEyNy4wLjAuMVwiLCBcIjBcIiwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie2ZsYWdzPUFERFJDT05GSUcsIGZhbWlseT1JTkVULCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvY2t0eXBlPVNUUkVBTSwgcHJvdG9jb2w9VENQfSk6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX21lc3NhZ2UpOwotICAgICAgZ190ZXN0X3NraXAgKHNraXBfbWVzc2FnZSk7Ci0gICAgICBmcmVlIChza2lwX21lc3NhZ2UpOwotICAgIH0KLQotICBpZiAoYWRkcnMgIT0gTlVMTCkKLSAgICBmcmVlYWRkcmluZm8gKGFkZHJzKTsKLQotICByZXR1cm4gKHJlcyA9PSAwKTsKLSNlbHNlCi0gIC8qIEFzc3VtZSB0aGF0IG9uIFdpbmRvd3MsIFRDUCBhbHdheXMgd29ya3MgKi8KLSAgcmV0dXJuIFRSVUU7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC11dGlscy1nbGliLmggYi90ZXN0L3Rlc3QtdXRpbHMtZ2xpYi5oCmluZGV4IGU2MjEyMWMuLmFjYWNlZTAgMTAwNjQ0Ci0tLSBhL3Rlc3QvdGVzdC11dGlscy1nbGliLmgKKysrIGIvdGVzdC90ZXN0LXV0aWxzLWdsaWIuaApAQCAtNjksNyArNjksNiBAQAogCiBnY2hhciAqdGVzdF9nZXRfZGJ1c19kYWVtb24gKGNvbnN0IGdjaGFyICpjb25maWdfZmlsZSwKICAgICBUZXN0VXNlciB1c2VyLAotICAgIGNvbnN0IGdjaGFyICpydW50aW1lX2RpciwKICAgICBHUGlkICpkYWVtb25fcGlkKTsKIAogREJ1c0Nvbm5lY3Rpb24gKnRlc3RfY29ubmVjdF90b19idXMgKFRlc3RNYWluQ29udGV4dCAqY3R4LApAQCAtODQsMjggKzgzLDEyIEBACiAKIHZvaWQgdGVzdF9wcm9ncmVzcyAoY2hhciBzeW1ib2wpOwogCi12b2lkIHRlc3RfcmVtb3ZlX2lmX2V4aXN0cyAoY29uc3QgZ2NoYXIgKnBhdGgpOwotdm9pZCB0ZXN0X3JtZGlyX211c3RfZXhpc3QgKGNvbnN0IGdjaGFyICpwYXRoKTsKLXZvaWQgdGVzdF9ybWRpcl9pZl9leGlzdHMgKGNvbnN0IGdjaGFyICpwYXRoKTsKLXZvaWQgdGVzdF9ta2RpciAoY29uc3QgZ2NoYXIgKnBhdGgsIGdpbnQgbW9kZSk7Ci0KLXZvaWQgdGVzdF90aW1lb3V0X3Jlc2V0IChndWludCBmYWN0b3IpOwotCi0jaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKLSNkZWZpbmUgZ19zdGVhbF9wb2ludGVyKHgpIGJhY2twb3J0ZWRfZ19zdGVhbF9wb2ludGVyICh4KQotLyogQSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgZ19zdGVhbF9wb2ludGVyIHdpdGhvdXQgdHlwZS1zYWZldHkuICovCi1zdGF0aWMgaW5saW5lIGdwb2ludGVyCi1iYWNrcG9ydGVkX2dfc3RlYWxfcG9pbnRlciAoZ3BvaW50ZXIgcG9pbnRlcl90b19wb2ludGVyKQorI2lmICFHTElCX0NIRUNLX1ZFUlNJT04gKDIsIDM4LCAwKQorI2RlZmluZSBnX3Rlc3Rfc2tpcChzKSBteV90ZXN0X3NraXAgKHMpCitzdGF0aWMgaW5saW5lIHZvaWQgbXlfdGVzdF9za2lwIChjb25zdCBnY2hhciAqcykKIHsKLSAgZ3BvaW50ZXIgKnBwID0gcG9pbnRlcl90b19wb2ludGVyOwotICBncG9pbnRlciByZXQ7Ci0KLSAgcmV0ID0gKnBwOwotICAqcHAgPSBOVUxMOwotICByZXR1cm4gcmV0OworICBnX3Rlc3RfbWVzc2FnZSAoIlNLSVA6ICVzIiwgcyk7CiB9CiAjZW5kaWYKIAotZ2Jvb2xlYW4gdGVzdF9jaGVja190Y3Bfd29ya3MgKHZvaWQpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC11dGlscy5jIGIvdGVzdC90ZXN0LXV0aWxzLmMKaW5kZXggM2Y0ZDE5NS4uY2I2Y2YxZiAxMDA2NDQKLS0tIGEvdGVzdC90ZXN0LXV0aWxzLmMKKysrIGIvdGVzdC90ZXN0LXV0aWxzLmMKQEAgLTE1MSw4ICsxNTEsNiBAQAogICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZSAoY29uc3QgY2hhciAqbWVzc2FnZSkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIGRpZSAoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKZGlmZiAtLWdpdCBhL3Rlc3QvdGhyZWFkLWJsb2NraW5nLmMgYi90ZXN0L3RocmVhZC1ibG9ja2luZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODE0ZGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3QvdGhyZWFkLWJsb2NraW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyogLSotIG1vZGU6IEM7IGMtZmlsZS1zdHlsZTogImdudSI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgLSotICovCi0vKgotICogUmVncmVzc2lvbiB0ZXN0IGZvciBmZC5vICMxMDI4Mzk6IGJsb2NraW5nIG9uIHBlbmRpbmcgY2FsbHMgaW4gdGhyZWFkcwotICoKLSAqIENvcHlyaWdodCDCqSAyMDE4IEtQSVQgVGVjaG5vbG9naWVzIEx0ZC4KLSAqIENvcHlyaWdodCDCqSAyMDE4IE1hbmlzaCBOYXJhbmcgPG1hbnJvY2swMDdAZ21haWwuY29tPgotICogQ29weXJpZ2h0IMKpIDIwMTggQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4xCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLQotI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotI2luY2x1ZGUgInRlc3QtdXRpbHMtZ2xpYi5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICBEQnVzRXJyb3IgZTsKLSAgR0Vycm9yICpnZTsKLSAgR1BpZCBkYWVtb25fcGlkOwotICBnY2hhciAqYWRkcmVzczsKLQotICBEQnVzQ29ubmVjdGlvbiAqc2VydmljZV9jb25uOwotICBHVGhyZWFkICpzZXJ2aWNlX3RocmVhZDsKLSAgY29uc3QgZ2NoYXIgKnNlcnZpY2VfbmFtZTsKLQotICBHVGhyZWFkICpjbGllbnRfZGlzcGF0Y2hlcl90aHJlYWQ7Ci0gIEdUaHJlYWQgKipjbGllbnRfY2FsbGVyX3RocmVhZHM7Ci0gIERCdXNDb25uZWN0aW9uICpjbGllbnRfY29ubjsKLSAgR011dGV4IGNhbGxlcnNfcmVtYWluaW5nX211dGV4OwotICBHQ29uZCBjYWxsZXJzX3JlbWFpbmluZ19jb25kOwotICBnc2l6ZSBjYWxsZXJzX3JlbWFpbmluZzsKLQotICBnc2l6ZSBuX2NhbGxlcl90aHJlYWRzOwotICBnc2l6ZSBjYWxsc19wZXJfdGhyZWFkOwotfSBGaXh0dXJlOwotCi1zdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQKLWVjaG9fZmlsdGVyIChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwKLSAgICAgICAgICAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCi17Ci0gIERCdXNNZXNzYWdlICpyZXBseTsKLQotICBpZiAoZGJ1c19tZXNzYWdlX2dldF90eXBlIChtZXNzYWdlKSAhPSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkKLSAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Ci0KLSAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4gKG1lc3NhZ2UpOwotCi0gIGlmIChyZXBseSA9PSBOVUxMIHx8Ci0gICAgICAhZGJ1c19jb25uZWN0aW9uX3NlbmQgKGNvbm5lY3Rpb24sIHJlcGx5LCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZGJ1c19jbGVhcl9tZXNzYWdlICgmcmVwbHkpOwotCi0gIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggdGhlIHNlcnZpY2UgY29ubmVjdGlvbi4gVGhpcyBmdW5jdGlvbiBydW5zCi0gKiBpbiBpdHMgb3duIHRocmVhZCwgZGlzcGF0Y2hpbmcgdGhlIHNlcnZpY2UgY29ubmVjdGlvbiBhbmQgcmVwbHlpbmcgdG8KLSAqIG1ldGhvZCBjYWxscyBmcm9tIHRoZSBjYWxsZXJzLCB1bnRpbCB0aGUgc2VydmljZSBjb25uZWN0aW9uIGlzCi0gKiBkaXNjb25uZWN0ZWQgYnkgdGhlIG1haW4gdGhyZWFkLgotICovCi1zdGF0aWMgZ3BvaW50ZXIKLXNlcnZpY2VfdGhyZWFkX2NiIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEZpeHR1cmUgKmYgPSB1c2VyX2RhdGE7Ci0KLSAgLyogSW4gcHJpbmNpcGxlIHdlIHNob3VsZCBiZSBhYmxlIHRvIHdhaXQgaW5kZWZpbml0ZWx5ICgtMSkgYnV0IHRoYXQKLSAgICogc2VlbXMgdG8gcHJldmVudCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkIGZyb20KLSAgICogaGF2aW5nIGl0cyBkZXNpcmVkIGVmZmVjdCAqLwotICB3aGlsZSAoZGJ1c19jb25uZWN0aW9uX3JlYWRfd3JpdGVfZGlzcGF0Y2ggKGYtPnNlcnZpY2VfY29ubiwgMTAwMCkpCi0gICAgewotICAgICAgLyogRGlzY29ubmVjdGVkIG1lc3NhZ2Ugbm90IHJlY2VpdmVkOyBrZWVwIHByb2Nlc3NpbmcgKi8KLSAgICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBNdWNoIGxpa2Ugc2VydmljZV90aHJlYWRfY2IsIGJ1dCBmb3IgdGhlIGNsaWVudCBjb25uZWN0aW9uLiBJbiBhIHJlYWwKLSAqIHByb2dyYW0gdGhpcyB3b3VsZCBvZnRlbiBiZSB0aGUgbWFpbiB0aHJlYWQsIHJ1bm5pbmcgYW4gZXZlbnQgbG9vcAotICogbGlrZSB0aGUgb25lIHByb3ZpZGVkIGJ5IEdMaWIuCi0gKi8KLXN0YXRpYyBncG9pbnRlcgotY2xpZW50X2Rpc3BhdGNoZXJfdGhyZWFkX2NiIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEZpeHR1cmUgKmYgPSB1c2VyX2RhdGE7Ci0KLSAgLyogVGhpcyB0aHJlYWQgbmVlZHMgdG8geWllbGQgb2NjYXNpb25hbGx5LCBvdGhlcndpc2UgdGhlIGNhbGxlcgotICAgKiB0aHJlYWRzIHdvbid0IGV2ZXIgZ2V0IGEgY2hhbmNlIHRvIHNlbmQgdGhlaXIgbWVzc2FnZXMuCi0gICAqIFRoaXMgaXMgbm90IGEgcmVjb21tZW5kZWQgSS9PIHBhdHRlcm4sIGJ1dCBpbiBwcmluY2lwbGUgaXQgd2FzCi0gICAqIGFsd2F5cyBtZWFudCB0byB3b3JrLi4uICovCi0gIHdoaWxlIChkYnVzX2Nvbm5lY3Rpb25fcmVhZF93cml0ZV9kaXNwYXRjaCAoZi0+Y2xpZW50X2Nvbm4sIDEwKSkKLSAgICB7Ci0gICAgICAvKiBEaXNjb25uZWN0ZWQgbWVzc2FnZSBub3QgcmVjZWl2ZWQ7IGtlZXAgcHJvY2Vzc2luZyAqLwotICAgIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFdvcmtlciB0aHJlYWQgcmVwcmVzZW50aW5nIHNvbWUgYmFja2dyb3VuZCB0YXNrLiBTb21lIHByb2dyYW1zCi0gKiBkaXNwYXRjaCBhIERCdXNDb25uZWN0aW9uIGluIG9uZSB0aHJlYWQgKGluIHRoaXMgdGVzdCB0aGF0J3MgdGhlCi0gKiAiY2xpZW50IGRpc3BhdGNoZXIgdGhyZWFkIiksIGFuZCBleHBlY3QgdG8gYmUgYWJsZSB0byBibG9jayBvbgotICogcGVuZGluZyBjYWxscyBpbiBvdGhlciB0aHJlYWRzLiBUaGlzIHJlcHJlc2VudHMgb25lIG9mIHRob3NlIG90aGVyCi0gKiB0aHJlYWRzLgotICovCi1zdGF0aWMgZ3BvaW50ZXIKLWNsaWVudF9jYWxsZXJfdGhyZWFkX2NiIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEZpeHR1cmUgKmYgPSB1c2VyX2RhdGE7Ci0gIGdzaXplIGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGYtPmNhbGxzX3Blcl90aHJlYWQ7IGkrKykKLSAgICB7Ci0gICAgICBEQnVzTWVzc2FnZSAqY2FsbCwgKnJlcGx5OwotICAgICAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwotICAgICAgZ2ludDY0IHRpbWVfYmVmb3JlLCB0aW1lX2FmdGVyOwotCi0gICAgICAvKiBUaGlzIGRlbGliZXJhdGVseSBpc24ndCBnX3Rlc3RfbWVzc2FnZSgpIHRvIGF2b2lkIGJ1ZmZlcmluZwotICAgICAgICogaXNzdWVzOiBzdGRlcnIgaXMgbGluZS1idWZmZXJlZCAqLwotICAgICAgaWYgKGkgJSAxMDAgPT0gMCkKLSAgICAgICAgZ19wcmludGVyciAoIiMgdGhyZWFkICVwOiAlIiBHX0dTSVpFX0ZPUk1BVCAiLyUiIEdfR1NJWkVfRk9STUFUICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnX3RocmVhZF9zZWxmICgpLCBpLCBmLT5jYWxsc19wZXJfdGhyZWFkKTsKLQotICAgICAgY2FsbCA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKGYtPnNlcnZpY2VfbmFtZSwgIi8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uZXhhbXBsZS5FY2hvIiwgIkVjaG8iKTsKLSAgICAgIGdfYXNzZXJ0X25vbm51bGwgKGNhbGwpOwotCi0gICAgICB0aW1lX2JlZm9yZSA9IGdfZ2V0X21vbm90b25pY190aW1lICgpOwotICAgICAgcmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoZi0+Y2xpZW50X2Nvbm4sIGNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDAwMCwgJmVycm9yKTsKLSAgICAgIHRpbWVfYWZ0ZXIgPSBnX2dldF9tb25vdG9uaWNfdGltZSAoKTsKLSAgICAgIHRlc3RfYXNzZXJ0X25vX2Vycm9yICgmZXJyb3IpOwotICAgICAgZ19hc3NlcnRfbm9ubnVsbCAocmVwbHkpOwotICAgICAgLyogV2UgZG9uJ3QgZXhwZWN0IGl0IHRvIGhhdmUgdGFrZW4gbG9uZyAtIGEgZmV3IHNlY29uZHMgbWF4LCBldmVuCi0gICAgICAgKiB3aXRoIGFsbCB0aGUgb3RoZXIgdGhyZWFkcyBjb250ZW5kaW5nIHdpdGggdXMuIElmIHdlIHdlcmUKLSAgICAgICAqIGFueXdoZXJlIG5lYXIgdGhlIDMwIHNlY29uZCB0aW1lb3V0IHRoZW4gdGhhdCdzIGEgZmFpbHVyZS4gKi8KLSAgICAgIGdfYXNzZXJ0X2NtcGludCAodGltZV9hZnRlciAtIHRpbWVfYmVmb3JlLCA8PSwgMTAgKiBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZyZXBseSk7Ci0gICAgICBkYnVzX2NsZWFyX21lc3NhZ2UgKCZjYWxsKTsKLSAgICB9Ci0KLSAgZ19wcmludGVyciAoIiMgdGhyZWFkICVwOiBmaW5pc2hpbmdcbiIsIGdfdGhyZWFkX3NlbGYgKCkpOwotICBnX211dGV4X2xvY2sgKCZmLT5jYWxsZXJzX3JlbWFpbmluZ19tdXRleCk7Ci0gIGYtPmNhbGxlcnNfcmVtYWluaW5nLS07Ci0gIGdfY29uZF9zaWduYWwgKCZmLT5jYWxsZXJzX3JlbWFpbmluZ19jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZmLT5jYWxsZXJzX3JlbWFpbmluZ19tdXRleCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cCAoRml4dHVyZSAqZiwKLSAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIGYtPmdlID0gTlVMTDsKLSAgZGJ1c19lcnJvcl9pbml0ICgmZi0+ZSk7Ci0KLSAgZi0+YWRkcmVzcyA9IHRlc3RfZ2V0X2RidXNfZGFlbW9uIChOVUxMLCBURVNUX1VTRVJfTUUsIE5VTEwsICZmLT5kYWVtb25fcGlkKTsKLSAgZ19hc3NlcnRfbm9ubnVsbCAoZi0+YWRkcmVzcyk7Ci0KLSAgZi0+c2VydmljZV9jb25uID0gdGVzdF9jb25uZWN0X3RvX2J1cyAoTlVMTCwgZi0+YWRkcmVzcyk7Ci0gIGYtPnNlcnZpY2VfbmFtZSA9IGRidXNfYnVzX2dldF91bmlxdWVfbmFtZSAoZi0+c2VydmljZV9jb25uKTsKLSAgZi0+Y2xpZW50X2Nvbm4gPSB0ZXN0X2Nvbm5lY3RfdG9fYnVzIChOVUxMLCBmLT5hZGRyZXNzKTsKLQotICBpZiAoIWRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyIChmLT5zZXJ2aWNlX2Nvbm4sIGVjaG9fZmlsdGVyLCBmLCBOVUxMKSkKLSAgICBnX2Vycm9yICgiT09NIik7Ci0KLSAgZi0+c2VydmljZV90aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJzZXJ2aWNlIiwgc2VydmljZV90aHJlYWRfY2IsIGYpOwotICBmLT5jbGllbnRfZGlzcGF0Y2hlcl90aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJjbGllbnQgZGlzcGF0Y2hlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2Rpc3BhdGNoZXJfdGhyZWFkX2NiLCBmKTsKLX0KLQotLyoKLSAqIEFzc2VydCB0aGF0IGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgotICoKLSAqIC0gb25lIHRocmVhZCBkaXNwYXRjaGVzIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbiAoaW4gcmVhbCBsaWZlIHRoaXMgd291bGQKLSAqICAgbm9ybWFsbHkgYmUgYSBzZXBhcmF0ZSBwcm9jZXNzLCBvZiBjb3Vyc2UpCi0gKiAtIG9uZSB0aHJlYWQgZGlzcGF0Y2hlcyB0aGUgY2xpZW50IGNvbm5lY3Rpb24KLSAqIC0gbWFueSB0aHJlYWRzIG1ha2UgYmxvY2tpbmcgbWV0aG9kIGNhbGxzIG9uIHRoZSBzYW1lIGNsaWVudCBjb25uZWN0aW9uCi0gKgotICogdGhlIGNhbGxlciB0aHJlYWRzIGFyZSByZWd1bGFybHkgZGlzcGF0Y2hlZCwgYW5kIG5ldmVyIGdldCBibG9ja2VkCi0gKiB1bnRpbCB0aGVpciBtZXRob2QgY2FsbCB0aW1lb3V0LgotICovCi1zdGF0aWMgdm9pZAotdGVzdF90aHJlYWRzIChGaXh0dXJlICpmLAotICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGNvbnRleHQpCi17Ci0gIGdzaXplIGk7Ci0KLSAgZ190ZXN0X2J1ZyAoIjEwMjgzOSIpOwotCi0gIGlmIChnX3Rlc3Rfc2xvdyAoKSkKLSAgICB7Ci0gICAgICB0ZXN0X3RpbWVvdXRfcmVzZXQgKDEwKTsKLSAgICAgIGYtPm5fY2FsbGVyX3RocmVhZHMgPSAyMDsKLSAgICAgIGYtPmNhbGxzX3Blcl90aHJlYWQgPSAxMDAwMDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB0ZXN0X3RpbWVvdXRfcmVzZXQgKDEpOwotICAgICAgZi0+bl9jYWxsZXJfdGhyZWFkcyA9IDQ7Ci0gICAgICBmLT5jYWxsc19wZXJfdGhyZWFkID0gMTAwMDsKLSAgICB9Ci0KLSAgZi0+Y2xpZW50X2NhbGxlcl90aHJlYWRzID0gZ19uZXcwIChHVGhyZWFkICosIGYtPm5fY2FsbGVyX3RocmVhZHMpOwotICBmLT5jYWxsZXJzX3JlbWFpbmluZyA9IGYtPm5fY2FsbGVyX3RocmVhZHM7Ci0KLSAgLyogU3RhcnQgdGhlIGNhbGxlciB0aHJlYWRzIG9mZiAqLwotCi0gIGZvciAoaSA9IDA7IGkgPCBmLT5uX2NhbGxlcl90aHJlYWRzOyBpKyspCi0gICAgewotICAgICAgZ2NoYXIgKm5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJjbGllbnQgJSIgR19HU0laRV9GT1JNQVQsIGkpOwotCi0gICAgICBmLT5jbGllbnRfY2FsbGVyX3RocmVhZHNbaV0gPSBnX3RocmVhZF9uZXcgKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9jYWxsZXJfdGhyZWFkX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKTsKLSAgICB9Ci0KLSAgLyogV2FpdCBmb3IgYWxsIGNhbGxlciB0aHJlYWRzIHRvIGV4aXQgKi8KLQotICBnX211dGV4X2xvY2sgKCZmLT5jYWxsZXJzX3JlbWFpbmluZ19tdXRleCk7Ci0KLSAgd2hpbGUgKGYtPmNhbGxlcnNfcmVtYWluaW5nID4gMCkKLSAgICBnX2NvbmRfd2FpdCAoJmYtPmNhbGxlcnNfcmVtYWluaW5nX2NvbmQsICZmLT5jYWxsZXJzX3JlbWFpbmluZ19tdXRleCk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZmLT5jYWxsZXJzX3JlbWFpbmluZ19tdXRleCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGYtPm5fY2FsbGVyX3RocmVhZHM7IGkrKykKLSAgICBnX3RocmVhZF9qb2luIChnX3N0ZWFsX3BvaW50ZXIgKCZmLT5jbGllbnRfY2FsbGVyX3RocmVhZHNbaV0pKTsKLQotICAvKiBJZiB3ZSBoYXZlbid0IGNyYXNoZWQgb3V0IHlldCwgdGhlbiB3ZSdyZSBnb29kISAqLwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd24gKEZpeHR1cmUgKmYsCi0gICAgICAgICAgZ2NvbnN0cG9pbnRlciBjb250ZXh0IEdfR05VQ19VTlVTRUQpCi17Ci0gIGRidXNfZXJyb3JfZnJlZSAoJmYtPmUpOwotICBnX2NsZWFyX2Vycm9yICgmZi0+Z2UpOwotCi0gIGlmIChmLT5jbGllbnRfY29ubiAhPSBOVUxMKQotICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZSAoZi0+Y2xpZW50X2Nvbm4pOwotCi0gIGlmIChmLT5zZXJ2aWNlX2Nvbm4gIT0gTlVMTCkKLSAgICB7Ci0gICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVtb3ZlX2ZpbHRlciAoZi0+c2VydmljZV9jb25uLCBlY2hvX2ZpbHRlciwgZik7Ci0gICAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgKGYtPnNlcnZpY2VfY29ubik7Ci0gICAgfQotCi0gIC8qIE5vdyB0aGF0IHRoZSBjb25uZWN0aW9ucyBoYXZlIGJlZW4gY2xvc2VkLCB0aGUgdGhyZWFkcyB3aWxsIGV4aXQgKi8KLSAgaWYgKGYtPnNlcnZpY2VfdGhyZWFkICE9IE5VTEwpCi0gICAgZ190aHJlYWRfam9pbiAoZ19zdGVhbF9wb2ludGVyICgmZi0+c2VydmljZV90aHJlYWQpKTsKLQotICBpZiAoZi0+Y2xpZW50X2Rpc3BhdGNoZXJfdGhyZWFkICE9IE5VTEwpCi0gICAgZ190aHJlYWRfam9pbiAoZ19zdGVhbF9wb2ludGVyICgmZi0+Y2xpZW50X2Rpc3BhdGNoZXJfdGhyZWFkKSk7Ci0KLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZi0+c2VydmljZV9jb25uKTsKLSAgZGJ1c19jbGVhcl9jb25uZWN0aW9uICgmZi0+Y2xpZW50X2Nvbm4pOwotCi0gIGlmIChmLT5kYWVtb25fcGlkICE9IDApCi0gICAgewotICAgICAgdGVzdF9raWxsX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgICBnX3NwYXduX2Nsb3NlX3BpZCAoZi0+ZGFlbW9uX3BpZCk7Ci0gICAgICBmLT5kYWVtb25fcGlkID0gMDsKLSAgICB9Ci0KLSAgZ19mcmVlIChmLT5hZGRyZXNzKTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywKLSAgICBjaGFyICoqYXJndikKLXsKLSAgdGVzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGdfdGVzdF9hZGQgKCIvdGhyZWFkLWJsb2NraW5nIiwgRml4dHVyZSwgTlVMTCwgc2V0dXAsIHRlc3RfdGhyZWFkcywKLSAgICAgICAgICAgICAgdGVhcmRvd24pOwotCi0gIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdC91aWQtcGVybWlzc2lvbnMuYyBiL3Rlc3QvdWlkLXBlcm1pc3Npb25zLmMKaW5kZXggMTlhOWFhNC4uNTdmN2VjOSAxMDA2NDQKLS0tIGEvdGVzdC91aWQtcGVybWlzc2lvbnMuYworKysgYi90ZXN0L3VpZC1wZXJtaXNzaW9ucy5jCkBAIC02MCw3ICs2MCw3IEBACiAgIGRidXNfZXJyb3JfaW5pdCAoJmYtPmUpOwogCiAgIGFkZHJlc3MgPSB0ZXN0X2dldF9kYnVzX2RhZW1vbiAoY29uZmlnID8gY29uZmlnLT5jb25maWdfZmlsZSA6IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9VU0VSX01FU1NBR0VCVVMsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9VU0VSX01FU1NBR0VCVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmYtPmRhZW1vbl9waWQpOwogCiAgIGlmIChhZGRyZXNzID09IE5VTEwpCmRpZmYgLS1naXQgYS90ZXN0L3VudXNlZC1jb2RlLWdjLnB5IGIvdGVzdC91bnVzZWQtY29kZS1nYy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTg1OTdmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC91bnVzZWQtY29kZS1nYy5weQpAQCAtMCwwICsxLDI0MiBAQAorIyEgL3Vzci9iaW4vcHl0aG9uCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IHJlCisKKyMjIGhhc2ggZnJvbSBzeW1ib2wgbmFtZSB0byBsaXN0IG9mIHN5bWJvbHMgd2l0aCB0aGF0IG5hbWUsCisjIyB3aGVyZSB0aGUgbGlzdCBvZiBzeW1ib2xzIGNvbnRhaW5zIGEgbGlzdCByZXByZXNlbnRpbmcgZWFjaCBzeW1ib2wKK3N5bWJvbHMgPSB7fQorcm9vdHMgPSB7fQorCitkZWYgY3JlYXRlQmFja2xpbmtzKG5hbWUsIHN5bXMpOgorICAgIGZvciBzIGluIHN5bXM6CisgICAgICAgIHJlZnMgPSBzWzJdCisgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAjIyBmb3IgZWFjaCByZWYsIGFkZCBvdXJzZWx2ZXMgYXMgYSByZWZlcmVuY2VyCisgICAgICAgICAgICBpZiBzeW1ib2xzLmhhc19rZXkocik6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHN5bWJvbHNbcl0KKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiB0WzVdOgorICAgICAgICAgICAgICAgICAgICAgICAgdFs1XS5hcHBlbmQobmFtZSkKKworZGVmIG1hcmtTeW1ib2woZnJtLCBuYW1lKToKKyAgICBpZiBub3Qgc3ltYm9scy5oYXNfa2V5KG5hbWUpOgorICAgICAgICBwcmludCAiJXMgcmVmZXJlbmNlZCBidXQgd2FzIG5vdCBpbiB0aGUgb2JqZHVtcCIKKyAgICBzeW1zID0gc3ltYm9sc1tuYW1lXQorICAgICMjIHByaW50IGFtYmlndW91cyByZWZlcmVuY2VzIHVubGVzcyB0aGV5IGFyZSBpbnRlcm5hbCBub2lzZSBsaWtlICIuTDEyOSIKKyAgICBpZiBsZW4oc3ltcykgPiAxIGFuZCBuYW1lWzBdICE9ICcuJzoKKyAgICAgICAgcHJpbnQgIlJlZmVyZW5jZSB0byBzeW1ib2wgJyVzJyBmcm9tICclcycgaXMgYW1iaWd1b3VzLCBtYXJraW5nIGFsbCAnJXMnIiAlIChuYW1lLCBmcm0sIG5hbWUpCisgICAgICAgIHByaW50IHN5bXMKKyAgICBmb3IgcyBpbiBzeW1zOgorICAgICAgICBpZiBzWzRdOgorICAgICAgICAgICAgcGFzcyAjIyBhbHJlYWR5IG1hcmtlZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc1s0XSA9IDEKKyAgICAgICAgICAgIHJlZnMgPSBzWzJdCisgICAgICAgICAgICBmb3IgciBpbiByZWZzOgorICAgICAgICAgICAgICAgIG1hcmtTeW1ib2woc1swXSwgcikKKworZGVmIGNtcEZpbGVuYW1lKGEsIGIpOgorICAgIHYgPSBjbXAoYVsxXSwgYlsxXSkKKyAgICBpZiB2ID09IDA6CisgICAgICAgIHYgPSBjbXAoYVswXSwgYlswXSkKKyAgICByZXR1cm4gdgorCitkZWYgc2l6ZUFzU3RyaW5nKGJ5dGVzKToKKyAgICBpZiBieXRlcyA8IDEwMjQ6CisgICAgICAgIHJldHVybiAiJWQgYnl0ZXMiICUgYnl0ZXMKKyAgICBlbGlmIGJ5dGVzIDwgMTAyNCoxMDI0OgorICAgICAgICByZXR1cm4gIiUuMmdLIiAlIChieXRlcyAvIDEwMjQuMCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiUuMmdNIiAlIChieXRlcyAvIDEwMjQuMCAvIDEwMjQuMCkKKworZGVmIHByaW50TG9zdCgpOgorICAgIGxpc3QgPSBbXQorICAgIGZpbGVuYW1lID0gTm9uZQorICAgIGZvciAobmFtZSwgc3ltcykgaW4gc3ltYm9scy5pdGVtcygpOgorICAgICAgICBzID0gc3ltc1swXSAjIyB3ZSBhbHdheXMgbWFyayBhbGwgb3Igbm9uZSBmb3Igbm93CisgICAgICAgIGlmIG5vdCBzWzRdIGFuZCBuYW1lWzBdICE9ICcuJzogIyMgc2tpcCAuTDEyOSB0eXBlIHN5bWJvbHMKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc1szXQorICAgICAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gInVua25vd24gZmlsZSIKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kICgobmFtZSwgZmlsZW5hbWUsIHNbNV0sIHNbN10pKQorCisgICAgZmlsZV9zdW1tYXJpZXMgPSBbXQorICAgIHRvdGFsX3VudXNlZCA9IDAKKyAgICB0b3RhbF90aGlzX2ZpbGUgPSAwCisgICAgZmlsZW5hbWUgPSBOb25lCisgICAgbGlzdC5zb3J0KGNtcEZpbGVuYW1lKQorICAgIGZvciBsIGluIGxpc3Q6CisgICAgICAgIG5leHRfZmlsZW5hbWUgPSBsWzFdCisgICAgICAgIGlmIG5leHRfZmlsZW5hbWUgIT0gZmlsZW5hbWU6CisgICAgICAgICAgICBpZiB0b3RhbF90aGlzX2ZpbGUgPiAwOgorICAgICAgICAgICAgICAgIGZpbGVfc3VtbWFyaWVzLmFwcGVuZCAoIiAgJXMgbWF5IGJlIHVudXNlZCBpbiAlcyIgJSAoc2l6ZUFzU3RyaW5nKHRvdGFsX3RoaXNfZmlsZSksIGZpbGVuYW1lKSkKKyAgICAgICAgICAgIHByaW50ICIlcyBoYXMgdGhlc2Ugc3ltYm9scyBub3QgcmVhY2hhYmxlIGZyb20gZXhwb3J0ZWQgc3ltYm9sczoiICUgbmV4dF9maWxlbmFtZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBuZXh0X2ZpbGVuYW1lCisgICAgICAgICAgICB0b3RhbF90aGlzX2ZpbGUgPSAwCisgICAgICAgIHByaW50ICIgICAgJXMgJXMiICUgKGxbMF0sIHNpemVBc1N0cmluZyhsWzNdKSkKKyAgICAgICAgdG90YWxfdW51c2VkID0gdG90YWxfdW51c2VkICsgbFszXQorICAgICAgICB0b3RhbF90aGlzX2ZpbGUgPSB0b3RhbF90aGlzX2ZpbGUgKyBsWzNdCisgICAgICAgIGZvciB0cmFjZSBpbiBsWzJdOgorICAgICAgICAgICAgcHJpbnQgIiAgICAgICByZWZlcmVuY2VkIGZyb20gJXMiICUgdHJhY2UKKworICAgIGZvciBmcyBpbiBmaWxlX3N1bW1hcmllczoKKyAgICAgICAgcHJpbnQgZnMKKyAgICBwcmludCAiJXMgdG90YWwgbWF5IGJlIHVudXNlZCIgJSBzaXplQXNTdHJpbmcodG90YWxfdW51c2VkKQorCitkZWYgbWFpbigpOgorCisgICAgIyMgMDAwMWFhNDQgPF9kYnVzX21lc3NhZ2VfZ2V0X25ldHdvcmtfZGF0YT46CisgICAgc3ltX3JlID0gcmUuY29tcGlsZSAoJyhbMC05YS1mXSspIDwoW14+XSspPjonKQorICAgICMjIDFhYTQ5OiAgICAgICBlOCAwMCAwMCAwMCAwMCAgICAgICAgICBjYWxsICAgMWFhNGUgPF9kYnVzX21lc3NhZ2VfZ2V0X25ldHdvcmtfZGF0YSsweGE+CisgICAgcmVmX3JlID0gcmUuY29tcGlsZSAoJyA8KFtePl0rKT4gKiQnKQorICAgICMjIC9ob21lL2hwL2RidXMtY3ZzL2RidXMvZGJ1cy9kYnVzLW1lc3NhZ2UuYzoxMzkKKyAgICBmaWxlX3JlID0gcmUuY29tcGlsZSAoJ14oXC9bXjpdLiopOlswLTldKyQnKQorICAgICMjIF9kYnVzX21lc3NhZ2VfZ2V0X25ldHdvcmtfZGF0YSsweGEKKyAgICBmdW5jbmFtZV9yZSA9IHJlLmNvbXBpbGUgKCcoW14rXSspXCtbMC05YS1meF0rJykKKyAgICAjIyAwMDAwNTQxMCBUIGRidXNfYWRkcmVzc19lbnRyaWVzX2ZyZWUKKyAgICBkeW5zeW1fcmUgPSByZS5jb21waWxlICgnVCAoW14gXG5dKykkJykKKyAgICAKKyAgICBmaWxlbmFtZSA9IHN5cy5hcmd2WzFdCisKKyAgICBjb21tYW5kID0gIiIiCisgICAgb2JqZHVtcCAtRCAtLWRlbWFuZ2xlIC1sICVzCisgICAgIiIiICUgZmlsZW5hbWUKKworICAgIGNvbW1hbmQgPSBzdHJpbmcuc3RyaXAgKGNvbW1hbmQpCisKKyAgICBwcmludCAiUnVubmluZzogJXMiICUgY29tbWFuZAorICAgIAorICAgIGYgPSBvcy5wb3Blbihjb21tYW5kKSAgICAKKworICAgICMjIGZpcnN0IHdlIGZpbmQgd2hpY2ggZnVuY3Rpb25zIHJlZmVyZW5jZSB3aGljaCBvdGhlciBmdW5jdGlvbnMKKyAgICBjdXJyZW50X3N5bSA9IE5vbmUKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgYWRkciA9IE5vbmUKKyAgICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgdGFyZ2V0ID0gTm9uZQorICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICAKKyAgICAgICAgbWF0Y2ggPSBzeW1fcmUubWF0Y2gobCkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBhZGRyID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIG5hbWUgPSBtYXRjaC5ncm91cCgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWF0Y2ggPSByZWZfcmUuc2VhcmNoKGwpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGZpbGVfcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA9IG1hdGNoLmdyb3VwKDEpCisKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgICMjIDAgc3ltbmFtZSwgMSBhZGRyZXNzLCAyIHJlZmVyZW5jZXMsIDMgZmlsZW5hbWUsIDQgcmVhY2hlZCwgNSByZWZlcmVuY2VkLWJ5IDYgYmFja2xpbmtlZCA3IGFwcHJveCBzaXplCisgICAgICAgICAgICBpdGVtID0gW25hbWUsIGFkZHIsIFtdLCBOb25lLCAwLCBbXSwgMCwgMF0KKyAgICAgICAgICAgIGlmIHN5bWJvbHMuaGFzX2tleShuYW1lKToKKyAgICAgICAgICAgICAgICBzeW1ib2xzW25hbWVdLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeW1ib2xzW25hbWVdID0gW2l0ZW1dCisKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfc3ltOgorICAgICAgICAgICAgICAgIHByZXZfYWRkciA9IGxvbmcoY3VycmVudF9zeW1bMV0sIDE2KQorICAgICAgICAgICAgICAgIG91cl9hZGRyID0gbG9uZyhpdGVtWzFdLCAxNikKKyAgICAgICAgICAgICAgICBpdGVtWzddID0gb3VyX2FkZHIgLSBwcmV2X2FkZHIKKyAgICAgICAgICAgICAgICBpZiBpdGVtWzddIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvbXB1dGVkIG5lZ2F0aXZlIHNpemUgJWQgZm9yICVzIiAlIChpdGVtWzddLCBpdGVtWzBdKQorICAgICAgICAgICAgICAgICAgICBpdGVtWzddID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY3VycmVudF9zeW0gPSBpdGVtCisgICAgICAgICAgICAKKyAgICAgICAgZWxpZiB0YXJnZXQgYW5kIGN1cnJlbnRfc3ltOgorICAgICAgICAgICAgbWF0Y2ggPSBmdW5jbmFtZV9yZS5tYXRjaCh0YXJnZXQpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAjIyBkdW1wIHRoZSAiK2FkZHJlc3MiCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIGlmIHRhcmdldCA9PSBjdXJyZW50X3N5bVswXToKKyAgICAgICAgICAgICAgICBwYXNzICMjIHNraXAgc2VsZi1yZWZlcmVuY2VzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfc3ltWzJdLmFwcGVuZCAodGFyZ2V0KQorCisgICAgICAgIGVsaWYgZmlsZSBhbmQgY3VycmVudF9zeW06CisgICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoJy91c3IvaW5jbHVkZScpOgorICAgICAgICAgICAgICAgICMjIGlubGluZWQgbGliYyB0aGluZ3kKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIGN1cnJlbnRfc3ltWzBdLnN0YXJ0c3dpdGgoJy5kZWJ1ZycpOgorICAgICAgICAgICAgICAgICMjIGRlYnVnIGluZm8KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIGN1cnJlbnRfc3ltWzNdIGFuZCBjdXJyZW50X3N5bVszXSAhPSBmaWxlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiAoIiVzIGluIGJvdGggJXMgYW5kICVzIiAlIChjdXJyZW50X3N5bVswXSwgY3VycmVudF9zeW1bM10sIGZpbGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjdXJyZW50X3N5bVszXSA9IGZpbGUKKworICAgICMjIG5vdyB3ZSBuZWVkIHRvIGZpbmQgdGhlIHJvb3RzIChleHBvcnRlZCBzeW1ib2xzKQorICAgIGNvbW1hbmQgPSAibm0gLUQgJXMiICUgZmlsZW5hbWUKKyAgICBwcmludCAiUnVubmluZzogJXMiICUgY29tbWFuZAorICAgIGYgPSBvcy5wb3Blbihjb21tYW5kKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMgKCkKKyAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgbWF0Y2ggPSBkeW5zeW1fcmUuc2VhcmNoKGwpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgbmFtZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICBpZiByb290cy5oYXNfa2V5KG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic3ltYm9sICVzIGV4cG9ydGVkIHR3aWNlPyIgJSBuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb290c1tuYW1lXSA9IDEKKworICAgIHByaW50ICIlZCBzeW1ib2xzIGV4cG9ydGVkIGZyb20gdGhpcyBvYmplY3QiICUgbGVuKHJvb3RzKQorCisgICAgIyMgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIG9ubHkgaW5kaXJlY3RseSwgc28gd2UgZG9uJ3QKKyAgICAjIyBub3RpY2UgdGhleSBhcmUgdXNlZC4gTWFudWFsbHkgYWRkIHRoZW0gYXMgcm9vdHMuLi4KKyAgICB2dGFibGVfcm9vdHMgPSBbJ3VuaXhfZmluYWxpemUnLAorICAgICAgICAgICAgICAgICAgICAndW5peF9oYW5kbGVfd2F0Y2gnLAorICAgICAgICAgICAgICAgICAgICAndW5peF9kaXNjb25uZWN0JywKKyAgICAgICAgICAgICAgICAgICAgJ3VuaXhfY29ubmVjdGlvbl9zZXQnLAorICAgICAgICAgICAgICAgICAgICAndW5peF9kb19pdGVyYXRpb24nLAorICAgICAgICAgICAgICAgICAgICAndW5peF9saXZlX21lc3NhZ2VzX2NoYW5nZWQnLAorICAgICAgICAgICAgICAgICAgICAndW5peF9nZXRfdW5peF9mZCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfY2xpZW50X2RhdGFfY29va2llX3NoYTFfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfY2xpZW50X2RhdGFfZXh0ZXJuYWxfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfc2VydmVyX2RhdGFfY29va2llX3NoYTFfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfc2VydmVyX2RhdGFfZXh0ZXJuYWxfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfY2xpZW50X2luaXRpYWxfcmVzcG9uc2VfY29va2llX3NoYTFfbWVjaCcsICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfY2xpZW50X2luaXRpYWxfcmVzcG9uc2VfZXh0ZXJuYWxfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfY2xpZW50X3NodXRkb3duX2Nvb2tpZV9zaGExX21lY2gnLAorICAgICAgICAgICAgICAgICAgICAnaGFuZGxlX2NsaWVudF9zaHV0ZG93bl9leHRlcm5hbF9tZWNoJywKKyAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZV9zZXJ2ZXJfc2h1dGRvd25fY29va2llX3NoYTFfbWVjaCcsCisgICAgICAgICAgICAgICAgICAgICdoYW5kbGVfc2VydmVyX3NodXRkb3duX2V4dGVybmFsX21lY2gnCisgICAgICAgICAgICAgICAgICAgIF0KKworICAgIGZvciB2ciBpbiB2dGFibGVfcm9vdHM6CisgICAgICAgIGlmIHJvb3RzLmhhc19rZXkodnIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBpcyBhbHJlYWR5IGEgcm9vdCIgJSB2cikKKyAgICAgICAgcm9vdHNbdnJdID0gMQorCisgICAgZm9yIGsgaW4gcm9vdHMua2V5cygpOgorICAgICAgICBtYXJrU3ltYm9sKCJyb290IiwgaykKKworICAgIGZvciAoaywgdikgaW4gc3ltYm9scy5pdGVtcygpOgorICAgICAgICBjcmVhdGVCYWNrbGlua3MoaywgdikKKworICAgIHByaW50ICIiIgorCitUaGUgc3ltYm9scyBtZW50aW9uZWQgYmVsb3cgZG9uJ3QgYXBwZWFyIHRvIGJlIHJlYWNoYWJsZSBzdGFydGluZyBmcm9tCit0aGUgZHluYW1pYyBleHBvcnRzIG9mIHRoZSBsaWJyYXJ5LiBIb3dldmVyLCB0aGlzIHByb2dyYW0gaXMgcHJldHR5CitkdW1iOyBhIGxpbWl0YXRpb24gdGhhdCBjcmVhdGVzIGZhbHNlIHBvc2l0aXZlcyBpcyB0aGF0IGl0IGNhbiBvbmx5Cit0cmFjZSAncmVhY2hhYmxlJyB0aHJvdWdoIGhhcmRjb2RlZCBmdW5jdGlvbiBjYWxscywgaWYgYSBmdW5jdGlvbiBpcworY2FsbGVkIG9ubHkgdGhyb3VnaCBhIHZ0YWJsZSwgaXQgd29uJ3QgYmUgbWFya2VkIHJlYWNoYWJsZSAoYW5kCituZWl0aGVyIHdpbGwgaXRzIGNoaWxkcmVuIGluIHRoZSBjYWxsIGdyYXBoKS4KKworQWxzbywgdGhlIHNpemVzIG1lbnRpb25lZCBhcmUgbW9yZSBvciBsZXNzIGNvbXBsZXRlbHkgYm9ndXMuCisKKyIiIgorICAgIAorICAgIHByaW50ICJUaGUgZm9sbG93aW5nIGFyZSBoYXJkY29kZWQgaW4gYXMgdnRhYmxlIHJvb3RzOiAlcyIgJSB2dGFibGVfcm9vdHMKKyAgICAKKyAgICBwcmludExvc3QoKQorICAgICAgICAKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90b29scy8uZ2l0aWdub3JlIGIvdG9vbHMvLmdpdGlnbm9yZQppbmRleCAxZTBkOTg3Li4yMzRjZWY5IDEwMDY0NAotLS0gYS90b29scy8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzLy5naXRpZ25vcmUKQEAgLTksNyArOSw2IEBACiBkYnVzLWNsZWFudXAtc29ja2V0cwogZGJ1cy1sYXVuY2gKIGRidXMtdXVpZGdlbgotZGJ1cy1ydW4tc2Vzc2lvbgogKi5iYgogKi5iYmcKICouZ2NvdgpAQCAtMTksNCArMTgsMyBAQAogcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLmNvbmYKIHByaW50LWludHJvc3BlY3QKIGRidXMtYnVzLWludHJvc3BlY3QueG1sCi1kYnVzLXRlc3QtdG9vbApkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuYW0gYi90b29scy9NYWtlZmlsZS5hbQppbmRleCBjZmNlNDM0Li41NmEwYjdmIDEwMDY0NAotLS0gYS90b29scy9NYWtlZmlsZS5hbQorKysgYi90b29scy9NYWtlZmlsZS5hbQpAQCAtNiwxMCArNiw2IEBACiAJLUREQlVTX01BQ0hJTkVfVVVJRF9GSUxFPVwiIiQobG9jYWxzdGF0ZWRpcikvbGliL2RidXMvbWFjaGluZS1pZCJcIiBcCiAJJChOVUxMKQogCi1BTV9DRkxBR1MgPSBcCi0JJChDT0RFX0NPVkVSQUdFX0NGTEFHUykgXAotCSQoTlVMTCkKLQogIyBpZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBpbXByb3ZlIGJhY2t0cmFjZXMKIEFNX0xERkxBR1MgPSBAUl9EWU5BTUlDX0xERkxBR0AKIApAQCAtMTE0LDIyICsxMTAsOSBAQAogCSQoTlVMTCkKIGRidXNfdXBkYXRlX2FjdGl2YXRpb25fZW52aXJvbm1lbnRfTERBREQgPSAkKHRvcF9idWlsZGRpcikvZGJ1cy9saWJkYnVzLTEubGEKIAotaWYgREJVU19XSU4KLVNVRkZJWEVTID0gLnJjCi0KLS5yYy5vOgotCSQoUkMpICQ8IC1vICRACi0KLW5vZGlzdF9kYnVzX3VwZGF0ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50X1NPVVJDRVMgPSBkaXNhYmxlLXVhYy5yYwotCi1kaXNhYmxlLXVhYy5yYzogV2luMzIuTWFuaWZlc3QKLQllY2hvICcxIDI0ICIkPCInID4gJEAKLWVuZGlmCi0KLUVYVFJBX0RJU1QgPSBydW4td2l0aC10bXAtc2Vzc2lvbi1idXMuc2ggc3RydG9sbC5jIHN0cnRvdWxsLmMgV2luMzIuTWFuaWZlc3QKK0VYVFJBX0RJU1QgPSBydW4td2l0aC10bXAtc2Vzc2lvbi1idXMuc2ggc3RydG9sbC5jIHN0cnRvdWxsLmMKIENMRUFORklMRVMgPSAJCQkJXAotCXJ1bi13aXRoLXRtcC1zZXNzaW9uLWJ1cy5jb25mIFwKLQkkKG5vZGlzdF9kYnVzX3VwZGF0ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50X1NPVVJDRVMpCisJcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLmNvbmYKIAogIyBjcmVhdGUgdGhlIC92YXIvbGliL2RidXMgZGlyZWN0b3J5IGZvciBkYnVzLXV1aWRnZW4KIGluc3RhbGwtZGF0YS1sb2NhbDoKZGlmZiAtLWdpdCBhL3Rvb2xzL1dpbjMyLk1hbmlmZXN0IGIvdG9vbHMvV2luMzIuTWFuaWZlc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MjZkMDYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvV2luMzIuTWFuaWZlc3QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Ci08YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCI+Ci0gPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPgotICA8c2VjdXJpdHk+Ci0gICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4KLSAgICA8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIi8+Ci0gICA8L3JlcXVlc3RlZFByaXZpbGVnZXM+Ci0gIDwvc2VjdXJpdHk+Ci0gPC90cnVzdEluZm8+Ci08L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvdG9vbHMvY2ktRG9ja2VyZmlsZS5pbiBiL3Rvb2xzL2NpLURvY2tlcmZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOThiMGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvY2ktRG9ja2VyZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLUZST00gQGNpX2RvY2tlckAKLUVOViBjb250YWluZXIgZG9ja2VyCi0KLUFERCB0b29scy9jaS1pbnN0YWxsLnNoIC9jaS1pbnN0YWxsLnNoCi1SVU4gY2lfc3VpdGU9IkBjaV9zdWl0ZUAiIGNpX2Rpc3Rybz0iQGNpX2Rpc3Ryb0AiIGNpX2luX2RvY2tlcj15ZXMgL2NpLWluc3RhbGwuc2gKLQotQUREIC4gL2hvbWUvdXNlci9jaQotUlVOIGNob3duIC1SIHVzZXI6dXNlciAvaG9tZS91c2VyL2NpCi1XT1JLRElSIC9ob21lL3VzZXIvY2kKLVVTRVIgdXNlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvY2ktYnVpbGQuc2ggYi90b29scy9jaS1idWlsZC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2IxOWY0YS4uMDAwMDAwMAotLS0gYS90b29scy9jaS1idWlsZC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0jIS9iaW4vYmFzaAotCi0jIENvcHlyaWdodCDCqSAyMDE1LTIwMTYgQ29sbGFib3JhIEx0ZC4KLSMKLSMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLSMgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKLSMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKLSMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKLSMgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSMgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLSMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0jCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0jIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIwotIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSMgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0jIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0jIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0jIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0jIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSMgU09GVFdBUkUuCi0KLXNldCAtZXVvIHBpcGVmYWlsCi1zZXQgLXgKLQotTlVMTD0KLQotIyBjaV9idWlsZHN5czoKLSMgQnVpbGQgc3lzdGVtIHVuZGVyIHRlc3Q6IGF1dG90b29scyBvciBjbWFrZQotOiAiJHtjaV9idWlsZHN5czo9YXV0b3Rvb2xzfSIKLQotIyBjaV9kaXN0cm86Ci0jIE9TIGRpc3RyaWJ1dGlvbiBpbiB3aGljaCB3ZSBhcmUgdGVzdGluZwotIyBUeXBpY2FsIHZhbHVlczogdWJ1bnR1LCBkZWJpYW47IG1heWJlIGZlZG9yYSBpbiBmdXR1cmUKLTogIiR7Y2lfZGlzdHJvOj11YnVudHV9IgotCi0jIGNpX2RvY2tlcjoKLSMgSWYgbm9uLWVtcHR5LCB0aGlzIGlzIHRoZSBuYW1lIG9mIGEgRG9ja2VyIGltYWdlLiBjaS1pbnN0YWxsLnNoIHdpbGwKLSMgZmV0Y2ggaXQgd2l0aCAiZG9ja2VyIHB1bGwiIGFuZCB1c2UgaXQgYXMgYSBiYXNlIGZvciBhIG5ldyBEb2NrZXIgaW1hZ2UKLSMgbmFtZWQgImNpLWltYWdlIiBpbiB3aGljaCB3ZSB3aWxsIGRvIG91ciB0ZXN0aW5nLgotIwotIyBJZiBlbXB0eSwgd2UgdGVzdCBvbiAiYmFyZSBtZXRhbCIuCi0jIFR5cGljYWwgdmFsdWVzOiB1YnVudHU6eGVuaWFsLCBkZWJpYW46amVzc2llLXNsaW0KLTogIiR7Y2lfZG9ja2VyOj19IgotCi0jIGNpX2hvc3Q6Ci0jIFNlZSBjaS1pbnN0YWxsLnNoCi06ICIke2NpX2hvc3Q6PW5hdGl2ZX0iCi0KLSMgY2lfcGFyYWxsZWw6Ci0jIEEgbnVtYmVyIG9mIHBhcmFsbGVsIGpvYnMsIHBhc3NlZCB0byBtYWtlIC1qCi06ICIke2NpX3BhcmFsbGVsOj0xfSIKLQotIyBjaV9zdWRvOgotIyBJZiB5ZXMsIGFzc3VtZSB3ZSBjYW4gZ2V0IHJvb3QgdXNpbmcgc3VkbzsgaWYgbm8sIG9ubHkgdXNlIGN1cnJlbnQgdXNlcgotOiAiJHtjaV9zdWRvOj1ub30iCi0KLSMgY2lfc3VpdGU6Ci0jIE9TIHN1aXRlIChyZWxlYXNlLCBicmFuY2gpIGluIHdoaWNoIHdlIGFyZSB0ZXN0aW5nLgotIyBUeXBpY2FsIHZhbHVlcyBmb3IgY2lfZGlzdHJvPWRlYmlhbjogc2lkLCBqZXNzaWUKLSMgVHlwaWNhbCB2YWx1ZXMgZm9yIGNpX2Rpc3Rybz1mZWRvcmEgbWlnaHQgYmUgMjUsIHJhd2hpZGUKLTogIiR7Y2lfc3VpdGU6PXhlbmlhbH0iCi0KLSMgY2lfdGVzdDoKLSMgSWYgeWVzLCBydW4gdGVzdHM7IGlmIG5vLCBqdXN0IGJ1aWxkCi06ICIke2NpX3Rlc3Q6PXllc30iCi0KLSMgY2lfdGVzdF9mYXRhbDoKLSMgSWYgeWVzLCB0ZXN0IGZhaWx1cmVzIGJyZWFrIHRoZSBidWlsZDsgaWYgbm8sIHRoZXkgYXJlIHJlcG9ydGVkIGJ1dCBpZ25vcmVkCi06ICIke2NpX3Rlc3RfZmF0YWw6PXllc30iCi0KLSMgY2lfdmFyaWFudDoKLSMgT25lIG9mIGRlYnVnLCByZWR1Y2VkLCBsZWdhY3ksIHByb2R1Y3Rpb24KLTogIiR7Y2lfdmFyaWFudDo9cHJvZHVjdGlvbn0iCi0KLWlmIFsgLW4gIiRjaV9kb2NrZXIiIF07IHRoZW4KLSAgICBleGVjIGRvY2tlciBydW4gXAotICAgICAgICAtLWVudj1jaV9idWlsZHN5cz0iJHtjaV9idWlsZHN5c30iIFwKLSAgICAgICAgLS1lbnY9Y2lfZG9ja2VyPSIiIFwKLSAgICAgICAgLS1lbnY9Y2lfaG9zdD0iJHtjaV9ob3N0fSIgXAotICAgICAgICAtLWVudj1jaV9wYXJhbGxlbD0iJHtjaV9wYXJhbGxlbH0iIFwKLSAgICAgICAgLS1lbnY9Y2lfc3Vkbz15ZXMgXAotICAgICAgICAtLWVudj1jaV90ZXN0PSIke2NpX3Rlc3R9IiBcCi0gICAgICAgIC0tZW52PWNpX3Rlc3RfZmF0YWw9IiR7Y2lfdGVzdF9mYXRhbH0iIFwKLSAgICAgICAgLS1lbnY9Y2lfdmFyaWFudD0iJHtjaV92YXJpYW50fSIgXAotICAgICAgICAtLXByaXZpbGVnZWQgXAotICAgICAgICBjaS1pbWFnZSBcCi0gICAgICAgIHRvb2xzL2NpLWJ1aWxkLnNoCi1maQotCi1tYXliZV9mYWlsX3Rlc3RzICgpIHsKLSAgICBpZiBbICIkY2lfdGVzdF9mYXRhbCIgPSB5ZXMgXTsgdGhlbgotICAgICAgICBleGl0IDEKLSAgICBmaQotfQotCi1OT0NPTkZJR1VSRT0xIC4vYXV0b2dlbi5zaAotCi1zcmNkaXI9IiQocHdkKSIKLW1rZGlyIGNpLWJ1aWxkLSR7Y2lfdmFyaWFudH0tJHtjaV9ob3N0fQotY2QgY2ktYnVpbGQtJHtjaV92YXJpYW50fS0ke2NpX2hvc3R9Ci0KLW1ha2U9Im1ha2UgLWoke2NpX3BhcmFsbGVsfSBWPTEgVkVSQk9TRT0xIgotCi1jYXNlICIkY2lfaG9zdCIgaW4KLSAgICAoKi13NjQtbWluZ3czMikKLSAgICAgICAgbWlycm9yPWh0dHA6Ly9yZXBvLm1zeXMyLm9yZy9taW5ndy8ke2NpX2hvc3QlJS0qfQotICAgICAgICBpZiBbICIke2NpX2hvc3QlJS0qfSIgPSBpNjg2IF07IHRoZW4KLSAgICAgICAgICAgIG1pbmd3PSIkKHB3ZCkvbWluZ3czMiIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWluZ3c9IiQocHdkKS9taW5ndzY0IgotICAgICAgICBmaQotICAgICAgICBpbnN0YWxsIC1kICIke21pbmd3fSIKLSAgICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSPSIke21pbmd3fS9saWIvcGtnY29uZmlnIgotICAgICAgICBleHBvcnQgUEtHX0NPTkZJR19QQVRIPQotICAgICAgICBleHBvcnQgUEtHX0NPTkZJRz0icGtnLWNvbmZpZyAtLWRlZmluZS12YXJpYWJsZT1wcmVmaXg9JHttaW5nd30iCi0gICAgICAgIHVuc2V0IENDCi0gICAgICAgIHVuc2V0IENYWAotICAgICAgICBmb3IgcGtnIGluIFwKLSAgICAgICAgICAgIGV4cGF0LTIuMS4wLTYgXAotICAgICAgICAgICAgZ2NjLWxpYnMtNS4yLjAtNCBcCi0gICAgICAgICAgICBnZXR0ZXh0LTAuMTkuNi0xIFwKLSAgICAgICAgICAgIGdsaWIyLTIuNDYuMS0xIFwKLSAgICAgICAgICAgIGxpYmZmaS0zLjIuMS0zIFwKLSAgICAgICAgICAgIHpsaWItMS4yLjgtOSBcCi0gICAgICAgICAgICA7IGRvCi0gICAgICAgICAgICB3Z2V0ICR7bWlycm9yfS9taW5ndy13NjQtJHtjaV9ob3N0JSUtKn0tJHtwa2d9LWFueS5wa2cudGFyLnh6Ci0gICAgICAgICAgICB0YXIgLXh2ZiBtaW5ndy13NjQtJHtjaV9ob3N0JSUtKn0tJHtwa2d9LWFueS5wa2cudGFyLnh6Ci0gICAgICAgIGRvbmUKLSAgICAgICAgZXhwb3J0IFRNUERJUj0vdG1wCi0gICAgICAgIDs7Ci1lc2FjCi0KLWNhc2UgIiRjaV9idWlsZHN5cyIgaW4KLSAgICAoYXV0b3Rvb2xzKQotICAgICAgICBjYXNlICIkY2lfdmFyaWFudCIgaW4KLSAgICAgICAgICAgIChkZWJ1ZykKLSAgICAgICAgICAgICAgICAjIEZ1bGwgZGV2ZWxvcGVyL2RlYnVnIGJ1aWxkLgotICAgICAgICAgICAgICAgIHNldCBfICIkQCIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtLWVuYWJsZS1kZXZlbG9wZXIgLS1lbmFibGUtdGVzdHMKLSAgICAgICAgICAgICAgICAjIEVuYWJsZSBvcHRpb25hbCBmZWF0dXJlcyB0aGF0IGFyZSBvZmYgYnkgZGVmYXVsdAotICAgICAgICAgICAgICAgIGNhc2UgIiRjaV9ob3N0IiBpbgotICAgICAgICAgICAgICAgICAgICAqLXc2NC1taW5ndzMyKQotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCAiJEAiIC0tZW5hYmxlLXVzZXItc2Vzc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAjIFRoZSB0ZXN0IGNvdmVyYWdlIGZvciBPT00tc2FmZXR5IGlzIHRvbwotICAgICAgICAgICAgICAgICMgdmVyYm9zZSB0byBiZSB1c2VmdWwgb24gdHJhdmlzLWNpLgotICAgICAgICAgICAgICAgIGV4cG9ydCBEQlVTX1RFU1RfTUFMTE9DX0ZBSUxVUkVTPTAKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAocmVkdWNlZCkKLSAgICAgICAgICAgICAgICAjIEEgc21hbGxlciBjb25maWd1cmF0aW9uIHRoYW4gbm9ybWFsLCB3aXRoCi0gICAgICAgICAgICAgICAgIyB2YXJpb3VzIGZlYXR1cmVzIGRpc2FibGVkOyB0aGlzIGVtdWxhdGVzCi0gICAgICAgICAgICAgICAgIyBhbiBvbGRlciBzeXN0ZW0gb3Igb25lIHRoYXQgZG9lcyBub3QgaGF2ZQotICAgICAgICAgICAgICAgICMgYWxsIHRoZSBvcHRpb25hbCBsaWJyYXJpZXMuCi0gICAgICAgICAgICAgICAgc2V0IF8gIiRAIgotICAgICAgICAgICAgICAgICMgTm8gTFNNcyAodGhlIHByb2R1Y3Rpb24gYnVpbGQgaGFzIGJvdGgpCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLXNlbGludXggLS1kaXNhYmxlLWFwcGFybW9yCi0gICAgICAgICAgICAgICAgIyBObyBpbm90aWZ5ICh3ZSB3aWxsIHVzZSBkbm90aWZ5KQotICAgICAgICAgICAgICAgIHNldCAiJEAiIC0tZGlzYWJsZS1pbm90aWZ5Ci0gICAgICAgICAgICAgICAgIyBObyBlcG9sbCBvciBrcXVldWUgKHdlIHdpbGwgdXNlIHBvbGwpCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLWVwb2xsIC0tZGlzYWJsZS1rcXVldWUKLSAgICAgICAgICAgICAgICAjIE5vIHNwZWNpYWwgaW5pdCBzeXN0ZW0gc3VwcG9ydAotICAgICAgICAgICAgICAgIHNldCAiJEAiIC0tZGlzYWJsZS1sYXVuY2hkIC0tZGlzYWJsZS1zeXN0ZW1kCi0gICAgICAgICAgICAgICAgIyBObyBsaWJhdWRpdCBvciB2YWxncmluZAotICAgICAgICAgICAgICAgIHNldCAiJEAiIC0tZGlzYWJsZS1saWJhdWRpdCAtLXdpdGhvdXQtdmFsZ3JpbmQKLSAgICAgICAgICAgICAgICAjIERpc2FibGUgb3B0aW9uYWwgZmVhdHVyZXMsIHNvbWUgb2Ygd2hpY2ggYXJlIG9uIGJ5Ci0gICAgICAgICAgICAgICAgIyBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLXN0YXRzCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLXVzZXItc2Vzc2lvbgotICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgKGxlZ2FjeSkKLSAgICAgICAgICAgICAgICAjIEFuIHVucmVhbGlzdGljYWxseSBjdXQtZG93biBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICMgdG8gY2hlY2sgdGhhdCBpdCBjb21waWxlcyBhbmQgd29ya3MuCi0gICAgICAgICAgICAgICAgc2V0IF8gIiRAIgotICAgICAgICAgICAgICAgICMgRGlzYWJsZSBuYXRpdmUgYXRvbWljIG9wZXJhdGlvbnMgb24gVW5peAotICAgICAgICAgICAgICAgICMgKGFybXY0LCBhcyB1c2VkIGFzIHRoZSBiYXNlbGluZSBmb3IgRGViaWFuCi0gICAgICAgICAgICAgICAgIyBhcm1lbCwgaXMgb25lIGFyY2hpdGVjdHVyZSB0aGF0IHJlYWxseQotICAgICAgICAgICAgICAgICMgZG9lc24ndCBoYXZlIHRoZW0pCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgZGJ1c19jdl9zeW5jX3N1Yl9hbmRfZmV0Y2g9bm8KLSAgICAgICAgICAgICAgICAjIE5vIGVwb2xsLCBrcXVldWUgb3IgcG9sbCAod2Ugd2lsbCBmYWxsIGJhY2sKLSAgICAgICAgICAgICAgICAjIHRvIHNlbGVjdCwgZXZlbiBvbiBVbml4IHdoZXJlIHdlIHdvdWxkCi0gICAgICAgICAgICAgICAgIyB1c3VhbGx5IGF0IGxlYXN0IGhhdmUgcG9sbCkKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtLWRpc2FibGUtZXBvbGwgLS1kaXNhYmxlLWtxdWV1ZQotICAgICAgICAgICAgICAgIHNldCAiJEAiIENQUEZMQUdTPS1EQlJPS0VOX1BPTEw9MQotICAgICAgICAgICAgICAgICMgRW5hYmxlIFNFTGludXggYW5kIEFwcEFybW9yIGJ1dCBub3QKLSAgICAgICAgICAgICAgICAjIGxpYmF1ZGl0IC0gdGhhdCBjb25maWd1cmF0aW9uIGhhcyBzb21ldGltZXMKLSAgICAgICAgICAgICAgICAjIGZhaWxlZAotICAgICAgICAgICAgICAgIHNldCAiJEAiIC0tZW5hYmxlLXNlbGludXggLS1lbmFibGUtYXBwYXJtb3IKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtLWRpc2FibGUtbGliYXVkaXQgLS13aXRob3V0LXZhbGdyaW5kCi0gICAgICAgICAgICAgICAgIyBObyBkaXJlY3RvcnkgbW9uaXRvcmluZyBhdCBhbGwKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtLWRpc2FibGUtaW5vdGlmeSAtLWRpc2FibGUtZG5vdGlmeQotICAgICAgICAgICAgICAgICMgTm8gc3BlY2lhbCBpbml0IHN5c3RlbSBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLWxhdW5jaGQgLS1kaXNhYmxlLXN5c3RlbWQKLSAgICAgICAgICAgICAgICAjIE5vIFgxMSBhdXRvbGF1bmNoaW5nCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1kaXNhYmxlLXgxMS1hdXRvbGF1bmNoCi0gICAgICAgICAgICAgICAgIyBSZS1lbmFibGUgdGhlIGRlcHJlY2F0ZWQgcGFtX2NvbnNvbGUgc3VwcG9ydCB0byBtYWtlCi0gICAgICAgICAgICAgICAgIyBzdXJlIGl0IHN0aWxsIGJ1aWxkcwotICAgICAgICAgICAgICAgIHNldCAiJEAiIC0td2l0aC1jb25zb2xlLWF1dGgtZGlyPS92YXIvcnVuL2NvbnNvbGUKLSAgICAgICAgICAgICAgICAjIExlYXZlIHN0YXRzLCB1c2VyLXNlc3Npb24sIGV0Yy4gYXQgZGVmYXVsdCBzZXR0aW5ncwotICAgICAgICAgICAgICAgICMgdG8gY2hlY2sgdGhhdCB0aGUgZGVmYXVsdHMgY2FuIGNvbXBpbGUgb24gYW4gb2xkIE9TCi0gICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAoKikKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAiJGNpX2hvc3QiIGluCi0gICAgICAgICAgICAoKi13NjQtbWluZ3czMikKLSAgICAgICAgICAgICAgICBzZXQgXyAiJEAiCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLS1idWlsZD0iJChidWlsZC1hdXgvY29uZmlnLmd1ZXNzKSIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtLWhvc3Q9IiR7Y2lfaG9zdH0iCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgQ0ZMQUdTPS1zdGF0aWMtbGliZ2NjCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgQ1hYRkxBR1M9LXN0YXRpYy1saWJnY2MKLSAgICAgICAgICAgICAgICAjIGRvbid0IHJ1biB0ZXN0cyB5ZXQsIFdpbmUgbmVlZHMgWHZmYiBhbmQKLSAgICAgICAgICAgICAgICAjIG1vcmUgbXN5czIgbGlicmFyaWVzCi0gICAgICAgICAgICAgICAgY2lfdGVzdD1ubwotICAgICAgICAgICAgICAgICMgZG9uJ3QgIm1ha2UgaW5zdGFsbCIgc3lzdGVtLXdpZGUKLSAgICAgICAgICAgICAgICBjaV9zdWRvPW5vCi0gICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgLi4vY29uZmlndXJlIFwKLSAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCi0gICAgICAgICAgICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAotICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxhci10ZXN0cyBcCi0gICAgICAgICAgICAiJEAiCi0KLSAgICAgICAgJHttYWtlfQotICAgICAgICBbICIkY2lfdGVzdCIgPSBubyBdIHx8ICR7bWFrZX0gY2hlY2sgfHwgbWF5YmVfZmFpbF90ZXN0cwotICAgICAgICBjYXQgdGVzdC90ZXN0LXN1aXRlLmxvZyB8fCA6Ci0gICAgICAgIFsgIiRjaV90ZXN0IiA9IG5vIF0gfHwgJHttYWtlfSBkaXN0Y2hlY2sgfHwgbWF5YmVfZmFpbF90ZXN0cwotCi0gICAgICAgICR7bWFrZX0gaW5zdGFsbCBERVNURElSPSQocHdkKS9ERVNURElSCi0gICAgICAgICggY2QgREVTVERJUiAmJiBmaW5kIC4gLWxzICkKLQotICAgICAgICBjYXNlICIkY2lfc3VpdGUiIGluCi0gICAgICAgICAgICAoamVzc2llfHhlbmlhbHxzdHJldGNoKQotICAgICAgICAgICAgICAgICMgdGhlc2UgYXJlIHRvbyBvbGQgZm9yIG1haW50YWluZXItdXBsb2FkLWRvY3MKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAoKikKLSAgICAgICAgICAgICAgICAjIGFzc3VtZSBVYnVudHUgMTguMDQgJ2Jpb25pYycsIERlYmlhbiAxMCAnYnVzdGVyJyBvciBuZXdlcgotICAgICAgICAgICAgICAgICR7bWFrZX0gLUMgZG9jIGRidXMtZG9jcy50YXIueHoKLSAgICAgICAgICAgICAgICB0YXIgLUMgJChwd2QpL0RFU1RESVIgLXhmIGRvYy9kYnVzLWRvY3MudGFyLnh6Ci0gICAgICAgICAgICAgICAgKCBjZCBERVNURElSL2RidXMtZG9jcyAmJiBmaW5kIC4gLWxzICkKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgaWYgWyAiJGNpX3N1ZG8iID0geWVzIF0gJiYgWyAiJGNpX3Rlc3QiID0geWVzIF07IHRoZW4KLSAgICAgICAgICAgIHN1ZG8gJHttYWtlfSBpbnN0YWxsCi0gICAgICAgICAgICBzdWRvIGVudiBMRF9MSUJSQVJZX1BBVEg9L3Vzci9sb2NhbC9saWIgXAotICAgICAgICAgICAgICAgIC91c3IvbG9jYWwvYmluL2RidXMtdXVpZGdlbiAtLWVuc3VyZQotICAgICAgICAgICAgTERfTElCUkFSWV9QQVRIPS91c3IvbG9jYWwvbGliICR7bWFrZX0gaW5zdGFsbGNoZWNrIHx8IFwKLSAgICAgICAgICAgICAgICBtYXliZV9mYWlsX3Rlc3RzCi0gICAgICAgICAgICBjYXQgdGVzdC90ZXN0LXN1aXRlLmxvZyB8fCA6Ci0KLSAgICAgICAgICAgICMgcmUtcnVuIHRoZW0gd2l0aCBnbm9tZS1kZXNrdG9wLXRlc3RpbmcKLSAgICAgICAgICAgIGVudiBMRF9MSUJSQVJZX1BBVEg9L3Vzci9sb2NhbC9saWIgXAotICAgICAgICAgICAgZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciAtZCAvdXNyL2xvY2FsL3NoYXJlIGRidXMvIHx8IFwKLSAgICAgICAgICAgICAgICBtYXliZV9mYWlsX3Rlc3RzCi0KLSAgICAgICAgICAgICMgdGhlc2UgdGVzdHMgYmVuZWZpdCBmcm9tIGJlaW5nIHJlLXJ1biBhcyByb290LCBhbmQgb25lCi0gICAgICAgICAgICAjIHRlc3QgbmVlZHMgYSBmaW5pdGUgZmQgbGltaXQgdG8gYmUgdXNlZnVsCi0gICAgICAgICAgICBzdWRvIGVudiBMRF9MSUJSQVJZX1BBVEg9L3Vzci9sb2NhbC9saWIgXAotICAgICAgICAgICAgYmFzaCAtYyAndWxpbWl0IC1TIC1uIDEwMjQ7IHVsaW1pdCAtSCAtbiA0MDk2OyBleGVjICIkQCInIGJhc2ggXAotICAgICAgICAgICAgICAgIGdub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgLWQgL3Vzci9sb2NhbC9zaGFyZSBcCi0gICAgICAgICAgICAgICAgZGJ1cy90ZXN0LWRidXMtZGFlbW9uX3dpdGhfY29uZmlnLnRlc3QgXAotICAgICAgICAgICAgICAgIGRidXMvdGVzdC11aWQtcGVybWlzc2lvbnNfd2l0aF9jb25maWcudGVzdCB8fCBcCi0gICAgICAgICAgICAgICAgbWF5YmVfZmFpbF90ZXN0cwotICAgICAgICBmaQotICAgICAgICA7OwotCi0gICAgKGNtYWtlKQotICAgICAgICBjYXNlICIkY2lfaG9zdCIgaW4KLSAgICAgICAgICAgICgqLXc2NC1taW5ndzMyKQotICAgICAgICAgICAgICAgIHNldCBfICIkQCIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtRCBDTUFLRV9UT09MQ0hBSU5fRklMRT0iJHtzcmNkaXJ9L2NtYWtlLyR7Y2lfaG9zdH0uY21ha2UiCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLUQgQ01BS0VfUFJFRklYX1BBVEg9IiR7bWluZ3d9IgotICAgICAgICAgICAgICAgIHNldCAiJEAiIC1EIENNQUtFX0lOQ0xVREVfUEFUSD0iJHttaW5nd30vaW5jbHVkZSIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtRCBDTUFLRV9MSUJSQVJZX1BBVEg9IiR7bWluZ3d9L2xpYiIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtRCBFWFBBVF9MSUJSQVJZPSIke21pbmd3fS9saWIvbGliZXhwYXQuZGxsLmEiCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLUQgR0xJQjJfTElCUkFSSUVTPSIke21pbmd3fS9saWIvbGliZ2xpYi0yLjAuZGxsLmEiCi0gICAgICAgICAgICAgICAgc2V0ICIkQCIgLUQgR09CSkVDVF9MSUJSQVJJRVM9IiR7bWluZ3d9L2xpYi9saWJnb2JqZWN0LTIuMC5kbGwuYSIKLSAgICAgICAgICAgICAgICBzZXQgIiRAIiAtRCBHSU9fTElCUkFSSUVTPSIke21pbmd3fS9saWIvbGliZ2lvLTIuMC5kbGwuYSIKLSAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAgICMgZG9uJ3QgcnVuIHRlc3RzIHlldCwgV2luZSBuZWVkcyBYdmZiIGFuZCBtb3JlCi0gICAgICAgICAgICAgICAgIyBtc3lzMiBsaWJyYXJpZXMKLSAgICAgICAgICAgICAgICBjaV90ZXN0PW5vCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgIGNtYWtlICIkQCIgLi4vY21ha2UKLQotICAgICAgICAke21ha2V9Ci0gICAgICAgICMgVGhlIHRlc3QgY292ZXJhZ2UgZm9yIE9PTS1zYWZldHkgaXMgdG9vIHZlcmJvc2UgdG8gYmUgdXNlZnVsIG9uCi0gICAgICAgICMgdHJhdmlzLWNpLgotICAgICAgICBleHBvcnQgREJVU19URVNUX01BTExPQ19GQUlMVVJFUz0wCi0gICAgICAgIFsgIiRjaV90ZXN0IiA9IG5vIF0gfHwgY3Rlc3QgLVZWIHx8IG1heWJlX2ZhaWxfdGVzdHMKLSAgICAgICAgJHttYWtlfSBpbnN0YWxsIERFU1RESVI9JChwd2QpL0RFU1RESVIKLSAgICAgICAgKCBjZCBERVNURElSICYmIGZpbmQgLiAtbHMpCi0gICAgICAgIDs7Ci1lc2FjCi0KLSMgdmltOnNldCBzdz00IHN0cz00IGV0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvY2ktaW5zdGFsbC5zaCBiL3Rvb2xzL2NpLWluc3RhbGwuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFjMmUzYjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvY2ktaW5zdGFsbC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0jIS9iaW4vYmFzaAotCi0jIENvcHlyaWdodCDCqSAyMDE1LTIwMTYgQ29sbGFib3JhIEx0ZC4KLSMKLSMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KLSMgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKLSMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKLSMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKLSMgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKLSMgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLSMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0jCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0jIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIwotIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSMgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0jIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0jIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0jIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0jIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSMgU09GVFdBUkUuCi0KLXNldCAtZXVvIHBpcGVmYWlsCi1zZXQgLXgKLQotTlVMTD0KLQotIyBjaV9kaXN0cm86Ci0jIE9TIGRpc3RyaWJ1dGlvbiBpbiB3aGljaCB3ZSBhcmUgdGVzdGluZwotIyBUeXBpY2FsIHZhbHVlczogdWJ1bnR1LCBkZWJpYW47IG1heWJlIGZlZG9yYSBpbiBmdXR1cmUKLTogIiR7Y2lfZGlzdHJvOj11YnVudHV9IgotCi0jIGNpX2RvY2tlcjoKLSMgSWYgbm9uLWVtcHR5LCB0aGlzIGlzIHRoZSBuYW1lIG9mIGEgRG9ja2VyIGltYWdlLiBjaS1pbnN0YWxsLnNoIHdpbGwKLSMgZmV0Y2ggaXQgd2l0aCAiZG9ja2VyIHB1bGwiIGFuZCB1c2UgaXQgYXMgYSBiYXNlIGZvciBhIG5ldyBEb2NrZXIgaW1hZ2UKLSMgbmFtZWQgImNpLWltYWdlIiBpbiB3aGljaCB3ZSB3aWxsIGRvIG91ciB0ZXN0aW5nLgotOiAiJHtjaV9kb2NrZXI6PX0iCi0KLSMgY2lfaG9zdDoKLSMgRWl0aGVyICJuYXRpdmUiLCBvciBhbiBBdXRvY29uZiAtLWhvc3QgYXJndW1lbnQgdG8gY3Jvc3MtY29tcGlsZQotIyB0aGUgcGFja2FnZQotOiAiJHtjaV9ob3N0Oj1uYXRpdmV9IgotCi0jIGNpX2luX2RvY2tlcjoKLSMgVXNlZCBpbnRlcm5hbGx5IGJ5IGNpLWluc3RhbGwuc2guIElmIHllcywgd2UgYXJlIGluc2lkZSB0aGUgRG9ja2VyIGltYWdlCi0jIChjaV9kb2NrZXIgaXMgZW1wdHkgaW4gdGhpcyBjYXNlKS4KLTogIiR7Y2lfaW5fZG9ja2VyOj1ub30iCi0KLSMgY2lfc3VpdGU6Ci0jIE9TIHN1aXRlIChyZWxlYXNlLCBicmFuY2gpIGluIHdoaWNoIHdlIGFyZSB0ZXN0aW5nLgotIyBUeXBpY2FsIHZhbHVlcyBmb3IgY2lfZGlzdHJvPWRlYmlhbjogc2lkLCBqZXNzaWUKLSMgVHlwaWNhbCB2YWx1ZXMgZm9yIGNpX2Rpc3Rybz1mZWRvcmEgbWlnaHQgYmUgMjUsIHJhd2hpZGUKLTogIiR7Y2lfc3VpdGU6PXhlbmlhbH0iCi0KLWlmIFsgJChpZCAtdSkgPSAwIF07IHRoZW4KLSAgICBzdWRvPQotZWxzZQotICAgIHN1ZG89c3VkbwotZmkKLQotaWYgWyAtbiAiJGNpX2RvY2tlciIgXTsgdGhlbgotICAgIHNlZCBcCi0gICAgICAgIC1lICJzL0BjaV9kaXN0cm9ALyR7Y2lfZGlzdHJvfS8iIFwKLSAgICAgICAgLWUgInMvQGNpX2RvY2tlckAvJHtjaV9kb2NrZXJ9LyIgXAotICAgICAgICAtZSAicy9AY2lfc3VpdGVALyR7Y2lfc3VpdGV9LyIgXAotICAgICAgICA8IHRvb2xzL2NpLURvY2tlcmZpbGUuaW4gPiBEb2NrZXJmaWxlCi0gICAgZXhlYyBkb2NrZXIgYnVpbGQgLXQgY2ktaW1hZ2UgLgotZmkKLQotY2FzZSAiJGNpX2Rpc3RybyIgaW4KLSAgICAoZGViaWFufHVidW50dSkKLSAgICAgICAgIyBEb24ndCBhc2sgcXVlc3Rpb25zLCBqdXN0IGRvIGl0Ci0gICAgICAgIHN1ZG89IiRzdWRvIGVudiBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUiCi0KLSAgICAgICAgIyBEZWJpYW4gRG9ja2VyIGltYWdlcyB1c2UgaHR0cHJlZGlyLmRlYmlhbi5vcmcgYnV0IGl0IHNlZW1zIHRvIGJlCi0gICAgICAgICMgdW5yZWxpYWJsZTsgdXNlIGEgQ0ROIGluc3RlYWQKLSAgICAgICAgJHN1ZG8gc2VkIC1pIC1lICdzL2h0dHByZWRpclwuZGViaWFuXC5vcmcvZGViLmRlYmlhbi5vcmcvZycgXAotICAgICAgICAgICAgL2V0Yy9hcHQvc291cmNlcy5saXN0Ci0KLSAgICAgICAgY2FzZSAiJGNpX3N1aXRlIiBpbgotICAgICAgICAgICAgKHhlbmlhbCkKLSAgICAgICAgICAgICAgICAjIFVidW50dSAxNi4wNCBkaWRuJ3QgaGF2ZSB0aGUgd2luZTMyLCB3aW5lNjQgcGFja2FnZXMKLSAgICAgICAgICAgICAgICB3aW5lMzI9d2luZTppMzg2Ci0gICAgICAgICAgICAgICAgd2luZTY0PXdpbmU6YW1kNjQKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKCopCi0gICAgICAgICAgICAgICAgd2luZTMyPXdpbmUzMgotICAgICAgICAgICAgICAgIHdpbmU2ND13aW5lNjQKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAiJGNpX2hvc3QiIGluCi0gICAgICAgICAgICAoaTY4Ni13NjQtbWluZ3czMikKLSAgICAgICAgICAgICAgICAkc3VkbyBkcGtnIC0tYWRkLWFyY2hpdGVjdHVyZSBpMzg2Ci0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICh4ODZfNjQtdzY0LW1pbmd3MzIpCi0gICAgICAgICAgICAgICAgIyBhc3N1bWUgdGhlIGhvc3Qgb3IgY29udGFpbmVyIGlzIHg4Nl82NCBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgICRzdWRvIGFwdC1nZXQgLXFxIC15IHVwZGF0ZQotCi0gICAgICAgIGNhc2UgIiRjaV9ob3N0IiBpbgotICAgICAgICAgICAgKGk2ODYtdzY0LW1pbmd3MzIpCi0gICAgICAgICAgICAgICAgJHN1ZG8gYXB0LWdldCAtcXEgLXkgaW5zdGFsbCBcCi0gICAgICAgICAgICAgICAgICAgIGJpbnV0aWxzLW1pbmd3LXc2NC1pNjg2IFwKLSAgICAgICAgICAgICAgICAgICAgZysrLW1pbmd3LXc2NC1pNjg2IFwKLSAgICAgICAgICAgICAgICAgICAgJHdpbmUzMiBcCi0gICAgICAgICAgICAgICAgICAgICR7TlVMTH0KLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKHg4Nl82NC13NjQtbWluZ3czMikKLSAgICAgICAgICAgICAgICAkc3VkbyBhcHQtZ2V0IC1xcSAteSBpbnN0YWxsIFwKLSAgICAgICAgICAgICAgICAgICAgYmludXRpbHMtbWluZ3ctdzY0LXg4Ni02NFwKLSAgICAgICAgICAgICAgICAgICAgZysrLW1pbmd3LXc2NC14ODYtNjQgXAotICAgICAgICAgICAgICAgICAgICAkd2luZTY0IFwKLSAgICAgICAgICAgICAgICAgICAgJHtOVUxMfQotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICAkc3VkbyBhcHQtZ2V0IC1xcSAteSBpbnN0YWxsIFwKLSAgICAgICAgICAgIGF1dG9jb25mLWFyY2hpdmUgXAotICAgICAgICAgICAgYXV0b21ha2UgXAotICAgICAgICAgICAgYXV0b3Rvb2xzLWRldiBcCi0gICAgICAgICAgICBjY2FjaGUgXAotICAgICAgICAgICAgY21ha2UgXAotICAgICAgICAgICAgZGViaGVscGVyIFwKLSAgICAgICAgICAgIGRoLWF1dG9yZWNvbmYgXAotICAgICAgICAgICAgZGgtZXhlYyBcCi0gICAgICAgICAgICBkb3h5Z2VuIFwKLSAgICAgICAgICAgIGRwa2ctZGV2IFwKLSAgICAgICAgICAgIGdub21lLWRlc2t0b3AtdGVzdGluZyBcCi0gICAgICAgICAgICBsaWJhcHBhcm1vci1kZXYgXAotICAgICAgICAgICAgbGliYXVkaXQtZGV2IFwKLSAgICAgICAgICAgIGxpYmNhcC1uZy1kZXYgXAotICAgICAgICAgICAgbGliZXhwYXQtZGV2IFwKLSAgICAgICAgICAgIGxpYmdsaWIyLjAtZGV2IFwKLSAgICAgICAgICAgIGxpYnNlbGludXgxLWRldiBcCi0gICAgICAgICAgICBsaWJzeXN0ZW1kLWRldiBcCi0gICAgICAgICAgICBsaWJ4MTEtZGV2IFwKLSAgICAgICAgICAgIHB5dGhvbiBcCi0gICAgICAgICAgICBweXRob24tZGJ1cyBcCi0gICAgICAgICAgICBweXRob24tZ2kgXAotICAgICAgICAgICAgdmFsZ3JpbmQgXAotICAgICAgICAgICAgd2dldCBcCi0gICAgICAgICAgICB4YXV0aCBcCi0gICAgICAgICAgICB4bWx0byBcCi0gICAgICAgICAgICB4c2x0cHJvYyBcCi0gICAgICAgICAgICB4dmZiIFwKLSAgICAgICAgICAgICR7TlVMTH0KLQotICAgICAgICBpZiBbICIkY2lfaW5fZG9ja2VyIiA9IHllcyBdOyB0aGVuCi0gICAgICAgICAgICAjIEFkZCB0aGUgdXNlciB0aGF0IHdlIHdpbGwgdXNlIHRvIGRvIHRoZSBidWlsZCBpbnNpZGUgdGhlCi0gICAgICAgICAgICAjIERvY2tlciBjb250YWluZXIsIGFuZCBsZXQgdGhlbSB1c2Ugc3VkbwotICAgICAgICAgICAgYWRkdXNlciAtLWRpc2FibGVkLXBhc3N3b3JkIHVzZXIgPC9kZXYvbnVsbAotICAgICAgICAgICAgYXB0LWdldCAteSBpbnN0YWxsIHN1ZG8KLSAgICAgICAgICAgIGVjaG8gInVzZXIgQUxMPShBTEwpIE5PUEFTU1dEOiBBTEwiID4gL2V0Yy9zdWRvZXJzLmQvbm9wYXNzd2QKLSAgICAgICAgICAgIGNobW9kIDA0NDAgL2V0Yy9zdWRvZXJzLmQvbm9wYXNzd2QKLSAgICAgICAgZmkKLQotICAgICAgICBjYXNlICIkY2lfc3VpdGUiIGluCi0gICAgICAgICAgICAoamVzc2llfHhlbmlhbCkKLSAgICAgICAgICAgICAgICAjIGF1dG9jb25mLWFyY2hpdmUgaW4gRGViaWFuIDggYW5kIFVidW50dSAxNi4wNCBpcyB0b28gb2xkLAotICAgICAgICAgICAgICAgICMgdXNlIHRoZSBvbmUgZnJvbSBEZWJpYW4gOSBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgd2dldCBodHRwOi8vZGViLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9hL2F1dG9jb25mLWFyY2hpdmUvYXV0b2NvbmYtYXJjaGl2ZV8yMDE2MDkxNi0xX2FsbC5kZWIKLSAgICAgICAgICAgICAgICAkc3VkbyBkcGtnIC1pIGF1dG9jb25mLWFyY2hpdmVfKl9hbGwuZGViCi0gICAgICAgICAgICAgICAgcm0gYXV0b2NvbmYtYXJjaGl2ZV8qX2FsbC5kZWIKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAoc3RyZXRjaCkKLSAgICAgICAgICAgICAgICAjIERlYmlhbiA5ICdzdHJldGNoJyBkaWRuJ3QgaGF2ZSB0aGUgZHVja3R5cGUgcGFja2FnZQotICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICgqKQotICAgICAgICAgICAgICAgICMgYXNzdW1lIFVidW50dSAxOC4wNCAnYmlvbmljJywgRGViaWFuIDEwICdidXN0ZXInIG9yIG5ld2VyCi0gICAgICAgICAgICAgICAgJHN1ZG8gYXB0LWdldCAtcXEgLXkgaW5zdGFsbCBkdWNrdHlwZQotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICgqKQotICAgICAgICBlY2hvICJEb24ndCBrbm93IGhvdyB0byBzZXQgdXAgJHtjaV9kaXN0cm99IiA+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIDs7Ci1lc2FjCi0KLSMgdmltOnNldCBzdz00IHN0cz00IGV0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1jbGVhbnVwLXNvY2tldHMuYyBiL3Rvb2xzL2RidXMtY2xlYW51cC1zb2NrZXRzLmMKaW5kZXggOTk0ZTU3ZS4uMWI2NzA5YSAxMDA2NDQKLS0tIGEvdG9vbHMvZGJ1cy1jbGVhbnVwLXNvY2tldHMuYworKysgYi90b29scy9kYnVzLWNsZWFudXAtc29ja2V0cy5jCkBAIC0zMjgsNyArMzI4LDYgQEAKICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNPQ0tFVF9VTkxJTktFRDoKLSAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJCYWQgc3RhdHVzIGZyb20gb3Blbl9zb2NrZXQoKSwgc2hvdWxkIG5vdCBoYXBwZW5cbiIpOwogICAgICAgICAgIGV4aXQgKDEpOwogICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1lY2hvLmMgYi90b29scy9kYnVzLWVjaG8uYwppbmRleCA5MTdkOTgzLi43MzhiMWNiIDEwMDY0NAotLS0gYS90b29scy9kYnVzLWVjaG8uYworKysgYi90b29scy9kYnVzLWVjaG8uYwpAQCAtNDAsOCArNDAsNiBAQAogc3RhdGljIGRidXNfYm9vbF90IG5vcmVwbHkgPSBGQUxTRTsKIHN0YXRpYyBkYnVzX2Jvb2xfdCBub3JlYWQgPSBGQUxTRTsKIAotc3RhdGljIHZvaWQgdXNhZ2VfZWNobyAoaW50IGV4aXRfd2l0aCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHVzYWdlX2VjaG8gKGludCBleGl0X3dpdGgpCiB7CkBAIC02Miw4ICs2MCw2IEBACiAgIGV4aXQgKGV4aXRfd2l0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYWdlX2JsYWNrX2hvbGUgKGludCBleGl0X3dpdGgpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB1c2FnZV9ibGFja19ob2xlIChpbnQgZXhpdF93aXRoKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1sYXVuY2gtd2luLmMgYi90b29scy9kYnVzLWxhdW5jaC13aW4uYwppbmRleCAzNDgzN2MxLi4xZGZkMDk1IDEwMDY0NAotLS0gYS90b29scy9kYnVzLWxhdW5jaC13aW4uYworKysgYi90b29scy9kYnVzLWxhdW5jaC13aW4uYwpAQCAtMzgsNyArMzgsNyBAQAogI2RlZmluZSB3Y3NjcHlfcyBteV93Y3NjcHlfcwogCiBzdGF0aWMgZXJybm9fdAotd2NzY2F0X3MgKHdjaGFyX3QgKmRlc3QsIHNpemVfdCBzaXplLCBjb25zdCB3Y2hhcl90ICpzcmMpCit3Y3NjYXRfcyAod2NoYXJfdCAqZGVzdCwgc2l6ZV90IHNpemUsIHdjaGFyX3QgKnNyYykgCiB7CiAgIGFzc2VydCAoc2l6ZW9mICh3Y2hhcl90KSAqICh3Y3NsZW4gKGRlc3QpICsgd2NzbGVuIChzcmMpICsgMSkgPD0gc2l6ZSk7CiAgIHdjc2NhdCAoZGVzdCwgc3JjKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogCiBzdGF0aWMgZXJybm9fdAotd2NzY3B5X3MgKHdjaGFyX3QgKmRlc3QsIHNpemVfdCBzaXplLCBjb25zdCB3Y2hhcl90ICpzcmMpCit3Y3NjcHlfcyAod2NoYXJfdCAqZGVzdCwgc2l6ZV90IHNpemUsIHdjaGFyX3QgKnNyYykKIHsKICAgYXNzZXJ0IChzaXplb2YgKHdjaGFyX3QpICogKHdjc2xlbiAoc3JjKSArIDEpIDw9IHNpemUpOwogICB3Y3NjcHkgKGRlc3QsIHNyYyk7CkBAIC04Nyw3ICs4Nyw3IEBACiAgIHdjaGFyX3QgZGJ1c0RhZW1vblBhdGhbTUFYX1BBVEggKiAyICsgMV07CiAgIHdjaGFyX3QgY29tbWFuZFtNQVhfUEFUSCAqIDIgKyAxXTsKICAgd2NoYXJfdCAqcDsKLSAgY29uc3Qgd2NoYXJfdCAqZGFlbW9uX25hbWU7CisgIHdjaGFyX3QgKmRhZW1vbl9uYW1lOwogICBpbnQgcmVzdWx0OwogCiAjaWZkZWYgREJVU19XSU5DRQpkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1sYXVuY2gteDExLmMgYi90b29scy9kYnVzLWxhdW5jaC14MTEuYwppbmRleCBjNGI5NzkwLi5hMDk0NDRiIDEwMDY0NAotLS0gYS90b29scy9kYnVzLWxhdW5jaC14MTEuYworKysgYi90b29scy9kYnVzLWxhdW5jaC14MTEuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIEF0b20gcGlkX2F0b207CiAKIHN0YXRpYyBpbnQKLXhfaW9fZXJyb3JfaGFuZGxlciAoRGlzcGxheSAqbG9jYWxfeGRpc3BsYXkpCit4X2lvX2Vycm9yX2hhbmRsZXIgKERpc3BsYXkgKnhkaXNwbGF5KQogewogICB2ZXJib3NlICgiWCBJTyBlcnJvclxuIik7CiAgIGtpbGxfYnVzX2FuZF9leGl0ICgwKTsKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHZvaWQKIHJlbW92ZV9wcmVmaXggKGNoYXIgKnMsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXgpCisgICAgICAgICAgICAgICBjaGFyICpwcmVmaXgpCiB7CiAgIGludCBwbGVuOwogCkBAIC0zNjcsOCArMzY3LDcgQEAKICAgd2lkID0gWENyZWF0ZVdpbmRvdyAoeGRpc3BsYXksIFJvb3RXaW5kb3cgKHhkaXNwbGF5LCAwKSwgLTIwLCAtMjAsIDEwLCAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgMCwgQ29weUZyb21QYXJlbnQsIElucHV0T25seSwgQ29weUZyb21QYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwpOwotICAvKiBUaGUgdHlwZSBvZiBhIFdpbmRvdyB2YXJpZXMsIHNvIGNhc3QgaXQgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUgKi8KLSAgdmVyYm9zZSAoIkNyZWF0ZWQgd2luZG93ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIHdpZCk7CisgIHZlcmJvc2UgKCJDcmVhdGVkIHdpbmRvdyAlZFxuIiwgd2lkKTsKIAogICAvKiBTYXZlIHRoZSBwcm9wZXJ0eSBpbiB0aGUgd2luZG93ICovCiAgIFhDaGFuZ2VQcm9wZXJ0eSAoeGRpc3BsYXksIHdpZCwgYWRkcmVzc19hdG9tLCBYQV9TVFJJTkcsIDgsIFByb3BNb2RlUmVwbGFjZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2RidXMtbGF1bmNoLmMgYi90b29scy9kYnVzLWxhdW5jaC5jCmluZGV4IGY1Mjg3NTQuLjgwZTRhMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RidXMtbGF1bmNoLmMKKysrIGIvdG9vbHMvZGJ1cy1sYXVuY2guYwpAQCAtMTE3LDEyICsxMTcsMTIgQEAKIC8qIFJlYWQgdGhlIG1hY2hpbmUgdXVpZCBmcm9tIGZpbGUgaWYgbmVlZGVkLiBSZXR1cm5zIFRSVUUgaWYgbWFjaGluZV91dWlkIGlzCiAgKiBzZXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiAqLwogc3RhdGljIGludAotcmVhZF9tYWNoaW5lX3V1aWRfaWZfbmVlZGVkIChEQnVzRXJyb3IgKmVycm9yKQorcmVhZF9tYWNoaW5lX3V1aWRfaWZfbmVlZGVkICh2b2lkKQogewogICBpZiAobWFjaGluZV91dWlkICE9IE5VTEwpCiAgICAgcmV0dXJuIFRSVUU7CiAKLSAgbWFjaGluZV91dWlkID0gZGJ1c190cnlfZ2V0X2xvY2FsX21hY2hpbmVfaWQgKGVycm9yKTsKKyAgbWFjaGluZV91dWlkID0gZGJ1c19nZXRfbG9jYWxfbWFjaGluZV9pZCAoKTsKIAogICBpZiAobWFjaGluZV91dWlkID09IE5VTEwpCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY0LDIwICsxNjQsMTYgQEAKICNlbmRpZiAvKiBEQlVTX0VOQUJMRV9WRVJCT1NFX01PREUgKi8KIH0KIAotc3RhdGljIHZvaWQgdXNhZ2UgKGludCBlY29kZSkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHVzYWdlIChpbnQgZWNvZGUpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwgImRidXMtbGF1bmNoIFstLXZlcnNpb25dIFstLWhlbHBdIFstLXNoLXN5bnRheF0iCiAgICAgICAgICAgICIgWy0tY3NoLXN5bnRheF0gWy0tYXV0by1zeW50YXhdIFstLWJpbmFyeS1zeW50YXhdIFstLWNsb3NlLXN0ZGVycl0iCi0gICAgICAgICAgICIgWy0tZXhpdC13aXRoLXNlc3Npb258LS1leGl0LXdpdGgteDExXSBbLS1hdXRvbGF1bmNoPU1BQ0hJTkVJRF0iCisgICAgICAgICAgICIgWy0tZXhpdC13aXRoLXNlc3Npb25dIFstLWF1dG9sYXVuY2g9TUFDSElORUlEXSIKICAgICAgICAgICAgIiBbLS1jb25maWctZmlsZT1GSUxFTkFNRV0gW1BST0dSQU1dIFtBUkdTLi4uXVxuIik7CiAgIGV4aXQgKGVjb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgdmVyc2lvbiAodm9pZCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHZlcnNpb24gKHZvaWQpCiB7CkBAIC0yMDksNyArMjA1LDYgQEAKICAgcmV0dXJuIGNvcHk7CiB9CiAKLSNpZmRlZiBEQlVTX0VOQUJMRV9FTUJFRERFRF9URVNUUwogc3RhdGljIGNoYXIgKgogY29uY2F0MiAoY29uc3QgY2hhciAqYSwKICAgICBjb25zdCBjaGFyICpiKQpAQCAtMjI5LDcgKzIyNCw2IEBACiAgIG1lbWNweSAocmV0ICsgbGEsIGIsIGxiICsgMSk7CiAgIHJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLyogREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMgKi8KIAogdHlwZWRlZiBlbnVtCiB7CkBAIC00NTksMTYgKzQ1MywyMSBAQAogICAgIH0KIH0KIAotc3RhdGljIGludCBnb3RfZmF0YWxfc2lnbmFsID0gMDsKK3N0YXRpYyBpbnQgZ290X3NpZ2h1cCA9IEZBTFNFOwogCiBzdGF0aWMgdm9pZAogc2lnbmFsX2hhbmRsZXIgKGludCBzaWcpCiB7Ci0gIGdvdF9mYXRhbF9zaWduYWwgPSBzaWc7CisgIHN3aXRjaCAoc2lnKQorICAgIHsKKyAgICBjYXNlIFNJR0hVUDoKKyAgICBjYXNlIFNJR0lOVDoKKyAgICBjYXNlIFNJR1RFUk06CisgICAgICBnb3Rfc2lnaHVwID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KIH0KIAotc3RhdGljIHZvaWQga2lsbF9idXNfd2hlbl9zZXNzaW9uX2VuZHMgKHZvaWQpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiBraWxsX2J1c193aGVuX3Nlc3Npb25fZW5kcyAodm9pZCkKIHsKQEAgLTQ4MCw3ICs0NzksNyBAQAogICBzaWdzZXRfdCBlbXB0eV9tYXNrOwogICAKICAgLyogaW5zdGFsbCBTSUdIVVAgaGFuZGxlciAqLwotICBnb3RfZmF0YWxfc2lnbmFsID0gMDsKKyAgZ290X3NpZ2h1cCA9IEZBTFNFOwogICBzaWdlbXB0eXNldCAoJmVtcHR5X21hc2spOwogICBhY3Quc2FfaGFuZGxlciA9IHNpZ25hbF9oYW5kbGVyOwogICBhY3Quc2FfbWFzayAgICA9IGVtcHR5X21hc2s7CkBAIC01NTcsMTAgKzU1Niw5IEBACiAgICAgICBzZWxlY3QgKE1BWCAodHR5X2ZkLCB4X2ZkKSArIDEsCiAgICAgICAgICAgICAgICZyZWFkX3NldCwgTlVMTCwgJmVycl9zZXQsIE5VTEwpOwogCi0gICAgICBpZiAoZ290X2ZhdGFsX3NpZ25hbCkKKyAgICAgIGlmIChnb3Rfc2lnaHVwKQogICAgICAgICB7Ci0gICAgICAgICAgdmVyYm9zZSAoIkdvdCBmYXRhbCBzaWduYWwgJWQsIGtpbGxpbmcgZGJ1cy1kYWVtb25cbiIsCi0gICAgICAgICAgICAgICAgICAgZ290X2ZhdGFsX3NpZ25hbCk7CisgICAgICAgICAgdmVyYm9zZSAoIkdvdCBTSUdIVVAsIGV4aXRpbmdcbiIpOwogICAgICAgICAgIGtpbGxfYnVzX2FuZF9leGl0ICgwKTsKICAgICAgICAgfQogICAgICAgCkBAIC02MDcsMTYgKzYwNSwxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAvKiBub3QgcmVhY2hlZCAqLwogfQogCi1fREJVU19HTlVDX05PUkVUVVJOIHN0YXRpYyB2b2lkCitzdGF0aWMgdm9pZAogYmFieXNpdCAoaW50ICAgZXhpdF93aXRoX3Nlc3Npb24sCiAgICAgICAgICBwaWRfdCBjaGlsZF9waWQsCiAgICAgICAgICBpbnQgICByZWFkX2J1c19waWRfZmQpICAvKiByZWFkIHBpZCBmcm9tIGhlcmUgKi8KIHsKLSAgREJ1c0Vuc3VyZVN0YW5kYXJkRmRzRmxhZ3MgZmxhZ3M7CiAgIGludCByZXQ7CisgIGludCBkZXZfbnVsbF9mZDsKICAgY29uc3QgY2hhciAqczsKIAogICB2ZXJib3NlICgiYmFieXNpdHRpbmcsIGV4aXRfd2l0aF9zZXNzaW9uID0gJWQsIGNoaWxkX3BpZCA9ICVsZCwgcmVhZF9idXNfcGlkX2ZkID0gJWRcbiIsCkBAIC02MzYsMjYgKzYzMywyOCBAQAogICAgICAgZXhpdCAoMSk7CiAgICAgfQogCi0gIGZsYWdzID0gREJVU19GT1JDRV9TVERPVVRfTlVMTDsKLQotICBpZiAoIWV4aXRfd2l0aF9zZXNzaW9uKQotICAgIGZsYWdzIHw9IERCVVNfRk9SQ0VfU1RESU5fTlVMTDsKLQotICBzID0gZ2V0ZW52ICgiREJVU19ERUJVR19PVVRQVVQiKTsKLQotICBpZiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpCi0gICAgZmxhZ3MgfD0gREJVU19GT1JDRV9TVERFUlJfTlVMTDsKLQogICAvKiBDbG9zZSBzdGRvdXQvc3RkZXJyIHNvIHdlIGRvbid0IGJsb2NrIGFuICJldmFsIiBvciBvdGhlcndpc2UKICAgICogbG9jayB1cC4gc3Rkb3V0IGlzIHN0aWxsIGNoYWluaW5nIHRocm91Z2ggdG8gZGJ1cy1sYXVuY2gKICAgICogYW5kIGluIHR1cm4gdG8gdGhlIHBhcmVudCBzaGVsbC4KICAgICovCi0gIGlmICghX2RidXNfZW5zdXJlX3N0YW5kYXJkX2ZkcyAoZmxhZ3MsICZzKSkKKyAgZGV2X251bGxfZmQgPSBvcGVuICgiL2Rldi9udWxsIiwgT19SRFdSKTsKKyAgaWYgKGRldl9udWxsX2ZkID49IDApCiAgICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzXG4iLCBzLCBzdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIGV4aXQgKDEpOworICAgICAgaWYgKCFleGl0X3dpdGhfc2Vzc2lvbikKKyAgICAgICAgZHVwMiAoZGV2X251bGxfZmQsIDApOworICAgICAgZHVwMiAoZGV2X251bGxfZmQsIDEpOworICAgICAgcyA9IGdldGVudiAoIkRCVVNfREVCVUdfT1VUUFVUIik7CisgICAgICBpZiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpCisgICAgICAgIGR1cDIgKGRldl9udWxsX2ZkLCAyKTsKKyAgICAgIGNsb3NlIChkZXZfbnVsbF9mZCk7CiAgICAgfQotCisgIGVsc2UKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiAvZGV2L251bGw6ICVzXG4iLAorICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAvKiBjb250aW51ZSwgd2h5IG5vdCAqLworICAgIH0KKyAgCiAgIHJldCA9IGZvcmsgKCk7CiAKICAgaWYgKHJldCA8IDApCkBAIC03MDMsOCArNzAyLDYgQEAKIAkgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICBleGl0ICgxKTsKICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJJbnZhbGlkIHJlYWQgcmVzdWx0Iik7CiAgICAgfQogCiAgIHZlcmJvc2UgKCJHb3QgUElEICVsZCBmcm9tIGRhZW1vblxuIiwKQEAgLTcyOCwyMiArNzI1LDI4IEBACiBzdGF0aWMgdm9pZAogZG9fY2xvc2Vfc3RkZXJyICh2b2lkKQogewotICBjb25zdCBjaGFyICplcnI7CisgIGludCBmZDsKIAogICBmZmx1c2ggKHN0ZGVycik7CiAKLSAgaWYgKCFfZGJ1c19lbnN1cmVfc3RhbmRhcmRfZmRzIChEQlVTX0ZPUkNFX1NUREVSUl9OVUxMLCAmZXJyKSkKKyAgLyogZGJ1cy1sYXVuY2ggaXMgYSBVbml4LW9ubHkgcHJvZ3JhbSwgc28gd2UgY2FuIHJlbHkgb24gL2Rldi9udWxsIGJlaW5nIHRoZXJlLgorICAgKiBXZSdyZSBpbmNsdWRpbmcgdW5pc3RkLmggYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCBzaC9jc2ggbGF1bmNoIHNlcXVlbmNlcy4uLgorICAgKi8KKyAgZmQgPSBvcGVuICgiL2Rldi9udWxsIiwgT19SRFdSKTsKKyAgaWYgKGZkID09IC0xKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlc1xuIiwgZXJyLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludGVybmFsIGVycm9yOiBjYW5ub3Qgb3BlbiAvZGV2L251bGw6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICBleGl0ICgxKTsKICAgICB9Ci19CiAKLXN0YXRpYyB2b2lkIHBhc3NfaW5mbyAoY29uc3QgY2hhciAqcnVucHJvZywgY29uc3QgY2hhciAqYnVzX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgIHBpZF90IGJ1c19waWQsIGxvbmcgYnVzX3dpZCwgaW50IGNfc2hlbGxfc3ludGF4LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgYm91cm5lX3NoZWxsX3N5bnRheCwgaW50IGJpbmFyeV9zeW50YXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ19hcmdzKSBfREJVU19HTlVDX05PUkVUVVJOOworICBjbG9zZSAoMik7CisgIGlmIChkdXAyIChmZCwgMikgPT0gLTEpCisgICAgeworICAgICAgLyogZXJyb3I7IHdlIGNhbid0IHJlcG9ydCBhbiBlcnJvciBhbnltb3JlLi4uICovCisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIGNsb3NlIChmZCk7Cit9CiAKIHN0YXRpYyB2b2lkCiBwYXNzX2luZm8gKGNvbnN0IGNoYXIgKnJ1bnByb2csIGNvbnN0IGNoYXIgKmJ1c19hZGRyZXNzLCBwaWRfdCBidXNfcGlkLApAQCAtODI0LDcgKzgyNyw2IEBACiAgIGNvbnN0IGNoYXIgKnJ1bnByb2cgPSBOVUxMOwogICBpbnQgcmVtYWluaW5nX2FyZ3MgPSAwOwogICBpbnQgZXhpdF93aXRoX3Nlc3Npb247Ci0gIGludCBleGl0X3dpdGhfeDExID0gRkFMU0U7CiAgIGludCBiaW5hcnlfc3ludGF4ID0gRkFMU0U7CiAgIGludCBjX3NoZWxsX3N5bnRheCA9IEZBTFNFOwogICBpbnQgYm91cm5lX3NoZWxsX3N5bnRheCA9IEZBTFNFOwpAQCAtODQxLDcgKzg0Myw2IEBACiAgIGRidXNfYm9vbF90IHVzZXJfYnVzX3N1cHBvcnRlZCA9IEZBTFNFOwogICBEQnVzU3RyaW5nIHVzZXJfYnVzOwogICBjb25zdCBjaGFyICplcnJvcl9zdHI7Ci0gIERCdXNFcnJvciBlcnJvciA9IERCVVNfRVJST1JfSU5JVDsKIAogICBleGl0X3dpdGhfc2Vzc2lvbiA9IEZBTFNFOwogICBjb25maWdfZmlsZSA9IE5VTEw7CkBAIC04ODQsOCArODg1LDYgQEAKICAgICAgICAgdmVyc2lvbiAoKTsKICAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1leGl0LXdpdGgtc2Vzc2lvbiIpID09IDApCiAgICAgICAgIGV4aXRfd2l0aF9zZXNzaW9uID0gVFJVRTsKLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1leGl0LXdpdGgteDExIikgPT0gMCkKLSAgICAgICAgZXhpdF93aXRoX3gxMSA9IFRSVUU7CiAgICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0tY2xvc2Utc3RkZXJyIikgPT0gMCkKICAgICAgICAgY2xvc2Vfc3RkZXJyID0gVFJVRTsKICAgICAgIGVsc2UgaWYgKHN0cnN0ciAoYXJnLCAiLS1hdXRvbGF1bmNoPSIpID09IGFyZykKQEAgLTk5Nyw5ICs5OTYsNiBAQAogICBpZiAoZXhpdF93aXRoX3Nlc3Npb24pCiAgICAgdmVyYm9zZSAoIi0tZXhpdC13aXRoLXNlc3Npb24gZW5hYmxlZFxuIik7CiAKLSAgaWYgKGV4aXRfd2l0aF94MTEpCi0gICAgdmVyYm9zZSAoIi0tZXhpdC13aXRoLXgxMSBlbmFibGVkXG4iKTsKLQogICBpZiAoYXV0b2xhdW5jaCkKICAgICB7ICAgICAgCiAjaWZuZGVmIERCVVNfQlVJTERfWDExCkBAIC0xMDE0LDYgKzEwMTAsNyBAQAogICAgICAgY2hhciAqYWRkcmVzczsKICAgICAgIHBpZF90IHBpZDsKICAgICAgIGxvbmcgd2lkOworICAgICAgREJ1c0Vycm9yIGVycm9yID0gREJVU19FUlJPUl9JTklUOwogICAgICAgCiAgICAgICBpZiAoZ2V0X21hY2hpbmVfdXVpZCAoKSA9PSBOVUxMKQogICAgICAgICB7CkBAIC0xMDUzLDEwICsxMDUwLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgdmVyYm9zZSAoIkF1dG9sYXVuY2ggZW5hYmxlZCAodXNpbmcgWDExKS5cbiIpOwotICAgICAgaWYgKCFleGl0X3dpdGhfeDExKQorICAgICAgaWYgKCFleGl0X3dpdGhfc2Vzc2lvbikKIAl7Ci0gICAgICAgICAgdmVyYm9zZSAoIi0tZXhpdC13aXRoLXgxMSBhdXRvbWF0aWNhbGx5IGVuYWJsZWRcbiIpOwotICAgICAgICAgIGV4aXRfd2l0aF94MTEgPSBUUlVFOworCSAgdmVyYm9zZSAoIi0tZXhpdC13aXRoLXNlc3Npb24gYXV0b21hdGljYWxseSBlbmFibGVkXG4iKTsKKwkgIGV4aXRfd2l0aF9zZXNzaW9uID0gVFJVRTsKIAl9CiAKICAgICAgIGlmICgheDExX2luaXQgKCkpCkBAIC0xMDc5LDQwICsxMDc2LDEyIEBACiAJICBleGl0ICgwKTsKIAl9CiAjZW5kaWYgLyogREJVU19FTkFCTEVfWDExX0FVVE9MQVVOQ0ggKi8KLSNlbmRpZiAvKiBEQlVTX0JVSUxEX1gxMSAqLwogICAgIH0KLSAgZWxzZSBpZiAoZXhpdF93aXRoX3gxMSkKLSAgICB7Ci0jaWZuZGVmIERCVVNfQlVJTERfWDExCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICJTZXNzaW9uIGxpZmV0aW1lIGJhc2VkIG9uIFgxMSByZXF1ZXN0ZWQsIGJ1dCBYMTEgc3VwcG9ydCBub3QgY29tcGlsZWQgaW4uXG4iKTsKLSAgICAgIGV4aXQgKDEpOwotI2Vsc2UgLyogREJVU19CVUlMRF9YMTEgKi8KLSAgICAgIGlmICghcmVhZF9tYWNoaW5lX3V1aWRfaWZfbmVlZGVkICgmZXJyb3IpKQotICAgICAgICB7Ci0gICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU2Vzc2lvbiBsaWZldGltZSBiYXNlZCBvbiBYMTEgcmVxdWVzdGVkLCBidXQgbWFjaGluZSBVVUlEIHVuYXZhaWxhYmxlOiAlcy5cbiIsIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKLSAgICAgICAgICBleGl0ICgxKTsKLSAgICAgICAgfQotCi0gICAgICBpZiAoIXgxMV9pbml0ICgpKQotICAgICAgICB7Ci0gICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU2Vzc2lvbiBsaWZldGltZSBiYXNlZCBvbiBYMTEgcmVxdWVzdGVkLCBidXQgWDExIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwotICAgICAgICAgIGV4aXQgKDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogREJVU19CVUlMRF9YMTEgKi8KLSAgICB9Ci0jaWZkZWYgREJVU19CVUlMRF9YMTEKLSAgZWxzZSBpZiAocmVhZF9tYWNoaW5lX3V1aWRfaWZfbmVlZGVkICgmZXJyb3IpKQorICBlbHNlIGlmIChyZWFkX21hY2hpbmVfdXVpZF9pZl9uZWVkZWQoKSkKICAgICB7CiAgICAgICB4MTFfaW5pdCgpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIC8qIFN1cnZpdmUgdGhpcyBtaXNjb25maWd1cmF0aW9uLCBidXQgY29tcGxhaW4gYWJvdXQgaXQuICovCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgZXJyb3IubWVzc2FnZSk7Ci0gICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7Ci0gICAgfQogI2VuZGlmIC8qIERCVVNfQlVJTERfWDExICovCisgICAgfQogCiAKICAgaWYgKHBpcGUgKGJ1c19waWRfdG9fbGF1bmNoZXJfcGlwZSkgPCAwIHx8CkBAIC0xMTc0LDcgKzExNDMsNyBAQAogICAgICAgICAgICAqIGFuZCB3aWxsIGFsc28gcmVhcCB0aGUgcHJlLWZvcmtlZCBidXMKICAgICAgICAgICAgKiBkYWVtb24KICAgICAgICAgICAgKi8KLSAgICAgICAgICBiYWJ5c2l0IChleGl0X3dpdGhfc2Vzc2lvbiB8fCBleGl0X3dpdGhfeDExLCByZXQsCisgICAgICAgICAgYmFieXNpdCAoZXhpdF93aXRoX3Nlc3Npb24sIHJldCwKICAgICAgICAgICAgICAgICAgICBidXNfcGlkX3RvX2JhYnlzaXR0ZXJfcGlwZVtSRUFEX0VORF0pOwogICAgICAgICAgIGV4aXQgKDApOwogICAgICAgICB9CkBAIC0xMjE1LDEwICsxMTg0LDEwIEBACiAgCiAjaWZkZWYgREJVU19FTkFCTEVfRU1CRURERURfVEVTVFMKICAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqdGVzdF9kYWVtb247CiAgICAgICAgIC8qIGV4ZWMgZnJvbSB0ZXN0ZGlyICovCi0gICAgICAgIGNvbnN0IGNoYXIgKnRlc3RfZGFlbW9uID0gZ2V0ZW52ICgiREJVU19URVNUX0RBRU1PTiIpOwotCi0gICAgICAgIGlmICh0ZXN0X2RhZW1vbiAhPSBOVUxMKQorICAgICAgICBpZiAoZ2V0ZW52ICgiREJVU19VU0VfVEVTVF9CSU5BUlkiKSAhPSBOVUxMICYmCisgICAgICAgICAgICAodGVzdF9kYWVtb24gPSBnZXRlbnYgKCJEQlVTX1RFU1RfREFFTU9OIikpICE9IE5VTEwpCiAgICAgICAgICAgewogICAgICAgICAgICAgaWYgKGNvbmZpZ19maWxlID09IE5VTEwgJiYgZ2V0ZW52ICgiREJVU19URVNUX0RBVEEiKSAhPSBOVUxMKQogICAgICAgICAgICAgICB7CkBAIC0xMjM0LDcgKzEyMDMsNiBAQAogCiAgICAgICAgICAgICBleGVjbCAodGVzdF9kYWVtb24sCiAgICAgICAgICAgICAgICAgICAgdGVzdF9kYWVtb24sCi0gICAgICAgICAgICAgICAgICAgY2xvc2Vfc3RkZXJyID8gIi0tc3lzbG9nLW9ubHkiIDogIi0tc3lzbG9nIiwKICAgICAgICAgICAgICAgICAgICAiLS1mb3JrIiwKICAgICAgICAgICAgICAgICAgICAiLS1wcmludC1waWQiLCB3cml0ZV9waWRfZmRfYXNfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICItLXByaW50LWFkZHJlc3MiLCB3cml0ZV9hZGRyZXNzX2ZkX2FzX3N0cmluZywKQEAgLTEyNTIsNyArMTIyMCw2IEBACiAKICAgICAgIGV4ZWNsIChEQlVTX0RBRU1PTkRJUiIvZGJ1cy1kYWVtb24iLAogICAgICAgICAgICAgIERCVVNfREFFTU9ORElSIi9kYnVzLWRhZW1vbiIsCi0gICAgICAgICAgICAgY2xvc2Vfc3RkZXJyID8gIi0tc3lzbG9nLW9ubHkiIDogIi0tc3lzbG9nIiwKICAgICAgICAgICAgICAiLS1mb3JrIiwKICAgICAgICAgICAgICAiLS1wcmludC1waWQiLCB3cml0ZV9waWRfZmRfYXNfc3RyaW5nLAogICAgICAgICAgICAgICItLXByaW50LWFkZHJlc3MiLCB3cml0ZV9hZGRyZXNzX2ZkX2FzX3N0cmluZywKQEAgLTEyNzIsNyArMTIzOSw2IEBACiAgICAgICAgKi8KICAgICAgIGV4ZWNscCAoImRidXMtZGFlbW9uIiwKICAgICAgICAgICAgICAgImRidXMtZGFlbW9uIiwKLSAgICAgICAgICAgICAgY2xvc2Vfc3RkZXJyID8gIi0tc3lzbG9nLW9ubHkiIDogIi0tc3lzbG9nIiwKICAgICAgICAgICAgICAgIi0tZm9yayIsCiAgICAgICAgICAgICAgICItLXByaW50LXBpZCIsIHdyaXRlX3BpZF9mZF9hc19zdHJpbmcsCiAgICAgICAgICAgICAgICItLXByaW50LWFkZHJlc3MiLCB3cml0ZV9hZGRyZXNzX2ZkX2FzX3N0cmluZywKQEAgLTEzMzEsOCArMTI5Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICAgICAgZXhpdCAoMSk7CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiSW52YWxpZCByZWFkIHJlc3VsdCIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgY2xvc2UgKGJ1c19hZGRyZXNzX3RvX2xhdW5jaGVyX3BpcGVbUkVBRF9FTkRdKTsKQEAgLTEzNTIsOCArMTMxNiw2IEBACiAJCSAgIHN0cmVycm9yIChlcnJubykpOwogCSAgZXhpdCAoMSk7CiAJICBicmVhazsKLQlkZWZhdWx0OgotCSAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiSW52YWxpZCByZWFkIHJlc3VsdCIpOwogCX0KIAogICAgICAgZW5kID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2RidXMtbGF1bmNoLmggYi90b29scy9kYnVzLWxhdW5jaC5oCmluZGV4IDU2NTk2ZDIuLmQwZWRlNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RidXMtbGF1bmNoLmgKKysrIGIvdG9vbHMvZGJ1cy1sYXVuY2guaApAQCAtNDIsOSArNDIsOSBAQAogI2RlZmluZSBNQVhfQUREUl9MRU4gNTEyCiAKIC8qIGRlZmluZWQgaW4gZGJ1cy1sYXVuY2guYyAqLwotdm9pZCB2ZXJib3NlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX0RCVVNfR05VQ19QUklOVEYgKDEsIDIpOwordm9pZCB2ZXJib3NlIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHIpOwotdm9pZCBraWxsX2J1c19hbmRfZXhpdCAoaW50IGV4aXRjb2RlKSBfREJVU19HTlVDX05PUkVUVVJOOwordm9pZCBraWxsX2J1c19hbmRfZXhpdCAoaW50IGV4aXRjb2RlKTsKIAogY29uc3QgY2hhciogZ2V0X21hY2hpbmVfdXVpZCAodm9pZCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2RidXMtbW9uaXRvci5jIGIvdG9vbHMvZGJ1cy1tb25pdG9yLmMKaW5kZXggYzZmMzZkNS4uNDgzZDQyZSAxMDA2NDQKLS0tIGEvdG9vbHMvZGJ1cy1tb25pdG9yLmMKKysrIGIvdG9vbHMvZGJ1cy1tb25pdG9yLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGNvbmZpZy5oPgogCi0jaW5jbHVkZSAiZGJ1cy9kYnVzLWludGVybmFscy5oIgorI2luY2x1ZGUgImRidXMvZGJ1cy1pbnRlcm5hbHMuaCIgICAgICAgIC8qIGp1c3QgZm9yIHRoZSBtYWNyb3MgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yNDAsMTAgKzI0MCw2IEBACiAgICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgICAgY2FzZSBCSU5BUllfTU9ERV9OT1Q6Ci0gICAgICAgIF9kYnVzX2Fzc2VydF9ub3RfcmVhY2hlZCAoIndyb25nIGZpbHRlciBmdW5jdGlvbiIpOwotICAgICAgICBicmVhazsKLQogICAgICAgY2FzZSBCSU5BUllfTU9ERV9SQVc6CiAgICAgICBkZWZhdWx0OgogICAgICAgICAvKiBub3RoaW5nIHNwZWNpYWwsIGp1c3QgdGhlIHJhdyBtZXNzYWdlIHN0cmVhbSAqLwpAQCAtMjY2LDggKzI2Miw2IEBACiAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYWdlIChjaGFyICpuYW1lLCBpbnQgZWNvZGUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB1c2FnZSAoY2hhciAqbmFtZSwgaW50IGVjb2RlKQogewpAQCAtNDc4LDEwICs0NzIsOCBAQAogICAgICAgICAgICAgY2FzZSBEQlVTX0JVU19TRVNTSU9OOgogICAgICAgICAgICAgICB3aGVyZSA9ICJzZXNzaW9uIGJ1cyI7CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEQlVTX0JVU19TVEFSVEVSOgogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgLyogV2UgZG9uJ3Qgc2V0IHR5cGUgdG8gYW55dGhpbmcgZWxzZSAqLwotICAgICAgICAgICAgICBfZGJ1c19hc3NlcnRfbm90X3JlYWNoZWQgKCJpbXBvc3NpYmxlIGJ1cyB0eXBlIik7CisgICAgICAgICAgICAgIHdoZXJlID0gIiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGNvbm5lY3Rpb24gdG8gJXM6ICVzXG4iLApAQCAtNTU1LDggKzU0Nyw2IEBACiAgICAgewogICAgICAgY2FzZSBCSU5BUllfTU9ERV9OT1Q6CiAgICAgICBjYXNlIEJJTkFSWV9NT0RFX1JBVzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIG5vIHNwZWNpYWwgaGVhZGVyIG5lZWRlZCAqLwogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBCSU5BUllfTU9ERV9QQ0FQOgpkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1wcmludC1tZXNzYWdlLmMgYi90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuYwppbmRleCA1NDdmNzJmLi5hYWFjYTE1IDEwMDY0NAotLS0gYS90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuYworKysgYi90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuYwpAQCAtMzksMjMgKzM5LDYgQEAKIAogI2luY2x1ZGUgInRvb2wtY29tbW9uLmgiCiAKLSNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKERCVVNfV0lOKQotI2lmICFkZWZpbmVkKFBSSWQ2NCkKLSNkZWZpbmUgUFJJZDY0ICJJNjRkIgotI2VuZGlmCi0jaWYgIWRlZmluZWQoUFJJdTY0KQotI2RlZmluZSBQUkl1NjQgIkk2NHUiCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfU09DS0xFTl9UCi0jZGVmaW5lIHNvY2tsZW5fdCBpbnQKLSNlbmRpZgotCiBzdGF0aWMgY29uc3QgY2hhcioKIHR5cGVfdG9fbmFtZSAoaW50IG1lc3NhZ2VfdHlwZSkKIHsKQEAgLTEyOCw2ICsxMTEsMjg0IEBACiAKICNkZWZpbmUgREVGQVVMVF9TSVpFIDEwMAogCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNkZWZpbmUgREJVU19JTlQ2NF9QUklOVEZfQVJHVU1FTlQgUFJJaTY0CisjZGVmaW5lIERCVVNfVUlOVDY0X1BSSU5URl9BUkdVTUVOVCBQUkl1NjQKKyNkZWZpbmUgTUFYUEZYIDQwOTYKKworc3RhdGljIGludAorcGZfY2FuX3NpbXBsZShEQnVzTWVzc2FnZUl0ZXIgKml0ZXIpCit7CisgIHN3aXRjaCAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKGl0ZXIpKQorICAgIHsKKyAgICAgIGNhc2UgREJVU19UWVBFX1NUUklORzoKKyAgICAgIGNhc2UgREJVU19UWVBFX0lOVDE2OgorICAgICAgY2FzZSBEQlVTX1RZUEVfSU5UMzI6CisgICAgICBjYXNlIERCVVNfVFlQRV9VSU5UMTY6CisgICAgICBjYXNlIERCVVNfVFlQRV9VSU5UMzI6CisgICAgICBjYXNlIERCVVNfVFlQRV9JTlQ2NDoKKyAgICAgIGNhc2UgREJVU19UWVBFX1VJTlQ2NDoKKyAgICAgIGNhc2UgREJVU19UWVBFX0JZVEU6CisgICAgICBjYXNlIERCVVNfVFlQRV9CT09MRUFOOgorICAgICAgY2FzZSBEQlVTX1RZUEVfRE9VQkxFOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcGZfa2V5KERCdXNNZXNzYWdlSXRlciAqaXRlciwgY29uc3QgY2hhciAqcGZ4LCBjaGFyICpidWYsIHNpemVfdCBzeikKK3sKKyAgY2hhciAqc3Y7CisgIGRidXNfYm9vbF90IGJ2OworICBkYnVzX2ludDE2X3QgaTE2djsKKyAgZGJ1c19pbnQzMl90IGkzMnY7CisgIGRidXNfaW50NjRfdCBpNjR2OworICBkYnVzX3VpbnQxNl90IHUxNnY7CisgIGRidXNfdWludDMyX3QgdTMydjsKKyAgZGJ1c191aW50NjRfdCB1NjR2OworICB1bnNpZ25lZCBjaGFyIHU4djsKKyAgZG91YmxlIGR2OworCisgIHN3aXRjaCAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKGl0ZXIpKSB7CisgICAgY2FzZSBEQlVTX1RZUEVfU1RSSU5HOgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZzdik7CisgICAgICBzbnByaW50ZihidWYsIHN6LCAiJXMvJXMiLCBwZngsIHN2KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgREJVU19UWVBFX0JPT0xFQU46CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJmJ2KTsKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8lcyIsIHBmeCwgKGJ2ID8gInRydWUiIDogImZhbHNlIikpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBEQlVTX1RZUEVfSU5UMTY6CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJmkxNnYpOworICAgICAgc25wcmludGYoYnVmLCBzeiwgIiVzLyVkIiwgcGZ4LCBpMTZ2KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgREJVU19UWVBFX0lOVDMyOgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZpMzJ2KTsKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8lZCIsIHBmeCwgaTMydik7CisgICAgICBicmVhazsKKyAgICBjYXNlIERCVVNfVFlQRV9JTlQ2NDoKKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyhpdGVyLCAmaTY0dik7CisjaWZkZWYgREJVU19JTlQ2NF9QUklOVEZfQVJHVU1FTlQKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8lIiBEQlVTX0lOVDY0X1BSSU5URl9BUkdVTUVOVCwgcGZ4LCBpNjR2KTsKKyNlbHNlCisgICAgICBzbnByaW50ZihidWYsIHN6LCAiJXMvW2ludDY0XSIsIHBmeCk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGNhc2UgREJVU19UWVBFX1VJTlQxNjoKKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyhpdGVyLCAmdTE2dik7CisgICAgICBzbnByaW50ZihidWYsIHN6LCAiJXMvJXUiLCBwZngsIHUxNnYpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBEQlVTX1RZUEVfVUlOVDMyOgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZ1MzJ2KTsKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8ldSIsIHBmeCwgdTMydik7CisgICAgICBicmVhazsKKyAgICBjYXNlIERCVVNfVFlQRV9VSU5UNjQ6CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJnU2NHYpOworI2lmZGVmIERCVVNfVUlOVDY0X1BSSU5URl9BUkdVTUVOVAorICAgICAgc25wcmludGYoYnVmLCBzeiwgIiVzLyUiIERCVVNfVUlOVDY0X1BSSU5URl9BUkdVTUVOVCwgcGZ4LCB1NjR2KTsKKyNlbHNlCisgICAgICBzbnByaW50ZihidWYsIHN6LCAiJXMvW3VpbnQ2NF0iLCBwZngpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIERCVVNfVFlQRV9CWVRFOgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZ1OHYpOworICAgICAgc25wcmludGYoYnVmLCBzeiwgIiVzLyUwMngiLCBwZngsICh1bnNpZ25lZCBpbnQpdTh2ICYgMHhGRik7CisgICAgICBicmVhazsKKyAgICBjYXNlIERCVVNfVFlQRV9ET1VCTEU6CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJmR2KTsKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8lZyIsIHBmeCwgZHYpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy9bcGYtdW5rbm93bl0iLCBwZngpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfZml4ZWRfaXRlcihEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCwgaW50IGFsbCk7CisKK3N0YXRpYyB2b2lkIHBmX3N0cmluZyhEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKyAgY2hhciAqdmFsOworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJnZhbCk7CisgIHByaW50ZigiJXMlcyVzXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwZl9ib29sZWFuKERCdXNNZXNzYWdlSXRlciAqaXRlciwgY29uc3QgY2hhciAqcGZ4KQoreworICBkYnVzX2Jvb2xfdCBidjsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZidik7CisgIHByaW50ZigiJXMlcyVzXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCAoYnYgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBmX3VpbnQxNihEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKyAgZGJ1c191aW50MTZfdCB1djsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZ1dik7CisgIHByaW50ZigiJXMlcyV1XG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCB1dik7Cit9CisKK3N0YXRpYyB2b2lkIHBmX2ludDE2KERCdXNNZXNzYWdlSXRlciAqaXRlciwgY29uc3QgY2hhciAqcGZ4KQoreworICBkYnVzX2ludDE2X3QgaXY7CisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyhpdGVyLCAmaXYpOworICBwcmludGYoIiVzJXMlZFxuIiwgcGZ4LCBwZnhbMF0gPyAiICIgOiAiIiwgaXYpOworfQorCitzdGF0aWMgdm9pZCBwZl91aW50MzIoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBjb25zdCBjaGFyICpwZngpCit7CisgIGRidXNfdWludDMyX3QgdXY7CisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyhpdGVyLCAmdXYpOworICBwcmludGYoIiVzJXMldVxuIiwgcGZ4LCBwZnhbMF0gPyAiICIgOiAiIiwgdXYpOworfQorCitzdGF0aWMgdm9pZCBwZl9pbnQzMihEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKyAgZGJ1c19pbnQzMl90IGl2OworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJml2KTsKKyAgcHJpbnRmKCIlcyVzJWRcbiIsIHBmeCwgcGZ4WzBdID8gIiAiIDogIiIsIGl2KTsKK30KKworc3RhdGljIHZvaWQgcGZfdWludDY0KERCdXNNZXNzYWdlSXRlciAqaXRlciwgY29uc3QgY2hhciAqcGZ4KQoreworICBkYnVzX3VpbnQ2NF90IHV2OworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJnV2KTsKKyNpZmRlZiBEQlVTX1VJTlQ2NF9QUklOVEZfQVJHVU1FTlQKKyAgcHJpbnRmKCIlcyVzJSIgREJVU19VSU5UNjRfUFJJTlRGX0FSR1VNRU5UICJcbiIsIHBmeCwgcGZ4WzBdID8gIiAiIDogIiIsIHV2KTsKKyNlbHNlCisgIHByaW50ZigiJXMlc1t1aW50NjRdXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwZl9pbnQ2NChEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKyAgZGJ1c19pbnQ2NF90IGl2OworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoaXRlciwgJml2KTsKKyNpZmRlZiBEQlVTX0lOVDY0X1BSSU5URl9BUkdVTUVOVAorICBwcmludGYoIiVzJXMlIiBEQlVTX0lOVDY0X1BSSU5URl9BUkdVTUVOVCAiXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCBpdik7CisjZWxzZQorICBwcmludGYoIiVzJXNbaW50NjRdXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwZl9kb3VibGUoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBjb25zdCBjaGFyICpwZngpCit7CisgIGRvdWJsZSBkdjsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKGl0ZXIsICZkdik7CisgIHByaW50ZigiJXMlcyVnXG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCBkdik7Cit9CisKK3N0YXRpYyB2b2lkIHBmX2J5dGUoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBjb25zdCBjaGFyICpwZngpCit7CisgIHVuc2lnbmVkIGNoYXIgYnY7CisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyhpdGVyLCAmYnYpOworICBwcmludGYoIiVzJXMlMDJ4XG4iLCBwZngsIHBmeFswXSA/ICIgIiA6ICIiLCAodW5zaWduZWQgaW50KWJ2ICYgMHhGRik7Cit9CisKK3N0YXRpYyB2b2lkIHBmX2FycmF5KERCdXNNZXNzYWdlSXRlciAqaXRlciwgY29uc3QgY2hhciAqcGZ4KQoreworICBpbnQgdHlwZTsKKyAgREJ1c01lc3NhZ2VJdGVyIHN1Yml0ZXI7CisgIGNoYXIgbnBmeFtNQVhQRlhdOworICBpbnQgaSA9IDA7CisKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZShpdGVyLCAmc3ViaXRlcik7CisgIHR5cGUgPSBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJnN1Yml0ZXIpOworCisgIHdoaWxlICh0eXBlICE9IERCVVNfVFlQRV9JTlZBTElEKQorICAgIHsKKyAgICAgIHNucHJpbnRmKG5wZngsIHNpemVvZihucGZ4KSwgIiVzLyVkIiwgcGZ4LCBpKTsKKyAgICAgIHByaW50X2ZpeGVkX2l0ZXIoJnN1Yml0ZXIsIG5wZngsIDApOworICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmc3ViaXRlcik7CisgICAgICB0eXBlID0gZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZzdWJpdGVyKTsKKyAgICAgIGkrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBmX3ZhcmlhbnQoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBjb25zdCBjaGFyICpwZngpCit7CisgIERCdXNNZXNzYWdlSXRlciBzdWJpdGVyOworICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKGl0ZXIsICZzdWJpdGVyKTsKKyAgcHJpbnRfZml4ZWRfaXRlcigmc3ViaXRlciwgcGZ4LCAwKTsKK30KKworc3RhdGljIHZvaWQgcGZfZGljdChEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKyAgREJ1c01lc3NhZ2VJdGVyIHN1Yml0ZXI7CisgIGNoYXIgbnBmeFtNQVhQRlhdOworCisgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoaXRlciwgJnN1Yml0ZXIpOworICAvKiBOYXN0eSBoYWNrIHRvIG1ha2Ugc3RyaW5nIC0+IHRoaW5nIGRpY3RzIG1vcmUgcGFyc2VhYmxlLiAqLworICBpZiAocGZfY2FuX3NpbXBsZSgmc3ViaXRlcikpCisgICAgeworICAgICAgcGZfa2V5KCZzdWJpdGVyLCBwZngsIG5wZngsIHNpemVvZihucGZ4KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc25wcmludGYobnBmeCwgTUFYUEZYLCAiJXMvW2NvbXBsZXgta2V5XSIsIHBmeCk7CisgICAgfQorICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZzdWJpdGVyKTsKKyAgcHJpbnRfZml4ZWRfaXRlcigmc3ViaXRlciwgbnBmeCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2ZpeGVkX2l0ZXIoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBjb25zdCBjaGFyICpwZngsIGludCBhbGwpCit7CisgIHN0YXRpYyBzdHJ1Y3QgeworICAgIGludCB0eXBlOworICAgIHZvaWQgKCpmdW5jKShEQnVzTWVzc2FnZUl0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKnBmeCk7CisgIH0gcHJpbnRlcnNbXSA9IHsKKyAgICB7IERCVVNfVFlQRV9TVFJJTkcsIHBmX3N0cmluZyB9LAorICAgIHsgREJVU19UWVBFX0FSUkFZLCBwZl9hcnJheSB9LAorICAgIHsgREJVU19UWVBFX1NUUlVDVCwgcGZfYXJyYXkgfSwgLyogeWVzLCByZWFsbHkuIFRoZXkncmUgaWRlbnRpY2FsLiAqLworICAgIHsgREJVU19UWVBFX1ZBUklBTlQsIHBmX3ZhcmlhbnQgfSwKKyAgICB7IERCVVNfVFlQRV9ESUNUX0VOVFJZLCBwZl9kaWN0IH0sCisgICAgeyBEQlVTX1RZUEVfQk9PTEVBTiwgcGZfYm9vbGVhbiB9LAorICAgIHsgREJVU19UWVBFX1VJTlQzMiwgcGZfdWludDMyIH0sCisgICAgeyBEQlVTX1RZUEVfSU5UMzIsIHBmX2ludDMyIH0sCisgICAgeyBEQlVTX1RZUEVfU0lHTkFUVVJFLCBwZl9zdHJpbmcgfSwKKyAgICB7IERCVVNfVFlQRV9PQkpFQ1RfUEFUSCwgcGZfc3RyaW5nIH0sCisgICAgeyBEQlVTX1RZUEVfSU5UMTYsIHBmX2ludDE2IH0sCisgICAgeyBEQlVTX1RZUEVfVUlOVDE2LCBwZl91aW50MTYgfSwKKyAgICB7IERCVVNfVFlQRV9JTlQ2NCwgcGZfaW50NjQgfSwKKyAgICB7IERCVVNfVFlQRV9VSU5UNjQsIHBmX3VpbnQ2NCB9LAorICAgIHsgREJVU19UWVBFX0RPVUJMRSwgcGZfZG91YmxlIH0sCisgICAgeyBEQlVTX1RZUEVfQllURSwgcGZfYnl0ZSB9LAorICAgIHsgMCwgTlVMTCB9CisgIH07CisgIGludCB0eXBlOworICBpbnQgaTsKKworICBkbworICAgIHsKKyAgICAgIHR5cGUgPSBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoaXRlcik7CisgICAgICBpZiAodHlwZSA9PSBEQlVTX1RZUEVfSU5WQUxJRCkKKyAgICAgICAgcmV0dXJuOworICAgICAgZm9yIChpID0gMDsgcHJpbnRlcnNbaV0uZnVuYzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHByaW50ZXJzW2ldLnR5cGUgPT0gdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcHJpbnRlcnNbaV0uZnVuYyhpdGVyLCBwZngpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKCFwcmludGVyc1tpXS5mdW5jKQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRmKCJwcmludC1maXhlZC1pdGVyOiBubyBpZGVhIHdoYXQgJWQgaXNcbiIsIHR5cGUpOworICAgICAgICB9CisgICAgfQorICB3aGlsZSAoYWxsICYmIGRidXNfbWVzc2FnZV9pdGVyX25leHQoaXRlcikpOworfQorCit2b2lkIHByaW50X21lc3NhZ2VfZml4ZWQoREJ1c01lc3NhZ2UgKm1zZykKK3sKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisgIGludCB0eXBlOworCisgIHR5cGUgPSBkYnVzX21lc3NhZ2VfZ2V0X3R5cGUobXNnKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtc2csICZpdGVyKTsKKyAgcHJpbnRfZml4ZWRfaXRlcigmaXRlciwgIiIsIDEpOworfQorCiBzdGF0aWMgdm9pZAogcHJpbnRfYXkgKERCdXNNZXNzYWdlSXRlciAqaXRlciwgaW50IGRlcHRoKQogewpAQCAtMTg2LDggKzQ0Nyw4IEBACiAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGlwdjY7CiAgIH0gYWRkciwgcGVlcjsKICAgY2hhciBob3N0aXBbSU5FVDZfQUREUlNUUkxFTl07Ci0gIHNvY2tsZW5fdCBhZGRybGVuID0gc2l6ZW9mIChhZGRyKTsKLSAgc29ja2xlbl90IHBlZXJsZW4gPSBzaXplb2YgKHBlZXIpOworICBpbnQgYWRkcmxlbiA9IHNpemVvZiAoYWRkcik7CisgIGludCBwZWVybGVuID0gc2l6ZW9mIChwZWVyKTsKICAgaW50IGhhc19wZWVyOwogCiAgIC8qIERvbid0IHByaW50IHRoZSBmZCBudW1iZXI6IGl0IGlzIGRpZmZlcmVudCBpbiBldmVyeSBwcm9jZXNzIGFuZCBzaW5jZQpAQCAtNDAxLDcgKzY2MiwxMSBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIGRidXNfaW50NjRfdCB2YWw7CiAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMgKGl0ZXIsICZ2YWwpOwotICAgICAgICAgICAgcHJpbnRmICgiaW50NjQgJSIgUFJJZDY0ICJcbiIsIHZhbCk7CisjaWZkZWYgREJVU19JTlQ2NF9QUklOVEZfTU9ESUZJRVIKKyAgICAgICAgcHJpbnRmICgiaW50NjQgJSIgREJVU19JTlQ2NF9QUklOVEZfTU9ESUZJRVIgImRcbiIsIHZhbCk7CisjZWxzZQorICAgICAgICBwcmludGYgKCJpbnQ2NCAob21pdHRlZClcbiIpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAKQEAgLTQwOSw3ICs2NzQsMTEgQEAKICAgICAgICAgICB7CiAgICAgICAgICAgICBkYnVzX3VpbnQ2NF90IHZhbDsKICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYyAoaXRlciwgJnZhbCk7Ci0gICAgICAgICAgICBwcmludGYgKCJ1aW50NjQgJSIgUFJJdTY0ICJcbiIsIHZhbCk7CisjaWZkZWYgREJVU19JTlQ2NF9QUklOVEZfTU9ESUZJRVIKKyAgICAgICAgcHJpbnRmICgidWludDY0ICUiIERCVVNfSU5UNjRfUFJJTlRGX01PRElGSUVSICJ1XG4iLCB2YWwpOworI2Vsc2UKKyAgICAgICAgcHJpbnRmICgidWludDY0IChvbWl0dGVkKVxuIik7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy1wcmludC1tZXNzYWdlLmggYi90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuaAppbmRleCBkNDViYzc5Li45ZjgwMTE2IDEwMDY0NAotLS0gYS90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuaAorKysgYi90b29scy9kYnVzLXByaW50LW1lc3NhZ2UuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgogCit2b2lkIHByaW50X21lc3NhZ2VfZml4ZWQgKERCdXNNZXNzYWdlICptZXNzYWdlKTsKIHZvaWQgcHJpbnRfbWVzc2FnZSAoREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIGRidXNfYm9vbF90IGxpdGVyYWwsIGxvbmcgc2VjLCBsb25nIHVzZWMpOwogCiAjZW5kaWYgLyogREJVU19QUklOVF9NRVNTQUdFX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2RidXMtcnVuLXNlc3Npb24uYyBiL3Rvb2xzL2RidXMtcnVuLXNlc3Npb24uYwppbmRleCAwYWRiNWFkLi4xMDVhYjNiIDEwMDY0NAotLS0gYS90b29scy9kYnVzLXJ1bi1zZXNzaW9uLmMKKysrIGIvdG9vbHMvZGJ1cy1ydW4tc2Vzc2lvbi5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKICNpbmNsdWRlICJkYnVzL2RidXMuaCIKLSNpbmNsdWRlICJkYnVzL2RidXMtaW50ZXJuYWxzLmgiCiAKICNkZWZpbmUgTUFYX0FERFJfTEVOIDUxMgogI2RlZmluZSBQSVBFX1JFQURfRU5EICAwCkBAIC02Niw4ICs2NSw2IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIG1lW10gPSAiZGJ1cy1ydW4tc2Vzc2lvbiI7CiAKLXN0YXRpYyB2b2lkIHVzYWdlIChpbnQgZWNvZGUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB1c2FnZSAoaW50IGVjb2RlKQogewpAQCAtODQsOCArODEsNiBAQAogICBleGl0IChlY29kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHZlcnNpb24gKHZvaWQpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB2ZXJzaW9uICh2b2lkKQogewpAQCAtMTAwLDggKzk1LDYgQEAKICAgZXhpdCAoMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG9vbSAodm9pZCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIG9vbSAodm9pZCkKIHsKQEAgLTE5OCw4ICsxOTEsNiBAQAogICAgICAgICAgICBtZSwgZGJ1c19kYWVtb24sIHN0cmVycm9yIChlcnJubykpOwogfQogCi1zdGF0aWMgdm9pZCBleGVjX2FwcCAoaW50IHByb2dfYXJnLCBjaGFyICoqYXJndikgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIGV4ZWNfYXBwIChpbnQgcHJvZ19hcmcsIGNoYXIgKiphcmd2KQogewpAQCAtMzg3LDkgKzM3OCw2IEBACiAgICAgICAgICAgICAgICBtZSwgc3RyZXJyb3IgKGVycm5vKSk7CiAgICAgICByZXR1cm4gMTI3OwogICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgX2RidXNfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCByZWFkIHJlc3VsdCIpOwogICAgIH0KIAogICBjbG9zZSAoYnVzX2FkZHJlc3NfcGlwZVtQSVBFX1JFQURfRU5EXSk7CmRpZmYgLS1naXQgYS90b29scy9kYnVzLXNlbmQuYyBiL3Rvb2xzL2RidXMtc2VuZC5jCmluZGV4IGVmZWI3NmUuLmVmMGQ2ZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RidXMtc2VuZC5jCisrKyBiL3Rvb2xzL2RidXMtc2VuZC5jCkBAIC00OSwyNiArNDksMTMgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmFwcG5hbWU7CiAKLXN0YXRpYyB2b2lkIHVzYWdlIChpbnQgZWNvZGUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB1c2FnZSAoaW50IGVjb2RlKQogewotICBmcHJpbnRmIChzdGRlcnIsICJVc2FnZTogJXMgWy0taGVscF0gWy0tc3lzdGVtIHwgLS1zZXNzaW9uIHwgLS1idXM9QUREUkVTUyB8IC0tcGVlcj1BRERSRVNTXSBbLS1kZXN0PU5BTUVdIFstLXR5cGU9VFlQRV0gWy0tcHJpbnQtcmVwbHlbPWxpdGVyYWxdXSBbLS1yZXBseS10aW1lb3V0PU1TRUNdIDxkZXN0aW5hdGlvbiBvYmplY3QgcGF0aD4gPG1lc3NhZ2UgbmFtZT4gW2NvbnRlbnRzIC4uLl1cbiIsIGFwcG5hbWUpOworICBmcHJpbnRmIChzdGRlcnIsICJVc2FnZTogJXMgWy0taGVscF0gWy0tc3lzdGVtIHwgLS1zZXNzaW9uIHwgLS1idXM9QUREUkVTUyB8IC0tcGVlcj1BRERSRVNTXSBbLS1kZXN0PU5BTUVdIFstLXR5cGU9VFlQRV0gWy0tcHJpbnQtcmVwbHlbPWxpdGVyYWxdXSBbLS1maXhlZF0gWy0tcmVwbHktdGltZW91dD1NU0VDXSA8ZGVzdGluYXRpb24gb2JqZWN0IHBhdGg+IDxtZXNzYWdlIG5hbWU+IFtjb250ZW50cyAuLi5dXG4iLCBhcHBuYW1lKTsKICAgZXhpdCAoZWNvZGUpOwogfQogCi0vKiBBYm9ydCBvbiBhbnkgYWxsb2NhdGlvbiBmYWlsdXJlOyB0aGVyZSBpcyBub3RoaW5nIGVsc2Ugd2UgY2FuIGRvLiAqLwotc3RhdGljIHZvaWQKLWhhbmRsZV9vb20gKGRidXNfYm9vbF90IHN1Y2Nlc3MpCi17Ci0gIGlmICghc3VjY2VzcykKLSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogUmFuIG91dCBvZiBtZW1vcnlcbiIsIGFwcG5hbWUpOwotICAgICAgZXhpdCAoMSk7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZAogYXBwZW5kX2FyZyAoREJ1c01lc3NhZ2VJdGVyICppdGVyLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpCiB7CkBAIC04MSw2OCArNjgsNjggQEAKICAgZG91YmxlIGQ7CiAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKICAgZGJ1c19ib29sX3Qgdl9CT09MRUFOOwotICBkYnVzX2Jvb2xfdCByZXQ7Ci0KKyAgCisgIC8qIEZJWE1FIC0gd2UgYXJlIGlnbm9yaW5nIE9PTSByZXR1cm5zIG9uIGFsbCB0aGVzZSBmdW5jdGlvbnMgKi8KICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICBjYXNlIERCVVNfVFlQRV9CWVRFOgogICAgICAgYnl0ZSA9IHN0cnRvdWwgKHZhbHVlLCBOVUxMLCAwKTsKLSAgICAgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX0JZVEUsICZieXRlKTsKKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX0JZVEUsICZieXRlKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEQlVTX1RZUEVfRE9VQkxFOgogICAgICAgZCA9IHN0cnRvZCAodmFsdWUsIE5VTEwpOwotICAgICAgcmV0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfRE9VQkxFLCAmZCk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9ET1VCTEUsICZkKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEQlVTX1RZUEVfSU5UMTY6CiAgICAgICBpbnQxNiA9IHN0cnRvbCAodmFsdWUsIE5VTEwsIDApOwotICAgICAgcmV0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfSU5UMTYsICZpbnQxNik7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9JTlQxNiwgJmludDE2KTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEQlVTX1RZUEVfVUlOVDE2OgogICAgICAgdWludDE2ID0gc3RydG91bCAodmFsdWUsIE5VTEwsIDApOwotICAgICAgcmV0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfVUlOVDE2LCAmdWludDE2KTsKKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX1VJTlQxNiwgJnVpbnQxNik7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgREJVU19UWVBFX0lOVDMyOgogICAgICAgaW50MzIgPSBzdHJ0b2wgKHZhbHVlLCBOVUxMLCAwKTsKLSAgICAgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX0lOVDMyLCAmaW50MzIpOworICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfSU5UMzIsICZpbnQzMik7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgREJVU19UWVBFX1VJTlQzMjoKICAgICAgIHVpbnQzMiA9IHN0cnRvdWwgKHZhbHVlLCBOVUxMLCAwKTsKLSAgICAgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX1VJTlQzMiwgJnVpbnQzMik7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9VSU5UMzIsICZ1aW50MzIpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERCVVNfVFlQRV9JTlQ2NDoKICAgICAgIGludDY0ID0gc3RydG9sbCAodmFsdWUsIE5VTEwsIDApOwotICAgICAgcmV0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfSU5UNjQsICZpbnQ2NCk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9JTlQ2NCwgJmludDY0KTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEQlVTX1RZUEVfVUlOVDY0OgogICAgICAgdWludDY0ID0gc3RydG91bGwgKHZhbHVlLCBOVUxMLCAwKTsKLSAgICAgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX1VJTlQ2NCwgJnVpbnQ2NCk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9VSU5UNjQsICZ1aW50NjQpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERCVVNfVFlQRV9TVFJJTkc6Ci0gICAgICByZXQgPSBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9TVFJJTkcsICZ2YWx1ZSk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9TVFJJTkcsICZ2YWx1ZSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgREJVU19UWVBFX09CSkVDVF9QQVRIOgotICAgICAgcmV0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZ2YWx1ZSk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKGl0ZXIsIERCVVNfVFlQRV9PQkpFQ1RfUEFUSCwgJnZhbHVlKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEQlVTX1RZUEVfQk9PTEVBTjoKICAgICAgIGlmIChzdHJjbXAgKHZhbHVlLCAidHJ1ZSIpID09IDApCiAJewogCSAgdl9CT09MRUFOID0gVFJVRTsKLQkgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX0JPT0xFQU4sICZ2X0JPT0xFQU4pOworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZfQk9PTEVBTik7CiAJfQogICAgICAgZWxzZSBpZiAoc3RyY21wICh2YWx1ZSwgImZhbHNlIikgPT0gMCkKIAl7CiAJICB2X0JPT0xFQU4gPSBGQUxTRTsKLQkgIHJldCA9IGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoaXRlciwgREJVU19UWVBFX0JPT0xFQU4sICZ2X0JPT0xFQU4pOworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljIChpdGVyLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZfQk9PTEVBTik7CiAJfQogICAgICAgZWxzZQogCXsKQEAgLTE1NSw0NCArMTQyLDEwMiBAQAogICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAlY1xuIiwgYXBwbmFtZSwgKGNoYXIpIHR5cGUpOwogICAgICAgZXhpdCAoMSk7CiAgICAgfQorfQogCi0gIGhhbmRsZV9vb20gKHJldCk7CisvLyBOb3RlOiBidWZmZXIgbXVzdCBiZSBwcmUtYWxsb2NhdGVkIGFuZCBhdCBsZWFzdCBhcyBiaWcgYXMgc3RyLgorc3RhdGljIGludAorZ2V0X25leHRfdG9rZW4gKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvYywgY2hhciAqYnVmZmVyKQoreworICBpbnQgc3RyX2luZGV4LCBidWZmZXJfaW5kZXggPSAwOworCisgIGVudW0gU3RhdGUge1NUQVJULCBFU0NBUEV9OworICBlbnVtIFN0YXRlIHN0YXRlID0gU1RBUlQ7CisKKyAgZm9yIChzdHJfaW5kZXggPSBsb2M7IHN0cltzdHJfaW5kZXhdICE9ICdcMCc7IHN0cl9pbmRleCsrKQorICAgIHsKKyAgICAgIGlmIChzdGF0ZSA9PSBTVEFSVCkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoc3RyW3N0cl9pbmRleF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEVTQ0FQRTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAvLyBJZiB3ZSBoaXQgYSAsIGluIHRoZSBzdGFydCBzdGF0ZSwgd2Ugc2hvdWxkIHRyZWF0IGl0IGFzCisgICAgICAgICAgICAgIC8vIGFuIGFyZ3VtZW50IHNlcGFyYXRvciBzaW5jZSBpdCdzIG5vdCBlc2NhcGVkLgorICAgICAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX2luZGV4XSA9ICdcMCc7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cl9pbmRleCArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0YXRlID09IEVTQ0FQRSkKKyAgICAgICAgeworICAgICAgICAgIC8vIElmIHRoZSBcIGRvZXNuJ3QgaW1tZWRpYXRlbHkgcHJlY2VkZSBhICwgb3IgYW5vdGhlciBcLCB0aGVuCisgICAgICAgICAgLy8gaXQncyBub3QgYmVpbmcgdXNlZCBhcyBhbiBlc2NhcGUgY2hhcmFjdGVyLgorICAgICAgICAgIC8vIFNpbWlsYXJseSwgaWYgd2UgaGF2ZSBhIHN0cmluZyBvZiBtdWx0aXBsZSBccyBhcyB0aGUgbGFzdAorICAgICAgICAgIC8vIGNoYXJhY3RlcnMsIHRoZW4gdGhleSdyZSBhbHNvIG5vdCBiZWluZyB1c2VkIGFzIGVzY2FwZSBjaGFyYWN0ZXJzLgorICAgICAgICAgIGlmICgoc3RyW3N0cl9pbmRleF0gIT0gJywnICYmIHN0cltzdHJfaW5kZXhdICE9ICdcXCcpIHx8CisgICAgICAgICAgICAgIChzdHJbc3RyX2luZGV4XSA9PSAnXFwnICYmIHN0cltzdHJfaW5kZXggKyAxXSA9PSAnXDAnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9pbmRleF0gPSAnXFwnOworICAgICAgICAgICAgICBidWZmZXJfaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHN0YXRlID0gU1RBUlQ7CisgICAgICAgIH0KKworICAgICAgYnVmZmVyW2J1ZmZlcl9pbmRleF0gPSBzdHJbc3RyX2luZGV4XTsKKyAgICAgIGJ1ZmZlcl9pbmRleCsrOworICAgIH0KKworICAvLyBJZiB3ZSBlbmQgb24gYSBzaW5nbGUgXCwgdGhlbiBpdCdzIG5vdCBiZWluZyB1c2VkIGFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIuCisgIC8vIE5vdGUgdGhlIGVhcmxpZXIgY2hlY2sgd2lsbCBvbmx5IGNhdGNoIGlmIHdlIGVuZCBvbiBhIHN0cmluZyBvZiBtdWx0aXBsZQorICAvLyBccy4KKyAgaWYgKHN0YXRlID09IEVTQ0FQRSkKKyAgICB7CisgICAgICBidWZmZXJbYnVmZmVyX2luZGV4XSA9ICdcXCc7CisgICAgICBidWZmZXJfaW5kZXgrKzsKKyAgICB9CisgIGJ1ZmZlcltidWZmZXJfaW5kZXhdID0gJ1wwJzsKKworICByZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyB2b2lkCiBhcHBlbmRfYXJyYXkgKERCdXNNZXNzYWdlSXRlciAqaXRlciwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnZhbHVlKQogewotICBjb25zdCBjaGFyICp2YWw7Ci0gIGNoYXIgKmR1cHZhbCA9IHN0cmR1cCAodmFsdWUpOworICBjaGFyICpidWZmZXIgPSBzdHJkdXAgKHZhbHVlKTsKIAotICBoYW5kbGVfb29tIChkdXB2YWwgIT0gTlVMTCk7Ci0KLSAgdmFsID0gc3RydG9rIChkdXB2YWwsICIsIik7Ci0gIHdoaWxlICh2YWwgIT0gTlVMTCkKKyAgaW50IGxvYyA9IDA7CisgIHdoaWxlIChsb2MgPj0gMCkKICAgICB7Ci0gICAgICBhcHBlbmRfYXJnIChpdGVyLCB0eXBlLCB2YWwpOwotICAgICAgdmFsID0gc3RydG9rIChOVUxMLCAiLCIpOworICAgICAgbG9jID0gZ2V0X25leHRfdG9rZW4gKHZhbHVlLCBsb2MsIGJ1ZmZlcik7CisKKyAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBlbXB0eSBzdHJpbmdzLCBldmVuIGlmIHRoZXJlIGFyZQorICAgICAgLy8gc2V2ZXJhbCBjb21tYXMgZGlyZWN0bHkgYmVzaWRlIGVhY2ggb3RoZXIuCisgICAgICBpZiAoYnVmZmVyWzBdICE9ICdcMCcpCisgICAgICAgIGFwcGVuZF9hcmcgKGl0ZXIsIHR5cGUsIGJ1ZmZlcik7CiAgICAgfQotICBmcmVlIChkdXB2YWwpOworICBmcmVlIChidWZmZXIpOwogfQogCitzdGF0aWMgaW50IHR5cGVfZnJvbV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCiBzdGF0aWMgdm9pZAogYXBwZW5kX2RpY3QgKERCdXNNZXNzYWdlSXRlciAqaXRlciwgaW50IGtleXR5cGUsIGludCB2YWx0eXBlLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKICAgY29uc3QgY2hhciAqdmFsOwogICBjaGFyICpkdXB2YWwgPSBzdHJkdXAgKHZhbHVlKTsKIAotICBoYW5kbGVfb29tIChkdXB2YWwgIT0gTlVMTCk7Ci0KICAgdmFsID0gc3RydG9rIChkdXB2YWwsICIsIik7CiAgIHdoaWxlICh2YWwgIT0gTlVMTCkKICAgICB7CiAgICAgICBEQnVzTWVzc2FnZUl0ZXIgc3ViaXRlcjsKICAgICAgIAotICAgICAgaGFuZGxlX29vbSAoZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKGl0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0RJQ1RfRU5UUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViaXRlcikpOworICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKGl0ZXIsCisJCQkJCURCVVNfVFlQRV9ESUNUX0VOVFJZLAorCQkJCQlOVUxMLAorCQkJCQkmc3ViaXRlcik7CiAKICAgICAgIGFwcGVuZF9hcmcgKCZzdWJpdGVyLCBrZXl0eXBlLCB2YWwpOwogICAgICAgdmFsID0gc3RydG9rIChOVUxMLCAiLCIpOwpAQCAtMjAxLDkgKzI0NiwzMiBAQAogCSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IE1hbGZvcm1lZCBkaWN0aW9uYXJ5XG4iLCBhcHBuYW1lKTsKIAkgIGV4aXQgKDEpOwogCX0KLSAgICAgIGFwcGVuZF9hcmcgKCZzdWJpdGVyLCB2YWx0eXBlLCB2YWwpOworICAgICAgaWYgKHZhbHR5cGUgPT0gREJVU19UWVBFX1ZBUklBTlQpCisgICAgICAgIHsKKwkgIGNoYXIgc2lnWzJdOworCSAgY2hhciAqYyA9IHN0cmNocih2YWwsICc6Jyk7CisJICBpZiAoIWMpCisJICAgIHsKKwkgICAgICBmcHJpbnRmIChzdGRlcnIsICJNaXNzaW5nIHR5cGUgaW4gdmFyaWFudCBkaWN0XG4iKTsKKwkgICAgICBleGl0ICgxKTsKKwkgICAgfQorCSAgKihjKyspID0gJ1wwJzsKKwkgIHNpZ1swXSA9IHR5cGVfZnJvbV9uYW1lKHZhbCk7CisJICBzaWdbMV0gPSAnXDAnOworCSAgREJ1c01lc3NhZ2VJdGVyIHN1YnN1Yml0ZXI7CisJICBkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJnN1Yml0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1ZBUklBTlQsCisJCQkJCSAgICBzaWcsCisJCQkJCSAgICAmc3Vic3ViaXRlcik7CisJICBhcHBlbmRfYXJnKCZzdWJzdWJpdGVyLCBzaWdbMF0sIGMpOworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmc3ViaXRlciwgJnN1YnN1Yml0ZXIpOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgYXBwZW5kX2FyZyAoJnN1Yml0ZXIsIHZhbHR5cGUsIHZhbCk7CisJfQogCi0gICAgICBoYW5kbGVfb29tIChkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKGl0ZXIsICZzdWJpdGVyKSk7CisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIgKGl0ZXIsICZzdWJpdGVyKTsKICAgICAgIHZhbCA9IHN0cnRvayAoTlVMTCwgIiwiKTsKICAgICB9IAogICBmcmVlIChkdXB2YWwpOwpAQCAtMjYxLDggKzMyOSwxMCBAQAogICBpbnQgbWVzc2FnZV90eXBlID0gREJVU19NRVNTQUdFX1RZUEVfU0lHTkFMOwogICBjb25zdCBjaGFyICp0eXBlX3N0ciA9IE5VTEw7CiAgIGNvbnN0IGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICBjb25zdCBjaGFyICpzZW5kZXIgPSBOVUxMOwogICBpbnQgaXNfYnVzID0gRkFMU0U7CiAgIGludCBzZXNzaW9uX29yX3N5c3RlbSA9IEZBTFNFOworICBpbnQgZml4ZWQgPSAwOwogCiAgIGFwcG5hbWUgPSBhcmd2WzBdOwogICAKQEAgLTI4OSwxNyArMzU5LDE0IEBACiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKChzdHJzdHIgKGFyZywgIi0tYnVzPSIpID09IGFyZykgfHwgKHN0cnN0ciAoYXJnLCAiLS1wZWVyPSIpID09IGFyZykgfHwgKHN0cnN0ciAoYXJnLCAiLS1hZGRyZXNzPSIpID09IGFyZykpCiAgICAgICAgIHsKLSAgICAgICAgICAvKiBDaGVjayBmb3IgcGVlciBmaXJzdCwgdG8gYXZvaWQgdGhlIEdDQyAtV2R1cGxpY2F0ZWQtYnJhbmNoZXMKLSAgICAgICAgICAgKiB3YXJuaW5nLgotICAgICAgICAgICAqLwotICAgICAgICAgIGlmIChhcmdbMl0gPT0gJ3AnKSAvKiBwZWVyICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlzX2J1cyA9IEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYgKGFyZ1syXSA9PSAnYicpIC8qIGJ1cyAqLworICAgICAgICAgIGlmIChhcmdbMl0gPT0gJ2InKSAvKiBidXMgKi8KICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaXNfYnVzID0gVFJVRTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmdbMl0gPT0gJ3AnKSAvKiBwZWVyICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlzX2J1cyA9IEZBTFNFOworICAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgLyogYWRkcmVzczsga2VlcGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpc19idXMgPSBGQUxTRTsKQEAgLTMxMyw2ICszODAsMTYgQEAKICAgICAgICAgICAgICAgdXNhZ2UgKDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJzdHIgKGFyZywgIi0tc2VuZGVyPSIpID09IGFyZykKKyAgICAgICAgeworICAgICAgICAgIHNlbmRlciA9IHN0cmNociAoYXJnLCAnPScpICsgMTsKKworICAgICAgICAgIGlmIChzZW5kZXJbMF0gPT0gJ1wwJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXCItLXNlbmRlcj1cIiByZXF1aXJlcyBhIE5BTUVcbiIpOworICAgICAgICAgICAgICB1c2FnZSAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKGFyZywgIi0tcHJpbnQtcmVwbHkiLCAxMykgPT0gMCkKIAl7CiAJICBwcmludF9yZXBseSA9IFRSVUU7CkBAIC0zNTQsNiArNDMxLDggQEAKIAl0eXBlX3N0ciA9IHN0cmNociAoYXJnLCAnPScpICsgMTsKICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCiAJdXNhZ2UgKDApOworICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpeGVkIikpCisgICAgICAgIGZpeGVkID0gMTsKICAgICAgIGVsc2UgaWYgKGFyZ1swXSA9PSAnLScpCiAJdXNhZ2UgKDEpOwogICAgICAgZWxzZSBpZiAocGF0aCA9PSBOVUxMKQpAQCAtNDIxLDYgKzUwMCwyNyBAQAogICAgICAgICB9CiAgICAgfQogCisgIGlmIChzZW5kZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBzd2l0Y2goZGJ1c19idXNfcmVxdWVzdF9uYW1lIChjb25uZWN0aW9uLCBzZW5kZXIsIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSwgJmVycm9yKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIERCVVNfUkVRVUVTVF9OQU1FX1JFUExZX1BSSU1BUllfT1dORVI6CisgICAgICAgICAgLyogc3VjY2VzcyAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERCVVNfUkVRVUVTVF9OQU1FX1JFUExZX0VYSVNUUzoKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJSZXF1ZXN0ZWQgbmFtZSBcIiVzXCIgYWxyZWFkeSBoYXMgb3duZXJcbiIsIHNlbmRlcik7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIGNhc2UgLTE6CisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHJlcXVlc3Qgc2VuZGVyIG5hbWUgXCIlc1wiOiAlc1xuIiwgc2VuZGVyLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSB1bnJlYWNoYWJsZSBpZiB0aGUgYnVzIGlzIGNvbXBsaWFudCAqLworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJlcXVlc3Qgb2Ygc2VuZGVyIG5hbWUgZmFpbGVkIHVuZXhwZWN0ZWRseVxuIik7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKyAgICB9CisKICAgaWYgKG1lc3NhZ2VfdHlwZSA9PSBEQlVTX01FU1NBR0VfVFlQRV9NRVRIT0RfQ0FMTCkKICAgICB7CiAgICAgICBjaGFyICpsYXN0X2RvdDsKQEAgLTQzOCw3ICs1MzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2RvdCArIDEpOwotICAgICAgaGFuZGxlX29vbSAobWVzc2FnZSAhPSBOVUxMKTsKICAgICAgIGRidXNfbWVzc2FnZV9zZXRfYXV0b19zdGFydCAobWVzc2FnZSwgVFJVRSk7CiAgICAgfQogICBlbHNlIGlmIChtZXNzYWdlX3R5cGUgPT0gREJVU19NRVNTQUdFX1RZUEVfU0lHTkFMKQpAQCAtNDU1LDcgKzU1NCw2IEBACiAgICAgICAqbGFzdF9kb3QgPSAnXDAnOwogICAgICAgCiAgICAgICBtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwgKHBhdGgsIG5hbWUsIGxhc3RfZG90ICsgMSk7Ci0gICAgICBoYW5kbGVfb29tIChtZXNzYWdlICE9IE5VTEwpOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAgLTQ4MSwxNCArNTc5LDEzIEBACiAgICAgewogICAgICAgY2hhciAqYXJnOwogICAgICAgY2hhciAqYzsKLSAgICAgIGludCB0eXBlMjsKKyAgICAgIGludCB0eXBlOwogICAgICAgaW50IHNlY29uZGFyeV90eXBlOwogICAgICAgaW50IGNvbnRhaW5lcl90eXBlOwogICAgICAgREJ1c01lc3NhZ2VJdGVyICp0YXJnZXRfaXRlcjsKICAgICAgIERCdXNNZXNzYWdlSXRlciBjb250YWluZXJfaXRlcjsKIAotICAgICAgdHlwZTIgPSBEQlVTX1RZUEVfSU5WQUxJRDsKLSAgICAgIHNlY29uZGFyeV90eXBlID0gREJVU19UWVBFX0lOVkFMSUQ7CisgICAgICB0eXBlID0gREJVU19UWVBFX0lOVkFMSUQ7CiAgICAgICBhcmcgPSBhcmd2W2krK107CiAgICAgICBjID0gc3RyY2hyIChhcmcsICc6Jyk7CiAKQEAgLTUyMiw5ICs2MTksOSBAQAogCX0KIAogICAgICAgaWYgKGFyZ1swXSA9PSAwKQotCXR5cGUyID0gREJVU19UWVBFX1NUUklORzsKKwl0eXBlID0gREJVU19UWVBFX1NUUklORzsKICAgICAgIGVsc2UKLQl0eXBlMiA9IHR5cGVfZnJvbV9uYW1lIChhcmcpOworCXR5cGUgPSB0eXBlX2Zyb21fbmFtZSAoYXJnKTsKIAogICAgICAgaWYgKGNvbnRhaW5lcl90eXBlID09IERCVVNfVFlQRV9ESUNUX0VOVFJZKQogCXsKQEAgLTUzNywyNyArNjM0LDMxIEBACiAJICAgICAgZXhpdCAoMSk7CiAJICAgIH0KIAkgICooYysrKSA9IDA7Ci0JICBzZWNvbmRhcnlfdHlwZSA9IHR5cGVfZnJvbV9uYW1lIChhcmcpOworCSAgaWYgKCFzdHJjbXAoYXJnLCAidmFyaWFudCIpKQorCSAgICAvKiBIYWNrOiBzdXBwb3J0IHZhcmlhbnQgdmFsdWVzIGZvciBkaWN0aW9uYXJpZXMuICovCisJICAgIHNlY29uZGFyeV90eXBlID0gREJVU19UWVBFX1ZBUklBTlQ7CisJICBlbHNlCisJICAgIHNlY29uZGFyeV90eXBlID0gdHlwZV9mcm9tX25hbWUgKGFyZyk7CiAJICBzaWdbMF0gPSBEQlVTX0RJQ1RfRU5UUllfQkVHSU5fQ0hBUjsKLQkgIHNpZ1sxXSA9IHR5cGUyOworCSAgc2lnWzFdID0gdHlwZTsKIAkgIHNpZ1syXSA9IHNlY29uZGFyeV90eXBlOwogCSAgc2lnWzNdID0gREJVU19ESUNUX0VOVFJZX0VORF9DSEFSOwogCSAgc2lnWzRdID0gJ1wwJzsKLSAgICAgICAgICBoYW5kbGVfb29tIChkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lciAoJml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9BUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyX2l0ZXIpKTsKKwkgIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmaXRlciwKKwkJCQkJICAgIERCVVNfVFlQRV9BUlJBWSwKKwkJCQkJICAgIHNpZywKKwkJCQkJICAgICZjb250YWluZXJfaXRlcik7CiAJICB0YXJnZXRfaXRlciA9ICZjb250YWluZXJfaXRlcjsKIAl9CiAgICAgICBlbHNlIGlmIChjb250YWluZXJfdHlwZSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkKIAl7CiAJICBjaGFyIHNpZ1syXTsKLQkgIHNpZ1swXSA9IHR5cGUyOworCSAgc2lnWzBdID0gdHlwZTsKIAkgIHNpZ1sxXSA9ICdcMCc7Ci0gICAgICAgICAgaGFuZGxlX29vbSAoZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKCZpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyX2l0ZXIpKTsKKwkgIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmaXRlciwKKwkJCQkJICAgIGNvbnRhaW5lcl90eXBlLAorCQkJCQkgICAgc2lnLAorCQkJCQkgICAgJmNvbnRhaW5lcl9pdGVyKTsKIAkgIHRhcmdldF9pdGVyID0gJmNvbnRhaW5lcl9pdGVyOwogCX0KICAgICAgIGVsc2UKQEAgLTU2NSwyMCArNjY2LDE5IEBACiAKICAgICAgIGlmIChjb250YWluZXJfdHlwZSA9PSBEQlVTX1RZUEVfQVJSQVkpCiAJewotCSAgYXBwZW5kX2FycmF5ICh0YXJnZXRfaXRlciwgdHlwZTIsIGMpOworCSAgYXBwZW5kX2FycmF5ICh0YXJnZXRfaXRlciwgdHlwZSwgYyk7CiAJfQogICAgICAgZWxzZSBpZiAoY29udGFpbmVyX3R5cGUgPT0gREJVU19UWVBFX0RJQ1RfRU5UUlkpCiAJewotCSAgX2RidXNfYXNzZXJ0IChzZWNvbmRhcnlfdHlwZSAhPSBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JICBhcHBlbmRfZGljdCAodGFyZ2V0X2l0ZXIsIHR5cGUyLCBzZWNvbmRhcnlfdHlwZSwgYyk7CisJICBhcHBlbmRfZGljdCAodGFyZ2V0X2l0ZXIsIHR5cGUsIHNlY29uZGFyeV90eXBlLCBjKTsKIAl9CiAgICAgICBlbHNlCi0JYXBwZW5kX2FyZyAodGFyZ2V0X2l0ZXIsIHR5cGUyLCBjKTsKKwlhcHBlbmRfYXJnICh0YXJnZXRfaXRlciwgdHlwZSwgYyk7CiAKICAgICAgIGlmIChjb250YWluZXJfdHlwZSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkKIAl7Ci0gICAgICAgICAgaGFuZGxlX29vbSAoZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb250YWluZXJfaXRlcikpOworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmaXRlciwKKwkJCQkJICAgICAmY29udGFpbmVyX2l0ZXIpOwogCX0KICAgICB9CiAKQEAgLTYwMyw3ICs3MDMsMTAgQEAKICAgICAgICAgICBsb25nIHNlYywgdXNlYzsKIAogICAgICAgICAgIF9kYnVzX2dldF9yZWFsX3RpbWUgKCZzZWMsICZ1c2VjKTsKLSAgICAgICAgICBwcmludF9tZXNzYWdlIChyZXBseSwgcHJpbnRfcmVwbHlfbGl0ZXJhbCwgc2VjLCB1c2VjKTsKKyAgICAgICAgICBpZiAoZml4ZWQpCisgICAgICAgICAgICBwcmludF9tZXNzYWdlX2ZpeGVkIChyZXBseSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRfbWVzc2FnZSAocmVwbHksIHByaW50X3JlcGx5X2xpdGVyYWwsIHNlYywgdXNlYyk7CiAgICAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS90b29scy9kYnVzLXNwYW0uYyBiL3Rvb2xzL2RidXMtc3BhbS5jCmluZGV4IDE5MjkxMWMuLmM3OGQ4ZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RidXMtc3BhbS5jCisrKyBiL3Rvb2xzL2RidXMtc3BhbS5jCkBAIC0zNSw4ICszNSw2IEBACiAKIHN0YXRpYyBkYnVzX2Jvb2xfdCBpZ25vcmVfZXJyb3JzID0gRkFMU0U7CiAKLXN0YXRpYyB2b2lkIHVzYWdlIChpbnQgZWNvZGUpIF9EQlVTX0dOVUNfTk9SRVRVUk47Ci0KIHN0YXRpYyB2b2lkCiB1c2FnZSAoaW50IGVjb2RlKQogewpAQCAtMTc5LDE3ICsxNzcsNiBAQAogICAgIHsKICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKLSAgICAgIGlmIChwYXlsb2FkICE9IE5VTEwgJiYKLSAgICAgICAgICAoc3Ryc3RyIChhcmcsICItLXBheWxvYWQ9IikgPT0gYXJnIHx8Ci0gICAgICAgICAgIHN0cmNtcCAoYXJnLCAiLS1zdGRpbiIpID09IDAgfHwKLSAgICAgICAgICAgc3RyY21wIChhcmcsICItLW1lc3NhZ2Utc3RkaW4iKSA9PSAwIHx8Ci0gICAgICAgICAgIHN0cmNtcCAoYXJnLCAiLS1yYW5kb20tc2l6ZSIpID09IDApKQotICAgICAgICB7Ci0gICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQXQgbW9zdCBvbmUgb2YgLS1wYXlsb2FkLCAtLXN0ZGluLCAtLW1lc3NhZ2Utc3RkaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCAtLXJhbmRvbS1zaXplIG1heSBiZSBzcGVjaWZpZWRcblxuIik7Ci0gICAgICAgICAgdXNhZ2UgKDIpOwotICAgICAgICB9Ci0KICAgICAgIGlmIChzdHJjbXAgKGFyZywgIi0tc3lzdGVtIikgPT0gMCkKICAgICAgICAgewogICAgICAgICAgIHR5cGUgPSBEQlVTX0JVU19TWVNURU07CkBAIC0yNTgsNyArMjQ1LDcgQEAKICAgICAgICAgICAgICAgbl9yYW5kb21fc2l6ZXMrKzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgIHJhbmRvbV9zaXplcyA9IGRidXNfbmV3MCAodW5zaWduZWQgaW50LCBuX3JhbmRvbV9zaXplcyk7CisgICAgICAgICAgcmFuZG9tX3NpemVzID0gZGJ1c19uZXcwIChpbnQsIG5fcmFuZG9tX3NpemVzKTsKIAogICAgICAgICAgIGlmIChyYW5kb21fc2l6ZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHRvb2xfb29tICgiYWxsb2NhdGluZyBhcnJheSBvZiBtZXNzYWdlIGxlbmd0aHMiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2RidXMtdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQuYyBiL3Rvb2xzL2RidXMtdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQuYwppbmRleCA0NTJlNTA1Li4xNjBhYzVkIDEwMDY0NAotLS0gYS90b29scy9kYnVzLXVwZGF0ZS1hY3RpdmF0aW9uLWVudmlyb25tZW50LmMKKysrIGIvdG9vbHMvZGJ1cy11cGRhdGUtYWN0aXZhdGlvbi1lbnZpcm9ubWVudC5jCkBAIC02MiwxMiArNjIsOSBAQAogI2lmZGVmIERCVVNfV0lOCiAvKiBUaGUgV2luZG93cyBDIHJ1bnRpbWUgdXNlcyBhIGRpZmZlcmVudCBuYW1lICovCiAjZGVmaW5lIGVudmlyb24gX2Vudmlyb24KLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQotIyBpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgotIyBkZWZpbmUgZW52aXJvbiAoKl9OU0dldEVudmlyb24gKCkpCi0jZWxpZiBIQVZFX0RFQ0xfRU5WSVJPTiAmJiBkZWZpbmVkKEhBVkVfVU5JU1REX0gpCi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2Vsc2UKKy8qIGFwcGFyZW50bHkgdGhpcyBpcyB0aGUgcG9ydGFibGUgd2F5IHRvIGdldCB0aGUgZW50aXJlIGVudmlyb25tZW50Li4uCisgKiBHTlUgcGxhdGZvcm1zIGFsc28gcHV0IGl0IGluIHVuaXN0ZC5oIGJ1dCB0aGF0J3Mgbm90IHBvcnRhYmxlICovCiBleHRlcm4gY2hhciAqKmVudmlyb247CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvdG9vbHMvZGJ1cy11dWlkZ2VuLmMgYi90b29scy9kYnVzLXV1aWRnZW4uYwppbmRleCAzMzdiZGQwLi4wM2NlNTUzIDEwMDY0NAotLS0gYS90b29scy9kYnVzLXV1aWRnZW4uYworKysgYi90b29scy9kYnVzLXV1aWRnZW4uYwpAQCAtMjcsMTEgKzI3LDggQEAKICNpbmNsdWRlIDxkYnVzL2RidXMtdXVpZGdlbi5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgogCi1zdGF0aWMgdm9pZCB1c2FnZSAoY29uc3QgY2hhciAqbmFtZSwgaW50IGVjb2RlKSBfREJVU19HTlVDX05PUkVUVVJOOwotCiBzdGF0aWMgdm9pZAotdXNhZ2UgKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgaW50IGVjb2RlKQordXNhZ2UgKGNoYXIgKm5hbWUsIGludCBlY29kZSkKIHsKICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICBuYW1lID0gImRidXMtdXVpZGdlbiI7CkBAIC00MCw4ICszNyw2IEBACiAgIGV4aXQgKGVjb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgdmVyc2lvbiAodm9pZCkgX0RCVVNfR05VQ19OT1JFVFVSTjsKLQogc3RhdGljIHZvaWQKIHZlcnNpb24gKHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy9sY292LmFtIGIvdG9vbHMvbGNvdi5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzM0ODY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGNvdi5hbQpAQCAtMCwwICsxLDQzIEBACisjIENvcHlyaWdodCDCqSAyMDA4LTIwMTEgQ29sbGFib3JhIEx0ZC4KKyMgQ29weXJpZ2h0IMKpIDIwMDgtMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyMgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisjICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyMgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisjIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyMgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorIyBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorIyBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworbGNvdi1yZXNldDoKKwlsY292IC0tZGlyZWN0b3J5IEBhYnNfdG9wX2J1aWxkZGlyQCAtLXplcm9jb3VudGVycworCitsY292LXJlcG9ydDoKKwlsY292IC0tZGlyZWN0b3J5IEBhYnNfdG9wX2J1aWxkZGlyQCAtLWNhcHR1cmUgXAorCQktLW91dHB1dC1maWxlIEBhYnNfdG9wX2J1aWxkZGlyQC9sY292LmluZm8KKwkkKG1rZGlyX3ApIEBhYnNfdG9wX2J1aWxkZGlyQC9sY292Lmh0bWwKKwlnaXRfY29tbWl0PWBHSVRfRElSPUBhYnNfdG9wX3NyY2RpckAvLmdpdCBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolaCAyPi9kZXYvbnVsbGA7XAorCWdlbmh0bWwgLS10aXRsZSAiQFBBQ0tBR0VfU1RSSU5HQCAkJGdpdF9jb21taXQiIFwKKwkJLS1vdXRwdXQtZGlyZWN0b3J5IEBhYnNfdG9wX2J1aWxkZGlyQC9sY292Lmh0bWwgbGNvdi5pbmZvCisJQGVjaG8KKwlAZWNobyAnbGNvdiByZXBvcnQgY2FuIGJlIGZvdW5kIGluOicKKwlAZWNobyAnZmlsZTovL0BhYnNfdG9wX2J1aWxkZGlyQC9sY292Lmh0bWwvaW5kZXguaHRtbCcKKwlAZWNobworCitsY292LWNoZWNrOgorCSQoTUFLRSkgbGNvdi1yZXNldAorCSQoTUFLRSkgY2hlY2sgJChMQ09WX0NIRUNLX0FSR1MpCisJJChNQUtFKSBsY292LXJlcG9ydAorCisjIyB2aW06c2V0IGZ0PWF1dG9tYWtlOgpkaWZmIC0tZ2l0IGEvdG9vbHMvcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLnNoIGIvdG9vbHMvcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNjg4ZjllNC4uOTRhZThmYwotLS0gYS90b29scy9ydW4td2l0aC10bXAtc2Vzc2lvbi1idXMuc2gKKysrIGIvdG9vbHMvcnVuLXdpdGgtdG1wLXNlc3Npb24tYnVzLnNoCkBAIC00NSw2ICs0NSwxMSBAQAogdW5zZXQgREJVU19TRVNTSU9OX0JVU19BRERSRVNTCiB1bnNldCBEQlVTX1NFU1NJT05fQlVTX1BJRAogCisjIHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgYWZmZWN0IGRidXMtcnVuLXNlc3Npb24gYW55IG1vcmUsIGJ1dCBjb3VsZCBiZQorIyBzaWduaWZpY2FudCBmb3IgZGJ1cy1sYXVuY2ggYXMgdXNlZCBieSB0aGUgYXV0b2xhdW5jaCB0ZXN0CitEQlVTX1VTRV9URVNUX0JJTkFSWT0xCitleHBvcnQgREJVU19VU0VfVEVTVF9CSU5BUlkKKwogJERCVVNfVE9QX0JVSUxERElSL3Rvb2xzL2RidXMtcnVuLXNlc3Npb24gXAogICAgIC0tY29uZmlnLWZpbGU9IiRDT05GSUdfRklMRSIgXAogICAgIC0tZGJ1cy1kYWVtb249IiREQlVTX1RPUF9CVUlMRERJUi9idXMvZGJ1cy1kYWVtb24iIFwK